导航概览
导航(Navigation)是移动机器人最核心的能力之一。它指的是机器人能够自主地从当前位置移动到目标位置,同时在行进过程中避开障碍物、遵守运动学约束,并与环境安全交互。
在 ROS 2 生态中,Navigation2(Nav2) 是标准的导航软件栈,提供了完整的移动机器人导航解决方案。
导航的核心问题
Section titled “导航的核心问题”机器人导航需要解决以下几个核心问题:
1. 我在哪里?(定位)
Section titled “1. 我在哪里?(定位)”机器人需要知道自己在环境中的位置和朝向(统称为位姿,pose)。这依赖于:
- 里程计(Odometry):通过轮式编码器、IMU 等传感器连续估计机器人的位移,提供
odom→base_link的坐标变换。里程计在短距离内精度较高,但存在累积漂移。 - 全局定位(Global Localization):通过激光雷达匹配预建地图(如 AMCL)、GPS、SLAM 等方式提供
map→odom的坐标变换,用于校正里程计漂移。
ROS 2 中通常遵循 REP 105 标准,构建 map → odom → base_link → [传感器坐标系] 的完整 TF 树。Robot Localization 包常用于融合多种传感器以获得平滑的里程计输出。
2. 周围环境是什么样的?(感知与建图)
Section titled “2. 周围环境是什么样的?(感知与建图)”机器人需要感知周围环境中的障碍物和可通行区域。常用的环境表示方式包括:
- 代价地图(Costmap):一张规则的 2D 网格,每个单元格标记为空闲、占用或未知。通过多层插件叠加传感器数据(激光雷达、深度相机等)来更新。
- 静态地图:通过 SLAM 算法(如 SLAM Toolbox)预先构建的占据栅格地图。
3. 怎么到达目标?(路径规划与控制)
Section titled “3. 怎么到达目标?(路径规划与控制)”导航系统通常采用两级规划架构:
- 全局规划器(Global Planner):在全局代价地图上搜索从起点到目标点的路径(通常使用 A*、Dijkstra 等算法),不考虑机器人的运动学约束。
- 局部控制器(Local Controller):也叫局部规划器,负责跟随全局路径并生成具体的速度命令(
cmd_vel),同时避开动态障碍物并遵守机器人的运动学约束。
Nav2 架构
Section titled “Nav2 架构”Nav2 是 ROS 2 中的标准导航框架,采用模块化的插件架构:
| 组件 | 功能 |
|---|---|
| BT Navigator | 使用行为树(Behavior Tree)编排高层导航逻辑 |
| Planner Server | 全局路径规划,支持多种规划算法插件 |
| Controller Server | 局部路径跟随与速度控制 |
| Recovery Server | 恢复行为(如原地旋转、后退脱困) |
| Smoother Server | 路径平滑优化 |
| Costmap 2D | 多层代价地图,融合多种传感器数据 |
| AMCL | 基于粒子滤波的自适应蒙特卡洛定位 |
Nav2 通过 ROS 2 动作(Action)接口接收导航指令,如 NavigateToPose(导航到指定位姿)和 NavigateThroughPoses(途经多个航点)。所有服务器组件都是生命周期节点(Lifecycle Node),支持确定性的启动和关闭流程。
- Nav2 核心概念 —— Nav2 的详细架构说明
- Nav2 安装与配置指南
- 使用 Nav2 进行导航(教程)
- 坐标系变换(tf2)
- 生命周期节点与组合