
源码系统概览
文章正文
Navigation2 是 ROS 2 官方长期维护的机器人导航框架源码,目标是让移动机器人在已知或未知环境中完成自主定位、全局路径规划与局部运动控制。
该项目面向科研、教育与工业级自主移动机器人场景,是 ROS 社区中最核心的导航技术栈之一。
源码简介
本仓库源码以 C++ 为主体并辅以 Python 工具链,整体由 amcl 定位、bt_navigator 行为树调度、planner 全局规划、controller 局部控制、costmap_2d 代价地图、map_server 地图服务、lifecycle_manager 生命周期管理等多个功能包组成。
源码内部通过 nav2_core 提供一组抽象插件接口,将算法研究者与系统工程师的关注点解耦,开发者可以只替换规划器或控制器插件而不改动整体调度逻辑。
整个工程体量约一千七百余个文件,其中 C++ 源文件六百余个,头文件四百余个,工程结构清晰且模块边界明确。
适用场景
在适用场景中,Nav2 常见于室内服务机器人、仓储物流自动导引车、巡检机器人与科研教学平台,承担从充电坞到目标点的自主移动任务。
它同样适用于需要多机器人协同或复杂恢复行为的园区巡检与无人配送等真实落地业务。
功能亮点
功能亮点之一是内置多种先进规划算法,例如 Smac 混合 A 星、Theta 星与 NavFn,可覆盖差速、全向与类车运动模型。
功能亮点之二是局部控制侧提供 DWB、MPPI、RPP 与 Graceful 等可插拔控制器,能够针对不同底盘特性进行调参。
功能亮点之三是采用行为树编排导航任务,支持旋转、回退、等待、循迹等恢复行为,提升复杂环境下的鲁棒性。
功能亮点之四是 collision_monitor 提供额外的安全监控层,在紧急停车层面降低碰撞风险。
技术架构与部署指南
技术栈与运行环境
开发语言以 C++ 为主,核心节点与算法均由 C++17 实现,工程体量约六百余个源文件。
构建系统基于 ROS 2 的 colcon 与 CMake,并依赖 pluginlib、Behavior-Tree.CPP 等第三方库。
运行环境推荐 Ubuntu 22.04 或 24.04,并安装 Humble、Jazzy 等对应版本的 ROS 2 发行版。
局部规划与控制模块提供 DWB、MPPI、RPP 等多种可插拔控制器,适配差速、全向与阿克曼模型。
可视化与调试通过 RViz 2 插件完成,支持代价地图、规划路径与机器人位姿的实时查看。
安装与部署提示
安装与部署提示:在已配置 ROS 2 的 Ubuntu 主机上,可直接通过软件源安装导航相关功能包,也可将仓库克隆进工作区后使用 rosdep 与 colcon 进行源码编译。
部署时建议先运行官方 bringup 示例,确认雷达、里程计与 TF 坐标树正常,再逐步替换自有机器人的参数文件与启动描述。
官方还提供 Docker 容器镜像,便于在隔离环境中快速验证导航能力而无需完整安装桌面环境。
截图与演示说明
下图为 Navigation2 官方项目标识,代表 ROS 2 导航技术栈的整体品牌与社区归属,也便于读者快速识别该项目。

下图为 Nav2 生态赞助方概览,反映该项目由 Open Navigation 以及 AMD、NVIDIA 等产业力量持续支持与资助。

下图为 MPPI 局部控制器的实机演示动图,展示机器人在自适应碰撞规避条件下平滑跟踪全局规划路径的真实效果。

常见问题
问:机器人启动后始终不移动,应如何排查?
答:优先检查 map 到 odom 再到 base_link 的 TF 坐标树是否完整,并确认代价地图已接收到雷达与里程计数据。
问:差速底盘应该优先选择哪一款局部控制器?
答:常规差速机器人可先用 DWB 或 RPP 上手,若需要更强的自适应避障能力,可切换到 MPPI 控制器。
问:是否可以用纯 Python 调用导航能力?
答:可以借助 nav2_simple_commander 以库的形式在 Python3 中编排导航任务,无需深入 ROS 2 底层接口。
安全风险提示
collision_monitor 仅提供 CPU 级别的额外安全监控,并不等同于经过认证的安全激光或安全控制器,关键安全场景仍需搭配合规硬件。
ROS 2 默认 DDS 通信未开启加密,在不可信网络中应启用 SROS2 安全配置,避免控制指令被未授权节点监听或注入。
二次开发引入第三方插件时,应审查其代码来源与权限申请,避免加载不可信二进制造成系统风险。
下载说明
本页面所提供的资料为 Navigation2 上游开源项目的源码分析说明,读者可依据自身机器人平台进行学习与二次开发。
源码以 Apache 2.0 许可证发布,商用与修改需保留相应版权与许可声明,具体条款以仓库内 LICENSE 文件为准。
如需获取完整可编译的工程文件,请通过文末开源地址克隆对应发行版分支,并参考官方文档完成依赖安装与编译。
GitHub项目开源地址:https://github.com/ros-planning/navigation2