1、Nav2初识:什么是Nav2?Nav2能做什么?Nav2的架构概览与核心组件介绍
1.1 什么是Nav2?
Nav2,全称Navigation2,是ROS2生态下的导航系统。
说白了,它就是机器人的「腿」和「眼睛」的结合体。你给机器人一个目标点,它自己知道怎么走过去,还能避开路上的障碍物。
我记得刚接触机器人时,总以为导航就是「从A到B」。后来踩过坑才明白,真正的导航要解决三个问题:我在哪?我要去哪?我怎么去?Nav2就是专门回答这三个问题的。
Nav2是ROS1中经典导航栈(Navigation Stack)的升级版。它专门为ROS2设计,充分利用了ROS2的分布式通信、实时性支持和安全性特性。
1.2 Nav2能做什么?
我在项目中遇到过不少需求,Nav2基本都能覆盖。它的能力可以归纳为以下几点:
- 自主导航:给定目标点,机器人自动规划路径并执行
- 动态避障:遇到移动障碍物(比如人、其他机器人)能实时绕开
- 行为树控制:用行为树管理导航流程,逻辑清晰好维护
- 生命周期管理:每个组件都有明确的状态(未配置、激活、停用等),方便调试
- 多机器人支持:多个机器人可以共享地图,各自导航互不干扰
- 插件化扩展:你可以替换任何模块,比如换一种路径规划算法
嗯,这里要注意:Nav2不是万能的。它依赖高质量的地图和准确的定位。地图建不好,导航肯定翻车。
1.3 Nav2的架构概览
先看一张整体架构图,我习惯用这张图给新人讲解:
这张图我画了好几次才满意。你想想看,整个系统就像一条流水线:传感器采集数据 → 定位模块告诉你「我在哪」 → 规划层算出路径 → 控制层执行运动 → 输出速度指令。
1.4 核心组件介绍
Nav2的核心组件,我按功能分成几类来讲:
1.4.1 行为树(Behavior Tree)
这是Nav2的大脑。它用树状结构管理导航流程:先定位、再规划、然后控制、遇到障碍就避让或恢复。
1.4.2 规划器(Planner)
规划器分两种:
| 类型 | 作用 | 常用算法 | 特点 |
|---|---|---|---|
| 全局规划器 | 从起点到终点的整体路径 | NavFn、A*、Theta* | 计算量大,但路径最优 |
| 局部规划器 | 实时避障,修正局部路径 | DWA、TEB、MPC | 响应快,但可能陷入局部最优 |
我曾经在项目中遇到过一个问题:全局规划器算出的路径要穿过一扇窄门,但局部规划器每次都在门口犹豫不决。后来发现是代价地图的参数没调好。嗯,代价地图的事后面会细讲。
1.4.3 控制器(Controller)
控制器负责把规划好的路径转成具体的速度指令。说白了,就是告诉机器人「左转30度,前进0.5米/秒」。
常用的控制器有:
- DWA控制器:动态窗口法,适合差速轮机器人
- MPC控制器:模型预测控制,适合全向轮或阿克曼底盘
- Pure Pursuit:纯追踪法,适合简单场景
1.4.4 代价地图(Costmap)
代价地图是Nav2的「眼睛」。它把传感器数据(激光雷达、深度相机)转换成栅格地图,每个格子标记为「可通行」「障碍物」「未知区域」。
1.4.5 定位模块(AMCL)
AMCL(自适应蒙特卡洛定位)是Nav2默认的定位方法。它用粒子滤波来估计机器人的位置和姿态。
简单理解:撒一把粒子在地图上,哪个粒子跟传感器数据匹配得好,就认为机器人可能在那里。
1.4.6 恢复行为(Recovery)
导航不可能一帆风顺。机器人卡住了怎么办?Nav2内置了恢复行为:
- 原地旋转:先转一圈看看周围环境
- 后退:如果前面走不通,先退一步
- 重新规划:放弃当前路径,重新算一条
我个人习惯把恢复行为放在行为树的最后,作为兜底方案。毕竟,机器人能自己脱困,总比等人去救强。
1.5 为什么选择Nav2?
你可能会问:市面上导航框架那么多,为什么选Nav2?
我的答案是:生态。ROS2的生态太强了。你需要地图?有SLAM Toolbox。你需要可视化?有RViz2。你需要调试?有各种现成的工具链。
而且Nav2是模块化的。你不需要全部用上。比如你的机器人只有激光雷达,那就只用激光雷达相关的模块。想换算法?写个插件就行。
好了,这一章就到这里。Nav2的架构和核心组件你已经有了整体认识。下一章我们会动手安装Nav2,然后跑一个简单的Demo。到时候你就知道,纸上得来终觉浅,绝知此事要躬行。