机器人建图(SLAM)的产物通常是一张占用栅格地图(Occupancy Grid Map)。现实中的建图结果几乎不可能一次完美:墙线发虚、走廊里出现噪点、玻璃门被识别成实体、扫描时有人走动留下"鬼影"。这些瑕疵会直接影响定位与导航效果,所以人工修补是机器人部署流程里绕不开的一步。pgmXT 让你在浏览器里完成这项工作,不需要安装 ROS、GIMP 或任何桌面软件。
一、了解占用栅格地图的三种状态
在开始编辑之前,先弄清楚 ROS 导航体系中地图栅格的定义。一张 .pgm 地图上的每个像素只有三种语义:
| 状态 | 常见灰度 | 含义 | 导航时的行为 |
|---|---|---|---|
| 空闲(free) | 接近白色(≈254) | 机器人可以自由通过 | 代价地图中代价为 0 |
| 占据(occupied) | 接近黑色(≈0) | 存在障碍物,不可通行 | 代价为内切最大值 |
| 未知(unknown) | 中灰(≈205) | 传感器从未覆盖该区域 | 机器人默认不会进入 |
二、导入你的建图结果
- 打开编辑器首页,把建图输出的
.pgm(或已转换为 PNG/BMP 的等价灰度图)直接拖入页面。 - 如果你的地图同时导出了
.yaml配置文件,请记录其中的resolution(米/像素)与origin字段——编辑像素不会改变它们,但了解分辨率能帮你判断"一条墙画得够不够厚"。 - 以常用的 0.05 m/像素为例:真实厚度 10 cm 的砖墙在地图上只有 2 个像素。放大到 8× 以上再画墙,否则线条会因为太细被压缩掉。
三、典型修补场景
1. 擦除"鬼影"噪点
建图时行人、推车、被搬走的椅子会在地面上留下黑色斑块。使用擦除(置为空闲)画笔沿走廊扫一遍,把这些孤立黑点清掉。判断标准很简单:真实存在且永远不动的物体才是障碍物,垃圾桶、饮水机这类临时物体建议擦掉,交给运行时的实时代价地图处理。
2. 补全断墙与门洞
激光雷达在长白墙、玻璃、镜面处容易丢失反射,导致墙线出现断口。断口会让全局路径规划"穿墙抄近道",必须用绘制(置为占据)画笔连续补全。补墙时把线条画到与相邻墙体完全相接,留 1 个像素的缝都可能被膨胀层利用。
3. 关闭不希望机器人进入的区域
在未知区域(中灰)周围按需补一圈占据像素,相当于给地图"封边",防止定位粒子跑到建图范围之外。对已知但禁行的区域(如卫生间、台阶),即使雷达曾测到它是空的,也可以直接涂成占据来禁止规划器进入。
4. 玻璃门与自动门
常见的处理是把自动门在地图中"画开"(置为空闲),因为门打开时真实可通行;而对常闭的门则涂成占据。两种方式取决于你的运维习惯,关键是与现场实际状态保持一致。
四、导出与配套 YAML
编辑完成后导出 PGM,并保证与你项目中的 .yaml 保持配套关系:
| YAML 字段 | 说明 | 示例 |
|---|---|---|
image | 地图文件名,导出后文件名如有变化要同步修改 | map.pgm |
resolution | 每个像素代表的实际距离(米) | 0.05 |
origin | 地图左下角在地图坐标系中的位置 | [-13.6, -5.4, 0] |
negate / mode | 保持 mode=0、negate=0 即可,与 pgmXT 的读写约定一致 | 0 |
把导出的 PGM 放回工作包(package)的地图目录,替换旧文件后重启地图服务,用 RViz 或你的上位机叠加激光点检查对位是否仍然准确——只要没有改动画布尺寸,origin 与 resolution 就不需要调整。
五、修改后的验收清单
- 走廊、房间边界没有多余的黑色噪点
- 所有墙线连续、无 1 像素断口
- 电梯口、台阶、玻璃幕墙等风险点已按运维策略处理
- 地图外围未知区域已合理封闭
- 在导航目标点上重新定位一次,确认粒子云收敛正常