2. 环境搭建:ROS2 Humble安装、Nav2源码编译、机械臂仿真环境搭建

说实话,做机器人开发最怕什么?不是算法调不通,而是环境搭到一半崩了,然后重装系统。我这些年至少重装了七八次Ubuntu,踩过的坑比写过的代码还多。

这一章,咱们就把环境一次搞定。我会把每一步的关键点都讲清楚,尤其是那些容易翻车的地方。

2.1 ROS2 Humble 安装

ROS2的版本很多,为什么选Humble?因为它是个长期支持版,到2027年才结束维护。做项目最怕版本过期,你想想看,辛辛苦苦搭的环境,两年后不支持了,多闹心。

安装步骤其实不复杂,但我建议你按这个顺序来:

  1. 设置编码:确保系统支持UTF-8
  2. 添加源:把ROS2的软件源加到系统里
  3. 安装核心包:我一般装desktop版本,工具链全
  4. 配置环境变量:每次开终端都要source一下

我的安装命令(亲测可用)

# 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 Desktop
sudo apt update
sudo apt install ros-humble-desktop

# 4. 配置环境
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意:如果你用的是Ubuntu 22.04以外的版本,Humble可能装不上。我有个同事用20.04硬装,折腾了两天最后还是换了系统。

2.2 Nav2 源码编译

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

嗯,这里有个实际原因。我在做机械臂导航项目时,需要修改Nav2的局部规划器参数。如果用二进制包,改起来很麻烦。源码编译的话,想改哪里改哪里。

编译Nav2之前,先把依赖装好:

sudo apt install ros-humble-nav2-* ros-humble-slam-toolbox
sudo apt install ros-humble-turtlebot3-*

然后拉源码编译:

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
git clone https://github.com/ros-planning/navigation2.git --branch humble
cd ~/nav2_ws
colcon build --symlink-install

小技巧:第一次编译时加个 --symlink-install,后面改Python文件就不用重新编译了。这个我吃了不少亏才发现的。

编译时间取决于你的电脑配置。我用的i7-12700,大概15分钟。如果你用笔记本,建议插上电源,别编译到一半没电了——别问我怎么知道的。

2.3 机械臂仿真环境搭建

机械臂导航和轮式机器人最大的区别是什么?轮式机器人只需要考虑平面移动,机械臂要考虑的是——整个工作空间。

所以我们需要两个核心工具:

  • MoveIt2:负责运动规划和碰撞检测
  • Gazebo:提供物理仿真环境

2.3.1 安装MoveIt2

MoveIt2是ROS2版本的MoveIt。安装方式有两种:

方式 命令 适用场景
二进制安装 sudo apt install ros-humble-moveit 快速验证,不修改源码
源码编译 colcon build --packages-select moveit2 需要定制规划器或算法

我个人建议先用二进制装,跑通流程再说。等后面需要调参数了,再切源码。

2.3.2 安装Gazebo

Gazebo现在和ROS2的集成做得不错。安装命令很简单:

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

曾经踩过的坑:Gazebo版本和ROS2版本必须匹配。Humble对应的是Gazebo Fortress(即Gazebo 11的后续版本)。如果你装了Ignition Gazebo,会发现很多接口对不上。

2.3.3 搭建完整的仿真工作空间

好了,现在我们把所有东西整合到一起。我习惯建一个独立的工作空间:

mkdir -p ~/arm_nav_ws/src
cd ~/arm_nav_ws/src

# 克隆机械臂描述文件(以UR5e为例)
git clone https://github.com/UniversalRobots/Universal_Robots_ROS2_Description.git

# 克隆MoveIt2配置
git clone https://github.com/ros-planning/moveit2_tutorials.git

# 克隆Gazebo仿真配置
git clone https://github.com/ros-simulation/gazebo_ros2_control.git

cd ~/arm_nav_ws
colcon build

编译完成后,启动仿真环境:

source install/setup.bash
ros2 launch ur5e_moveit_config ur5e_gazebo.launch.py

如果一切顺利,你会看到Gazebo里出现一个UR5e机械臂,MoveIt2的RViz界面也同时打开。

2.4 本章知识体系

下面这张图,是我做这个课程时画的。它把整个环境搭建的脉络理清楚了:

环境搭建知识体系 机械臂导航仿真环境 ROS2 Humble Nav2 导航栈 机械臂仿真 核心组件 • ROS2核心库 • 通信中间件(DDS) 导航模块 • 全局/局部规划器 • 代价地图、BT 仿真工具 • MoveIt2运动规划 • Gazebo物理仿真 安装验证 ros2 run demo_nodes_cpp talker 编译验证 colcon build → nav2 bringup 仿真验证 Gazebo + MoveIt2 联调 ✅ 环境就绪,可以开始开发

2.5 环境验证清单

装完别急着往下走。我建议你按这个清单检查一遍:

  1. ROS2通信测试:开两个终端,一个跑ros2 run demo_nodes_cpp talker,另一个跑ros2 run demo_nodes_cpp listener,能看到数据收发就算通
  2. Nav2编译测试:运行ros2 launch nav2_bringup tb3_simulation_launch.py,能看到TurtleBot3在Gazebo里跑起来
  3. MoveIt2测试:运行ros2 launch moveit2_tutorials demo.launch.py,RViz里能拖拽机械臂

我的习惯:每次装完环境,我都会写一个简单的测试脚本,把上面三个测试串起来跑一遍。这样下次换电脑或者重装系统时,直接跑脚本就知道环境有没有问题。