一、Nav2与SLAM概述:什么是Nav2?什么是SLAM?Nav2与SLAM的关系
1.1 先聊聊Nav2到底是什么
各位同学好,我是你们的导航课讲师。咱们开门见山——Nav2,全称是Navigation 2,它是ROS2生态下的一套导航框架。说白了,它就是给机器人装上“眼睛”和“腿”,让机器人知道自己在哪里,并且能安全地走到目标点。
我个人习惯把Nav2理解成一个“导航操作系统”。它不是一个单一的功能包,而是一整套工具链的集合。你想想看,一个机器人要导航,它得先知道地图吧?得知道自己在地图上的位置吧?得规划路径吧?还得避开路上的障碍物吧?Nav2把这些活儿全包了。
我在项目中遇到过不少新手,上来就问:“我装个Nav2是不是就能让机器人跑了?”嗯,没那么简单。Nav2提供的是框架和接口,真正的“灵魂”在于你如何配置它、调参它。就像给你一套乐高,你得自己搭出想要的形状。
核心要点:Nav2 = 全局规划器 + 局部规划器 + 定位模块 + 行为树 + 代价地图 + 恢复行为。它是一个完整的导航解决方案,不是某个单一算法。
1.2 那SLAM又是啥?
SLAM,全称Simultaneous Localization and Mapping,中文叫“同步定位与地图构建”。这名字挺拗口,我换个说法——让机器人在未知环境中,一边走路一边画地图,同时还要知道自己画到哪儿了。
你可能会问:“这不就是导航吗?”其实不一样。导航是“已知地图,规划路径”;SLAM是“没有地图,现画现用”。打个比方:你第一次去一个商场,一边逛一边在脑子里记路线,这就是SLAM。第二次再去,你直接看脑子里的地图找路,这就是导航。
我记得刚入行时,总觉得SLAM很神秘。后来自己动手跑了一次cartographer,看到激光雷达扫描的点云一点点拼成完整地图,那种感觉真的很奇妙。但别高兴太早——SLAM的坑多着呢,后面我会专门讲。
我的经验:SLAM算法大致分两类——基于滤波的(如Gmapping)和基于图优化的(如Cartographer、Karto)。现在主流是图优化,精度更高,但计算量也更大。选哪个?看你的硬件算力。
1.3 Nav2与SLAM的关系:一对黄金搭档
好,现在咱们聊聊最核心的问题:Nav2和SLAM到底是什么关系?
简单来说:SLAM负责“建图+定位”,Nav2负责“导航”。两者是上下游的关系。
- SLAM的输出:一张地图(通常是占用网格地图Occupancy Grid Map)和机器人的实时位姿。
- Nav2的输入:这张地图和位姿,然后规划路径、控制运动。
你想想看,没有SLAM,Nav2拿什么导航?一张空白地图?那机器人只能瞎转。没有Nav2,SLAM建好的地图有什么用?只能看看,机器人动不了。所以,两者缺一不可。
我在实际项目中,通常这样搭配:
- 第一步:用SLAM算法(比如Cartographer)建图,保存为PGM/YAML文件。
- 第二步:启动Nav2,加载这张地图,设置初始位姿。
- 第三步:发送导航目标点,让机器人自主移动。
但这里有个坑——SLAM建图的质量直接决定了导航的效果。我曾经有一次,建图时激光雷达没校准好,地图歪歪扭扭的。结果导航时机器人死活找不到路,还差点撞墙。嗯,从那以后我每次建图前都会先检查传感器标定。
避坑指南:千万不要在动态环境中建图!比如有人走来走去、门被开关。SLAM会把移动物体当成静态障碍物,导致地图出现“鬼影”。我曾经吃过这个亏,建了三次图才成功。
1.4 一张图看懂整体架构
为了让你更直观地理解,我画了一张架构图。别嫌丑,重点看逻辑关系。
从这张图你能看到,整个流程是单向的、清晰的。传感器数据先进SLAM,建好图后保存下来。然后Nav2加载这张图,结合实时定位,完成导航任务。
1.5 实际项目中的常见搭配
说了这么多理论,咱们看看实际项目中怎么选型。我整理了一个表格,方便你对照:
| 场景 | 推荐SLAM方案 | Nav2配置要点 | 我的建议 |
|---|---|---|---|
| 室内小场景(<1000㎡) | Gmapping / Karto | 使用静态地图模式 | Gmapping轻量,适合低算力平台 |
| 室内大场景(>1000㎡) | Cartographer | 开启子图匹配,调大内存 | 注意回环检测参数,否则容易漂移 |
| 室外场景 | Cartographer 3D / LOAM | 使用3D代价地图 | GPS辅助定位更稳定 |
| 动态环境 | Cartographer + 动态物体过滤 | 开启代价地图的障碍物层 | 我曾经在仓库里跑,叉车来回动,必须加滤波 |
小技巧:如果你用的是差速轮机器人,建议先用Gmapping快速建一张粗糙地图,确认传感器没问题后,再用Cartographer精细建图。这样可以节省大量调试时间。
1.6 本章小结
好,咱们把这一章的核心内容捋一捋:
- Nav2:ROS2的导航框架,负责路径规划、避障、控制。
- SLAM:同步定位与地图构建,负责在未知环境中建图和定位。
- 关系:SLAM建图 → 保存地图 → Nav2加载地图 → 导航执行。两者是上下游关系,缺一不可。
- 选型建议:小场景用Gmapping,大场景用Cartographer,室外用3D方案。
下一章,我会带你手把手搭建Nav2的开发环境。到时候咱们直接在代码里见真章。