本节摘要:SLAM(同步定位与建图)是导航链路的第一环:机器人在陌生的环境里一边给自己定位、一边把扫描拼成地图。本节以 slam_toolbox 为工具讲清在线建图的完整流程——启动、遥控扫描、质量验收、保存复用,并给出一套"地图好不好"的可操作判据。建图质量直接决定 6.2 节导航的上限,这一环的马虎会在下游加倍偿还。
SLAM 的趣味在于它的循环依赖:要建图得知道自己每刻在哪(否则扫描对不齐),要知道在哪得有地图(否则没法匹配定位)。工程上的解法是用运动增量做初始猜测:里程计说"这零点一秒我前进了五毫米",SLAM 在旧地图附近的小范围里做扫描匹配,修正这个猜测,同时把新扫描并入地图。猜测越准、修正越小,地图越稳——这就是为什么底盘里程计质量会直接影响建图质量,也解释了"换了差底盘后地图变糊"这类跨界故障。
以 slam_toolbox 为例,配合手动遥控(键盘节点)完成一次室内建图:
# 终端一:底盘与雷达驱动(前置:第5章的 TF 与传感器接入全部就绪) ros2 launch my_bringup sensors.launch.py # 终端二:启动 slam_toolbox 在线模式 ros2 launch slam_toolbox online_async_launch.py \ use_sim_time:=false # 终端三:键盘遥控,慢速、匀速、贴边走 ros2 run teleop_twist_keyboard teleop_twist_keyboard # RViz 观察地图生长(固定帧设 map,添加 Map 与 LaserScan 显示项)
遥控策略比参数调优更影响成图质量,三条经验:速度放慢——快了扫描畸变增大,匹配区间变宽,墙会糊;走闭环——绕房间一圈回到起点,回环检测会把累积误差"拉直",这正是闭环一致性判据的来源;先绕边界后补细节——外轮廓先立起来,再补充内部结构,避免早期局部错误固化。
建完图,别急着保存,先按四条判据验收。它们把"看起来还行"翻译成可检查的具体项:
| 判据 | 检查方法 | 不达标多说明 |
|---|---|---|
| 墙直 | 目测墙体边缘是否与真实走向平行 | 里程计漂移大或速度过快 |
| 角方 | 直角走廊在图里是否仍是直角 | 扫描匹配窗口过松 |
| 无重影 | 同一面墙是否只出现一次 | 回环未闭合,走圈时绕回来了 |
| 闭环一致 | 回到起点后起点位置是否重合 | 累积误差大,需补走闭环 |
判据背后有个统一的机理:SLAM 的误差来自里程计积分的漂移,扫描匹配负责修正,修正的锚点是"看到的老地方"。所以一切验收项都在问同一件事——漂移有没有被修正掉。墙斜了、角歪了、墙出重影,都是修正失败的具象。

地图验收合格后保存,系统切换到"只定位不建图"的稳态运行:
# 保存地图:生成 yaml 加 pgm 两个文件 ros2 run nav2_map_server map_saver_cli -f ~/maps/floor3 # 复用:map_server 加载静态地图,配合 amcl 定位 # 此时的运行组合是:map_server 定位 遥感不再需要 slam_toolbox
pgm 是灰度图:黑为占用、白为空闲、灰为未知。yaml 里记着分辨率、原点位姿——它声明"这张图的左下角在世界坐标的哪里",错一格地图整体错位一格。定位模式(amcl)的工作方式是粒子滤波:在已知地图上用一堆粒子猜位姿,逐步收敛。它有个必须知道的软肋:初始位姿敏感——机器人被搬到地图外或初始猜测离谱时,粒子可能收敛到错误局部解,表现为"定位在错误位置自信地抖动"。处置手段是在 RViz 里手动给初始位姿,或让机器人走到特征明显的区域自我校正。
💡 关键直觉:建图是"认知",定位是"考试"。建图期的错误会被永久固化进地图;定位期的错误可以重定位纠正。所以宁可建图慢、判据严,也别指望运行期补救——考试可以重考,认知很难重写。
判据之外,值得再看一次完整的溯源现场,把表格里的归因走成实路。现场是一台新组装的样机:建出的图里直角走廊成了平行四边形,重影明显。按对策清单逐项走——降速重扫,无改善;补走闭环,回环勉强闭合但图仍歪。走到第三项"查里程计",真相浮出:底盘两个驱动轮的直径实际差了百分之三,厂家标称一致。直行时底盘在持续微转向,里程计按"直行"积分,漂移被系统性放大,扫描匹配窗口再宽也修不正这种带方向性的偏差。
这个案例的解读价值在于偏差的方向性:随机噪声造成的漂移走圈能平均掉,系统性偏差造成的漂移走多少圈都在积累。墙斜、角歪这类"整体形变"症状,多数指向系统性偏差——轮径差、轴距差、安装偏斜,而不是参数。参数调优治不了机械公差。
处理动作是把两轮直径实测值写进底盘驱动配置,重扫一次成型。顺手沉淀了一条团队流程:新底盘上线前,走十米直线路,用里程计积分终点与实际终点的偏差做体检——偏差超过百分之一,先修机械再看软件。建图质量问题里,机械因占比之高常出乎软件团队的预料;把排查半径从"算法参数"扩展到"底盘物理",很多悬案当场了结。
还有一个常被问起的运维问题:环境改造后地图要不要重扫?判断标准是特征留存度——墙面格局基本不变的轻度改动(搬货架、加隔断),定位模式下让 amcl 用扫描匹配吸收增量即可,不必重扫;结构性改动(拆墙、新增走廊)则必须重扫,否则定位会持续把旧地图"往新世界上硬套",抖动与错位频发。地图是有保质期的资产,保质期由环境变化率决定——把"何时重扫"写进运维手册,好过每次现场争论。
地图立住了。下一节让机器人自己走起来:Nav2 的代价地图、两级规划与行为树。