【ROS2】 导航实战:从 SLAM 建图到 Nav2 自主巡航的完整指南(附路径避坑)
【ROS2】 导航实战:从 SLAM 建图到 Nav2 自主巡航的完整指南(附路径避坑)
在 ROS2 机器人开发中,很多初学者都会经历一个“至暗时刻”:明明刚刚用 SLAM 完美地扫描了地图,为什么一切换到导航模式,RViz 里就是一片空白,或者疯狂报错 frame 'map' does not exist?
其实,这往往不是代码写错了,而是对 “先建图,后导航” 的工作流理解不够透彻,加上一个小小的路径设置习惯导致的。今天我们就来彻底打通这两个环节,让你一次跑通全流程!
️ 核心逻辑:为什么必须分两步走?
很多新手会问:“建图和导航不能一起开吗?”
答案是:可以,但在实际工程中,我们通常将它们解耦。
-
SLAM 阶段(探索者模式)
- 任务:拿着激光雷达在未知环境里转一圈,把墙壁、障碍物扫描出来,生成一张静态的“底图”。
- 产出:
.pgm(图片)和.yaml(配置文件)。 - 比喻:就像探险家第一次进入迷宫,边走边画地图。这时候机器人只知道“哪里有墙”,但不知道“我要去哪”。
-
Nav2 导航阶段(快递员模式)
- 任务:加载刚才那张静态地图,利用 AMCL 算法在地图上确定自己当前的位置(定位),然后规划出一条从 A 点到 B 点的路径。
- 前提:地图必须是静止的,且机器人必须知道自己在哪里。
- 比喻:就像拿着刚才画好的地图去送快递。你需要先确认自己在地图上的哪个点(定位),然后规划路线避开障碍物走到目的地。
黄金法则:绝对路径的正确姿势
当你完成了第一步,保存了地图,准备开始第二步时,最容易翻车。
错误示范 1:使用相对路径
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=my_map.yaml
- 风险点:这种写法依赖于你当前终端所在的工作目录。如果你在
/home/liurui/下运行,系统能找到;但如果你不小心cd到了/home/liurui/ros2_ws/src,系统就会去这里找,找不到就会报错。
错误示范 2:使用 ~ 波浪号
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=~/my_map.yaml
- 风险点:虽然
~在 Linux 终端里能自动识别为你的主目录,但在 ROS2 的 launch 文件底层解析时,它往往不认这个符号。系统会把它当成一个普通的文件夹名字去寻找,结果自然是找不到文件,直接报错。
正确示范:使用完整的绝对路径
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=/home/liurui/my_map.yaml
- 优势:从根目录
/开始索引,指向唯一确定的位置。无论你的终端当前在哪个文件夹,Nav2 都能准确读取到你的地图文件。这是保证工程稳定性的第一步。
️ 实操演练:从保存地图到成功导航
第一步:清理旧环境(非常重要!)
SLAM 和 Nav2 是两套不同的算法逻辑。在切换模式前,必须进行“大扫除”:
- 关闭所有旧的终端窗口。
- 关闭 Gazebo 和 RViz。
- (推荐)在终端输入
killall gzserver gzclient rviz2确保后台没有残留进程。
第二步:启动仿真世界
打开新终端,启动 Gazebo:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
第三步:加载地图并启动导航
打开第二个终端,使用完整的绝对路径启动 Nav2:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=true map:=/home/liurui/my_map.yaml
注意:
use_sim_time:=true告诉导航系统使用 Gazebo 的仿真时间,这一步绝对不能省,否则时间戳对不上,导航直接瘫痪。
第四步:解决 “Global Status: Error”(最关键的一步)
当 RViz 弹出后,你可能会发现地图出来了,但左下角显示 Navigation: unknown,甚至顶部有红色报错。
原因:机器人虽然有了地图,但它是个“瞎子”,它不知道自己在这张地图的哪个位置。
解决方法:
- 点击 RViz 顶部工具栏的 “2D Pose Estimate”(绿色箭头图标)。
- 观察 Gazebo 中机器人的实际位置和朝向。
- 在 RViz 的地图上找到对应位置,按住鼠标左键拖动一下(方向要与机器人车头一致),然后松开。
- 此时你会看到一堆红色粒子(AMCL 定位云),如果粒子开始收敛聚集,说明定位成功,红色的 Error 也会随之消失。
总结
从 SLAM 到 Nav2,本质上是从 “创造地图” 到 “使用地图” 的过程。
- 流程上:务必先保存好
.yaml和.pgm,重启环境后再加载导航。 - 操作上:养成使用完整绝对路径的习惯,杜绝因目录切换或波浪号解析导致的文件丢失。
- 调试上:遇到报错不要慌,先检查
2D Pose Estimate,给机器人一个初始位置,往往能解决 90% 的问题。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)