环境搭建:ROS2 Humble安装、Gazebo Fortress安装、Nav2源码编译与安装
说实话,做机器人导航这几年,我踩过最多的坑就是环境搭建。明明代码逻辑没问题,结果卡在依赖版本不对、库文件找不到这种破事上。所以这一章,咱们把地基打牢。
我会带着你,一步步把ROS2 Humble、Gazebo Fortress和Nav2源码装好。嗯,都是实战经验,少走弯路。
1. ROS2 Humble 安装
ROS2 Humble 是目前最稳定的长期支持版本。我个人习惯用 Ubuntu 22.04,搭配起来最省心。
核心要点:ROS2 Humble 只支持 Ubuntu 22.04 (Jammy)。别用 20.04 硬装,会出各种奇怪问题。
1.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
1.2 添加 ROS2 源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
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
1.3 安装桌面版(推荐)
sudo apt update
sudo apt install ros-humble-desktop
这里有个小技巧:千万别装 ros-humble-base,那个不带 rviz2、tf2 这些常用工具。我刚开始就吃过这个亏,后来还得一个个补装,烦得很。
1.4 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证安装:打开终端,输入 ros2 --version,如果显示 ros-humble 相关版本号,就说明装好了。
2. Gazebo Fortress 安装
Gazebo Fortress 是 Gazebo 的 Ignition 系列版本,和 ROS2 Humble 是官方推荐的搭档。你想想看,如果版本不匹配,仿真跑起来各种报错,那多闹心。
2.1 安装 Gazebo Fortress
sudo apt update
sudo apt install ignition-fortress
2.2 安装 ROS2-Gazebo 桥接包
sudo apt install ros-humble-ros-ign-bridge
sudo apt install ros-humble-ros-ign-gazebo-demos
这个桥接包特别重要。我记得有一次,我直接在 Gazebo 里启动模型,结果 ROS2 完全收不到数据。后来才发现是忘了装 ros-ign-bridge。说白了,没有它,ROS2 和 Gazebo 就是两个世界。
2.3 验证安装
ign gazebo --version
如果显示 Ignition Fortress 版本号,就说明装好了。你也可以跑一个 demo 试试:
ros2 launch ros_ign_gazebo_demos ign_gazebo_demo.launch.py
注意:Gazebo Fortress 和 Gazebo Classic 是两套系统。不要混装,否则环境变量会打架。我曾经在同一个系统里装了 Classic 和 Fortress,结果启动时总是加载错库文件,折腾了一下午才排查出来。
3. Nav2 源码编译与安装
Nav2 官方推荐用源码编译。为什么?因为二进制包版本往往滞后,而且有些新功能还没打包进去。我个人习惯用源码,调试起来也方便。
3.1 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
3.2 克隆 Nav2 源码
git clone https://github.com/ros-planning/navigation2.git --branch humble
注意分支名是 humble,不是 main。我见过有人直接 clone main 分支,结果编译时一堆 API 不兼容,白忙活一场。
3.3 安装依赖
cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
如果 rosdep 没装,先装一下:
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
3.4 编译 Nav2
cd ~/nav2_ws
colcon build --symlink-install
这里我建议加上 --symlink-install 参数。这样你修改 Python 脚本后不用重新编译,直接就能生效。调试效率高很多。
3.5 配置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
编译加速:如果你的电脑性能不错,可以用 colcon build --symlink-install --parallel-workers 4 来并行编译。我一般设成 CPU 核心数的一半,既快又不卡。
4. 环境验证与常见问题
装完之后,最好跑一个简单的测试,确保所有组件能协同工作。
4.1 启动 Gazebo 并加载 Nav2 示例
ros2 launch nav2_bringup tb3_simulation_launch.py
如果一切正常,你会看到 Gazebo 里出现一个 TurtleBot3 小车,同时 rviz2 里显示地图和导航界面。
4.2 常见问题排查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Gazebo 启动后黑屏 | 显卡驱动问题或资源路径错误 | 检查 echo $GAZEBO_MODEL_PATH,确保包含模型路径 |
| ROS2 收不到 Gazebo 数据 | 桥接包未安装或版本不匹配 | 重新安装 ros-humble-ros-ign-bridge |
| Nav2 编译报错 | 依赖缺失或分支错误 | 运行 rosdep install 检查依赖,确认分支为 humble |
避坑指南:我曾经在编译 Nav2 时遇到 Could not find a package configuration file 的错误。排查了半天,发现是 rosdep 没有正确初始化。重新执行 sudo rosdep init && rosdep update 就好了。所以,遇到依赖问题,先检查 rosdep。
5. 知识体系总览
下面这张图,帮你理清本章的核心逻辑:
说白了,ROS2 是大脑,Gazebo 是身体,Nav2 是导航系统。桥接层就是神经,把指令和感知数据传起来。缺一个,整个系统就动不了。
好了,环境搭建就到这里。记住,装完一定要跑一遍测试,别等到写代码时才发现问题。那样排查起来,真的会让人崩溃。