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
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*
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
- 行为树层:控制导航的整体流程,比如先全局规划,再局部规划
- 规划器层:包括全局规划器(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
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 本章知识体系
下面这张图展示了本章搭建的完整环境结构。你想想看,从底层系统到上层应用,每一层都不可或缺。
2.5 常见问题与避坑指南
环境搭建过程中,我遇到过不少问题。这里列几个最常见的,你遇到了可以直接翻回来查。
| 问题 | 原因 | 解决方法 |
|---|---|---|
| colcon build报错找不到包 | 依赖没装全 | 重新运行rosdep install |
| Gazebo启动后黑屏 | 显卡驱动问题 | 安装NVIDIA驱动或使用软渲染 |
| Nav2启动后机器人不动 | TF树没配置好 | 检查robot_state_publisher是否运行 |
sudo apt install libeigen3-dev=3.3.7-2
嗯,环境搭建就到这里。记住,这一步虽然繁琐,但值得花时间做好。后面所有的导航调参、避障实战,都建立在这个基础上。你想想看,如果环境没配好,后面出了问题你都不知道是代码的问题还是环境的问题。