2、ROS2与Nav2安装:ROS2 Humble安装、Nav2源码编译、依赖检查

好,咱们正式开始动手。上一章我们把整个仿真联调的地图画清楚了,这一章就来搭地基——把ROS2 Humble和Nav2装好。

说实话,安装这件事,说简单也简单,说坑也多。我这些年帮人排查过不下几十次安装问题,十有八九都是版本没对齐、源没配好、或者依赖没装全。咱们这一章就把这些坑提前填上。

2.1 ROS2 Humble 安装

我个人习惯用 Ubuntu 22.04 搭配 ROS2 Humble。为什么选这个组合?因为Humble是长期支持版(LTS),到2027年才结束维护,稳定性有保障。你想想看,做项目最怕什么?最怕辛辛苦苦搭的环境,过两年官方不维护了。

2.1.1 设置软件源

先把ROS2的软件源加进去。这一步很多人会漏掉,或者配错了源地址。

sudo apt update
sudo apt install curl gnupg lsb-release
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
sudo apt update
小提示: 如果你在墙内,建议换成国内镜像源,比如清华或中科大的。我曾经帮一个学员排查,他卡在apt update超时上整整一下午,换了镜像源三分钟搞定。

2.1.2 安装ROS2 Humble桌面版

我建议直接装 desktop 版本,包含了RViz、Gazebo这些可视化工具,后面调试会方便很多。

sudo apt install ros-humble-desktop

这个包比较大,大概1-2GB,下载时间取决于你的网速。趁这个时间,你可以去泡杯咖啡。

2.1.3 配置环境变量

装完之后,别忘了把ROS2加到bashrc里。不然每次打开终端都要手动source,很烦人。

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下是否安装成功:

ros2 run demo_nodes_cpp talker

如果能看到节点在发布消息,恭喜你,ROS2 Humble装好了。

注意: 如果你同时装了ROS1和ROS2,环境变量会冲突。我建议在~/.bashrc里只保留一个source,另一个用别名(alias)来切换。

2.2 Nav2 源码编译

为什么要源码编译?直接用apt安装不行吗?

嗯,这里我要说句实话:apt安装的Nav2版本往往比较旧,而且有些功能包不全。咱们做仿真联调,后面要改参数、加插件,源码编译更灵活。

2.2.1 创建工作空间

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src

2.2.2 克隆Nav2源码

我建议克隆 humble 分支,别用main分支。main分支是给Rolling版本用的,API可能有变化。

git clone https://github.com/ros-planning/navigation2.git -b humble

2.2.3 安装依赖

这一步是重头戏。Nav2的依赖非常多,rosdep可以帮你自动处理大部分。

cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble

如果遇到rosdep没装,先装一下:

sudo apt install python3-rosdep2
sudo rosdep init
rosdep update
核心经验: rosdep init如果报错,多半是因为网络问题。我曾经遇到过rosdep update超时,后来换了手机热点才成功。你也可以试试用代理。

2.2.4 编译Nav2

cd ~/nav2_ws
colcon build --symlink-install

这里我推荐加 --symlink-install 参数。什么意思呢?就是编译后的文件用符号链接指向源码。这样你修改Python脚本后不用重新编译,直接生效。调试阶段特别有用。

编译时间取决于你的机器配置。我的笔记本大概要15-20分钟。如果编译过程中报错,别慌,多半是某个依赖没装全。

2.3 依赖检查与常见问题

编译完了,怎么知道有没有问题?我一般做三步检查:

2.3.1 检查关键包是否存在

ros2 pkg list | grep nav2

正常应该能看到 nav2_bringup、nav2_planner、nav2_controller 等核心包。如果少了某个包,说明编译时跳过了。

2.3.2 检查环境变量

echo $AMENT_PREFIX_PATH | grep nav2

如果输出为空,说明你没source工作空间:

source ~/nav2_ws/install/setup.bash

2.3.3 常见问题汇总

问题现象 可能原因 解决方案
colcon build 报找不到某个包 依赖未安装 重新运行 rosdep install
编译时卡在某个包上 内存不足 用 colcon build --parallel-workers 1 单线程编译
ros2 run 找不到节点 未source工作空间 检查 .bashrc 或手动 source
Python脚本修改后不生效 未使用 --symlink-install 重新编译或改用符号链接模式
避坑指南: 我曾经在编译Nav2时遇到一个诡异的错误——"Could not find a package configuration file provided by 'nav2_msgs'"。查了半天,发现是工作空间里之前残留了旧版本的nav2_msgs。解决办法很简单:把build和install目录删掉,重新编译。

2.4 本章知识体系

为了让你对整个安装流程有个直观认识,我画了一张流程图:

ROS2 Humble + Nav2 安装流程 ① 设置软件源 ② 安装ros-humble-desktop ③ 配置环境变量 ④ 创建工作空间 ⑤ 克隆Nav2 humble分支 ⑥ rosdep安装依赖 ⑦ colcon build编译 ⑧ 检查关键包 ⑨ 检查环境变量 ⑩ 运行测试节点 ✅ 安装完成,进入下一章 ROS2安装 Nav2编译 验证检查

这张图把整个安装流程分成了三个阶段:ROS2安装、Nav2编译、验证检查。你照着这个顺序走,基本不会出大问题。

好,到这里ROS2 Humble和Nav2的安装就完成了。下一章我们开始搭建仿真环境,到时候会用到Gazebo和TurtleBot3的模型。嗯,那才是真正好玩的部分。