2、仿真环境搭建:ROS2 + Gazebo + MoveIt2 安装与配置

说实话,搭建仿真环境这件事,看着简单,但坑是真不少。

我记得刚入行那会儿,光装一个 ROS 就折腾了两天,最后发现是源没换对。后来带团队做项目,新人来了第一周基本都在跟环境搏斗。所以这一章,我尽量把那些容易踩的坑提前告诉你。

2.1 为什么非要用仿真?

你想想看,真机调试机械臂,一次误操作可能就是几千块的损失。我见过有人把末端执行器直接怼到桌面上,齿轮都打坏了。

仿真环境的好处很明显:

  • 零成本试错——随便撞,撞坏了重启就行
  • 加速迭代——改完代码立刻跑,不用等硬件就绪
  • 并行开发——算法组和硬件组可以同时干活

说白了,仿真就是你的安。没有它,你根本不敢在真机上跑新算法。

2.2 整体架构:这三兄弟怎么配合?

ROS2、Gazebo、MoveIt2,各司其职。我习惯把它们的关系画成一张图:

ROS2 + Gazebo + MoveIt2 架构关系 ROS2 通信层 Gazebo 物理仿真 MoveIt2 运动规划 用户控制节点 ROS2 负责通信,Gazebo 负责物理,MoveIt2 负责规划——三者通过话题和服务联动

简单来说:ROS2 是血管,负责传递消息;Gazebo 是身体,模拟真实的物理世界;MoveIt2 是大脑,算轨迹、做规划。缺一个都不行。

2.3 安装前的准备:别急着敲命令

我见过太多人上来就 sudo apt install,结果装到一半发现系统版本不对。先确认三件事:

项目 推荐配置 踩坑提醒
操作系统 Ubuntu 22.04 LTS 别用 20.04,ROS2 Humble 对 22.04 支持最好
ROS2 版本 Humble Hawksbill Galactic 已 EOL,别用了
Gazebo 版本 Gazebo Fortress (v11) 旧版 Gazebo 9/11 与 ROS2 集成有坑
MoveIt2 版本 Humble 对应版本 直接从 apt 装,别自己编译
⚠️ 我曾经在 Ubuntu 20.04 上硬装 ROS2 Humble,结果依赖冲突到怀疑人生。最后老老实实重装了 22.04。所以——系统版本别凑合。

2.4 安装 ROS2 Humble

这一步其实很标准,但有几个细节容易漏。我按步骤来:

  1. 设置 locale——确保 UTF-8 支持,不然后面编译会报奇奇怪怪的错
  2. 添加 ROS2 源——用官方源,别用镜像源,我踩过镜像源更新不及时的坑
  3. 安装基础包——ros-humble-desktop 就够了,别装 full,太多用不到的包
  4. 安装开发工具——colcon、rosdep 这些必须装
# 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
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

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

# 4. 安装开发工具
sudo apt install ros-humble-ros-base python3-colcon-common-extensions python3-rosdep
💡 小技巧:装完后记得把 source /opt/ros/humble/setup.bash 加到 ~/.bashrc 里。不然每次开终端都要手动 source,很烦。

2.5 安装 Gazebo Fortress

Gazebo 的安装其实比 ROS2 还简单。但要注意——别装错了版本。

# 安装 Gazebo Fortress
sudo apt install ros-humble-ros-gz

# 验证安装
gz sim --version

为什么用 ros-humble-ros-gz 而不是直接装 Gazebo?因为这个包把 ROS2 和 Gazebo 的桥接层一起装了。我自己第一次装的时候没注意,结果 ROS2 和 Gazebo 之间通信不了,折腾了半天才发现少了桥接。

2.6 安装 MoveIt2

MoveIt2 的安装,我建议直接用 apt 装二进制包。别自己从源码编译,除非你想体验一下「编译两小时,报错三分钟」的快感。

# 安装 MoveIt2
sudo apt install ros-humble-moveit

# 安装 MoveIt2 的 Gazebo 集成
sudo apt install ros-humble-moveit-ros-planning-interface
sudo apt install ros-humble-moveit-planners-ompl
sudo apt install ros-humble-moveit-kinematics
⚠️ 注意:MoveIt2 依赖很多规划库,比如 OMPL、CHOMP。如果你只装了 ros-humble-moveit,可能有些规划器用不了。我建议把 ros-humble-moveit-* 相关的包都装上,省得后面缺依赖。

2.7 验证安装:跑一个简单的测试

装完了别急着高兴,先跑个测试看看能不能打通。我一般用 Panda 机械臂的仿真来验证:

# 启动 Gazebo 并加载 Panda 机械臂
ros2 launch franka_gazebo franka_gazebo.launch.py

# 新开终端,启动 MoveIt2
ros2 launch franka_moveit_config moveit.launch.py

# 再开一个终端,发送一个简单的目标位置
ros2 run moveit2_tutorials move_group_interface_tutorial

如果一切顺利,你应该能看到 Gazebo 里的机械臂动起来。如果没动——别慌,大概率是话题没对上。检查一下 ros2 topic list,看看 /joint_states 和 /arm_controller/joint_trajectory 有没有在发布。

2.8 常见问题与避坑指南

这些年我帮不少人排查过环境问题,总结下来就这几类:

问题现象 可能原因 解决办法
Gazebo 启动后黑屏 显卡驱动问题或模型路径不对 检查 GAZEBO_MODEL_PATH 环境变量
MoveIt2 连不上 Gazebo 桥接节点没启动 运行 ros2 run ros_gz_bridge parameter_bridge
机械臂不动 控制器配置不对 检查 ros2_controllers.yaml 里的 joint 名称
编译报错找不到包 依赖没装全 运行 rosdep install --from-paths src --ignore-src -r -y

🔧 我的经验:遇到问题先看日志。ROS2 的日志比 ROS1 清晰多了,ros2 run --help 也能给你不少提示。别一上来就重装,先查日志,90% 的问题都能找到线索。

2.9 环境配置检查清单

最后,我习惯在开始项目前跑一遍这个检查清单。你可以把它当成一个「健康检查」:

  • ✅ ros2 --version 输出正常
  • ✅ gz sim --version 输出正常
  • ✅ ros2 pkg list | grep moveit 能看到 moveit 相关包
  • ✅ ros2 topic list 能列出话题
  • ✅ Gazebo 能加载模型并显示
  • ✅ MoveIt2 的 RViz 界面能正常打开

嗯,到这步,你的仿真环境就算搭好了。接下来就可以开始真正的联调了。