pgmXT

pgmXT 使用教程

从零开始掌握在线 SLAM 地图编辑:导入、修补、标注、导出全流程

机器人建图(SLAM)的产物通常是一张占用栅格地图(Occupancy Grid Map)。现实中的建图结果几乎不可能一次完美:墙线发虚、走廊里出现噪点、玻璃门被识别成实体、扫描时有人走动留下"鬼影"。这些瑕疵会直接影响定位与导航效果,所以人工修补是机器人部署流程里绕不开的一步。pgmXT 让你在浏览器里完成这项工作,不需要安装 ROS、GIMP 或任何桌面软件。

一、了解占用栅格地图的三种状态

在开始编辑之前,先弄清楚 ROS 导航体系中地图栅格的定义。一张 .pgm 地图上的每个像素只有三种语义:

状态常见灰度含义导航时的行为
空闲(free)接近白色(≈254)机器人可以自由通过代价地图中代价为 0
占据(occupied)接近黑色(≈0)存在障碍物,不可通行代价为内切最大值
未知(unknown)中灰(≈205)传感器从未覆盖该区域机器人默认不会进入
注意:PGM 像素值与"占据概率"是反直觉的对应关系——像素越黑,占据概率越高。很多初学者第一次修图时把墙涂白,结果地图完全反转。记住一句话:黑墙白地。

二、导入你的建图结果

  1. 打开编辑器首页,把建图输出的 .pgm(或已转换为 PNG/BMP 的等价灰度图)直接拖入页面。
  2. 如果你的地图同时导出了 .yaml 配置文件,请记录其中的 resolution(米/像素)与 origin 字段——编辑像素不会改变它们,但了解分辨率能帮你判断"一条墙画得够不够厚"。
  3. 以常用的 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 就不需要调整。

五、修改后的验收清单