07-路径规划与导航-Nav2导航栈
作者:姚博文 · 2026-09-15
Nav2 导航栈 — "怎么走过去"的全栈实现:行为树、规划器、控制器、costmap 与恢复行为
定位:ROS2 Nav2 的架构拆解(行为树 / 全局规划器 / 局部控制器 / costmap / recovery 插件)、全套参数配置、launch 部署与常见问题(定位跳变、卡死)排查 | 适用:智能小车/移动机器人开发
1\. 概述
1.1 这篇解决什么问题
前面两篇《全局规划》《局部规划》讲的都是**单个算法**:A\*/D\* Lite 怎么在网格上找一条路,DWA/MPPI 怎么把路变成速度指令。但把它们和定位、传感器、执行器拼成一台"能自主走到目标点"的机器人,还缺一层**调度与容错框架**:
规划失败怎么重规划、被堵住怎么恢复、静态/动态障碍分别存哪、按什么顺序调用——这些"调度与容错"问题正是单算法不回答的。
**Nav2(Navigation 2)**就是 ROS2 的这套导航框架:它是"规划算法"与"真实世界"之间的**任务执行层**,核心职责是**安全地把机器人从当前位置带到目标点**(safely move a robot from A to B),包含避障、卡死恢复、多传感器融合地图。
| 问题 | Nav2 里谁负责 | 对应组件 |
| --- | --- | --- |
| 从哪到哪的整条路 | 全局规划器(Global Planner) | planner_server + NavFn/Smac 插件 |
| 下一秒的速度指令 | 局部控制器(Local Controller) | controller_server + DWB/MPPI/RPP 插件 |
| 环境长什么样(静态+动态) | 代价地图(Costmap) | costmap_2d(分层:静态/障碍/膨胀) |
| 流程怎么调度、失败怎么恢复 | 行为树(Behavior Tree)+ 恢复行为 | bt_navigator + behavior_server |
| 我在地图的哪里 | 不在 Nav2 内(前置依赖) | AMCL(见 06-定位与SLAM/定位与状态估计.md) |
| 地图从哪来 | 不在 Nav2 内(前置依赖) | 手工画 / GMapping / SLAM Toolbox(见 06-定位与SLAM/激光SLAM.md) |
💡 一个常见的误解:Nav2 不含建图、不含定位。`map_server`(发布静态地图)和 `amcl`(粒子滤波定位)虽然打包在 Nav2 发行版里,但逻辑上是导航的**上游**。没有可信的 `map → base_link` TF,Nav2 什么都干不了——所以本文所有问题排查第一步都是先确认 TF 与定位。
1.2 在自主导航链路中的位置
对应 `00-路线图/学习路线图.md` 的全链路图(阶段 D:自主导航):