2. 环境搭建:ROS2 Humble安装、Gazebo与TurtleBot3仿真环境配置、Nav2源码编译

做机器人导航,第一步不是写代码,而是搭环境。我见过太多人卡在这一步,环境没配好,后面全白搭。这一章,咱们就把地基打牢。

说白了,我们要干三件事:装ROS2 Humble、配Gazebo仿真、编译Nav2源码。这三件事的顺序不能乱,否则会出各种奇怪的问题。

2.1 ROS2 Humble 安装

ROS2的版本很多,为什么选Humble?因为它是个长期支持版(LTS),稳定到2027年。我个人习惯用LTS版本,毕竟项目做到一半突然要升级系统,那滋味可不好受。

2.1.1 系统要求

ROS2 Humble官方推荐Ubuntu 22.04。如果你用的是其他版本,我建议你装个虚拟机或者双系统。嗯,这里要注意:千万别在Windows上用WSL2跑ROS2的图形界面,我试过,坑太多。

组件 推荐版本 备注
操作系统 Ubuntu 22.04 LTS 其他版本可能不兼容
Python 3.10+ 系统自带
编译器 GCC 11.2+ 系统自带

2.1.2 安装步骤

安装过程其实很简单,就几条命令。但我建议你一条一条执行,别复制粘贴一整段。为什么?因为万一中间某条命令失败了,你能立刻发现。

# 1. 设置locale
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

# 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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具
sudo apt install ros-dev-tools
我的小技巧:安装完成后,记得把source命令加到.bashrc里。这样每次打开终端就不用重新source了。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

2.1.3 验证安装

装完别急着走,先跑个demo验证一下。打开两个终端,一个跑talker,一个跑listener。如果能看到消息在传,说明装好了。

# 终端1
ros2 run demo_nodes_cpp talker

# 终端2
ros2 run demo_nodes_cpp listener

2.2 Gazebo与TurtleBot3仿真环境配置

Gazebo是ROS2最常用的仿真器。TurtleBot3则是我们课程的主角——一个两轮差速机器人。你想想看,没有真车的时候,用仿真跑导航算法,多方便。

2.2.1 安装Gazebo

ROS2 Humble默认用的是Gazebo Fortress(也叫Ignition Fortress)。我记得刚开始用的时候,还不太习惯它的新API,但用久了发现确实比老版Gazebo Classic稳定。

sudo apt install ros-humble-gazebo-ros-pkgs

2.2.2 安装TurtleBot3相关包

这里有个坑:TurtleBot3的包分两部分,一部分是机器人模型和驱动,另一部分是仿真用的。两个都要装。

sudo apt install ros-humble-turtlebot3*
我曾经踩过的坑:直接装turtlebot3*会把所有相关包都装上,大概有20多个。如果你只想装核心的,可以只装这几个:
sudo apt install ros-humble-turtlebot3-gazebo ros-humble-turtlebot3-bringup ros-humble-turtlebot3-description

2.2.3 配置环境变量

TurtleBot3有多种型号:Burger、Waffle、Waffle Pi。我们课程用Waffle Pi,因为它带激光雷达和深度相机,适合做导航。

echo "export TURTLEBOT3_MODEL=waffle_pi" >> ~/.bashrc
echo "export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models" >> ~/.bashrc
source ~/.bashrc

2.2.4 启动仿真环境

配置完成后,启动一个空世界看看效果:

ros2 launch turtlebot3_gazebo empty_world.launch.py

如果能看到TurtleBot3出现在Gazebo里,恭喜你,环境配好了。

2.3 Nav2源码编译

为什么不用apt直接装Nav2?因为apt装的是二进制包,不能改源码。我们做导航调参,经常要改算法参数甚至源码,所以必须从源码编译。

2.3.1 创建工作空间

我个人习惯把工作空间放在~/ros2_ws下。名字无所谓,但路径里别有中文和空格。

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

2.3.2 克隆Nav2源码

Nav2的源码在GitHub上,我们用git clone拉下来。注意要拉humble分支,别拉错了。

cd ~/ros2_ws/src
git clone https://github.com/ros-planning/navigation2.git --branch humble

2.3.3 安装依赖

Nav2依赖很多包,比如tf2、nav_msgs、costmap_2d等等。用rosdep可以一键安装所有依赖。

cd ~/ros2_ws
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro humble
核心知识点:Nav2的架构分为三层:
  • 行为树层:控制导航的整体流程,比如先全局规划,再局部规划
  • 规划器层:包括全局规划器(NavFn、Smac Planner)和局部规划器(DWB、Regulated Pure Pursuit)
  • 控制器层:直接控制机器人运动,比如PID控制器

2.3.4 编译Nav2

编译用colcon build。第一次编译会比较慢,大概10-20分钟。我建议用--symlink-install参数,这样修改Python文件后不用重新编译。

cd ~/ros2_ws
colcon build --symlink-install
加速编译的小技巧:如果你的电脑是多核CPU,可以用--parallel-workers参数加速。
colcon build --symlink-install --parallel-workers 4

2.3.5 验证编译结果

编译完成后,source一下工作空间,然后运行Nav2的测试节点:

source ~/ros2_ws/install/setup.bash
ros2 run nav2_util lifecycle_bringup

如果能看到Nav2的生命周期节点启动成功,说明编译没问题。

2.4 本章知识体系

下面这张图展示了本章搭建的完整环境结构。你想想看,从底层系统到上层应用,每一层都不可或缺。

Nav2导航环境搭建架构 Ubuntu 22.04 LTS ROS2 Humble Gazebo Fortress TurtleBot3 Waffle Pi Nav2 (源码编译) 行为树层 规划器层 控制器层

2.5 常见问题与避坑指南

环境搭建过程中,我遇到过不少问题。这里列几个最常见的,你遇到了可以直接翻回来查。

问题 原因 解决方法
colcon build报错找不到包 依赖没装全 重新运行rosdep install
Gazebo启动后黑屏 显卡驱动问题 安装NVIDIA驱动或使用软渲染
Nav2启动后机器人不动 TF树没配置好 检查robot_state_publisher是否运行
我曾经踩过的坑:有一次编译Nav2时,报了一个关于"Eigen3"的错误。查了半天才发现是Eigen版本太新,Nav2不兼容。解决办法是降级Eigen到3.3.7版本。
sudo apt install libeigen3-dev=3.3.7-2

嗯,环境搭建就到这里。记住,这一步虽然繁琐,但值得花时间做好。后面所有的导航调参、避障实战,都建立在这个基础上。你想想看,如果环境没配好,后面出了问题你都不知道是代码的问题还是环境的问题。