1. Nav2 与 ROS2 生态:从零搭建你的导航开发环境
各位同学,欢迎来到《Nav2导航路径规划实战入门》的第一章。
做机器人导航这些年,我见过太多新手一上来就急着调参数,结果连环境都没搭对,折腾一星期还在编译报错里打转。说实话,导航这东西,环境搭好了,后面就顺了。今天我们就从 Nav2 的背景讲起,一步步把 ROS2 Humble 和 Nav2 源码装好,再把工作空间配明白。
1.1 Nav2 是什么?为什么选它?
Nav2,全称 Navigation2,是 ROS2 生态下最主流的导航框架。它负责让机器人从 A 点走到 B 点,过程中要避开障碍、规划路径、控制速度。
我个人习惯把 Nav2 看作一套「导航乐高」——它把地图服务、路径规划、控制、行为树这些模块拆开,你可以按需拼装。比起 ROS1 时代的 move_base,Nav2 最大的变化是:
- 原生支持 ROS2:用上了 DDS 通信,实时性更好,分布式部署也更方便
- 行为树驱动:导航流程不再是硬编码,而是用 XML 配置,改逻辑不用改 C++
- 生命周期管理:每个模块都有明确的启动/配置/激活状态,系统更稳定
核心观点:Nav2 不是单一的程序,而是一组插件的集合。你完全可以只换掉全局规划器,其他模块不动。这种设计,说白了就是让你能「对症下药」。
1.2 ROS2 Humble 安装:选对版本很重要
ROS2 的版本很多,Humble 是目前最稳定的长期支持版(LTS),支持到 2027 年。我建议新手直接上 Humble,别折腾 Rolling 或 Iron——那些版本更新太快,今天能用的包明天可能就废了。
1.2.1 系统要求
| 项目 | 推荐配置 | 最低配置 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
| CPU | 4 核以上 | 2 核 |
| 内存 | 8 GB | 4 GB |
| 磁盘 | 40 GB 空闲 | 20 GB 空闲 |
注意:千万不要在 Ubuntu 20.04 上强行装 Humble 的包,依赖会冲突到让你怀疑人生。我曾经为了省事试过一次,结果 rosdep 解析依赖花了两个小时,最后还是重装了系统。
1.2.2 安装步骤
打开终端,按顺序执行以下命令:
# 1. 设置编码
sudo apt update
sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
# 2. 添加 ROS2 源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update
sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装桌面版(包含 rviz2、demo 等)
sudo apt update
sudo apt install ros-humble-desktop
# 4. 安装开发工具
sudo apt install python3-colcon-common-extensions python3-rosdep python3-vcstool
# 5. 初始化 rosdep
sudo rosdep init
rosdep update
装完后,记得把下面这行加到 ~/.bashrc 里:
source /opt/ros/humble/setup.bash
然后 source ~/.bashrc 让它生效。验证一下:
ros2 run demo_nodes_cpp talker
如果看到「Publishing: 'Hello World'」不断刷屏,恭喜你,ROS2 装好了。
1.3 Nav2 源码编译与安装
为什么我推荐源码编译而不是直接 apt 安装?嗯,这里有个坑。apt 安装的 Nav2 版本通常比源码慢一两个小版本,而且你没法改代码。做导航开发,迟早要动源码的,不如一开始就编译。
1.3.1 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws
1.3.2 拉取源码
Nav2 的官方仓库在 GitHub 上,我们用 vcs 工具来管理多个仓库的版本:
cd ~/nav2_ws
wget https://raw.githubusercontent.com/ros-planning/navigation2/main/navigation2.repos
vcs import src < navigation2.repos
这一步会拉下来十几个包,包括 nav2_core、nav2_planner、nav2_controller、nav2_bt_navigator 等等。你想想看,如果手动一个一个 git clone,得累死。
1.3.3 安装依赖
cd ~/nav2_ws
rosdep install -r --from-paths src --ignore-src --rosdistro humble -y
这个命令会自动解析每个包的依赖,然后 apt 安装。如果遇到网络问题,多试几次,或者换个源。
1.3.4 编译
cd ~/nav2_ws
colcon build --symlink-install
--symlink-install 这个参数很重要。它会让编译后的文件以软链接方式安装,这样你改了 Python 脚本或 launch 文件后,不用重新编译就能生效。我在调试行为树时经常改 XML,这个参数帮我省了大量时间。
编译时间取决于你的机器配置,一般 10-20 分钟。如果报错,多半是依赖没装全,回头再跑一遍 rosdep install 就行。
1.3.5 配置环境变量
编译完成后,把工作空间的 setup 脚本加到 ~/.bashrc:
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
小技巧:如果你同时有 ROS2 官方包和 Nav2 源码,注意 source 顺序。先 source 官方的 /opt/ros/humble/setup.bash,再 source 工作空间的。这样工作空间的包会覆盖官方同名包,确保你用的是自己编译的版本。
1.4 工作空间配置:让开发更顺手
工作空间配好了,但离「顺手」还差几步。下面是我个人的一些配置习惯,供你参考。
1.4.1 创建别名
在 ~/.bashrc 里加几个别名,能省不少打字:
alias cbnav='cd ~/nav2_ws && colcon build --symlink-install'
alias sbnav='source ~/nav2_ws/install/setup.bash'
alias nav2='cd ~/nav2_ws/src/navigation2'
1.4.2 配置 VS Code 工作区
如果你用 VS Code,建议把 ~/nav2_ws 作为工作区根目录,然后安装这些插件:
- C/C++:代码补全和调试
- Python:Python 支持
- XML:行为树 XML 高亮
- ROS:ROS2 消息、服务、动作的语法支持
然后在 .vscode/c_cpp_properties.json 里添加 Nav2 的头文件路径:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/humble/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
1.4.3 验证安装
最后,跑一个简单的测试,确认 Nav2 能正常工作:
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False
如果看到 rviz2 界面弹出,地图上有一个 TurtleBot3,并且你可以用「2D Nav Goal」给它发目标点,那就说明一切就绪。
避坑指南:我曾经在编译时漏了 nav2_msgs 这个包,结果跑 launch 时一直报「找不到消息类型」。后来发现是 vcs import 时网络断了,少拉了一个仓库。所以拉完源码后,记得检查一下 src 目录下有没有 navigation2、nav2_msgs、nav2_bringup 这些关键文件夹。
1.5 本章知识体系总览
下面这张图帮你理清本章的核心脉络:
这张图把本章的四个核心模块串起来了。从 Nav2 的背景出发,到 ROS2 安装、Nav2 编译,最后是工作空间配置。每一步都是下一步的基础,缺一不可。
1.6 小结
这一章我们做了三件事:
- 搞清楚了 Nav2 是什么,以及它为什么值得学
- 装好了 ROS2 Humble 和 Nav2 源码
- 配好了开发环境,让后续编码更顺手