2、仿真环境搭建:ROS2 + Gazebo + MoveIt2 安装与配置
说实话,搭建仿真环境这件事,看着简单,但坑是真不少。
我记得刚入行那会儿,光装一个 ROS 就折腾了两天,最后发现是源没换对。后来带团队做项目,新人来了第一周基本都在跟环境搏斗。所以这一章,我尽量把那些容易踩的坑提前告诉你。
2.1 为什么非要用仿真?
你想想看,真机调试机械臂,一次误操作可能就是几千块的损失。我见过有人把末端执行器直接怼到桌面上,齿轮都打坏了。
仿真环境的好处很明显:
- 零成本试错——随便撞,撞坏了重启就行
- 加速迭代——改完代码立刻跑,不用等硬件就绪
- 并行开发——算法组和硬件组可以同时干活
说白了,仿真就是你的安。没有它,你根本不敢在真机上跑新算法。
2.2 整体架构:这三兄弟怎么配合?
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 装,别自己编译 |
2.4 安装 ROS2 Humble
这一步其实很标准,但有几个细节容易漏。我按步骤来:
- 设置 locale——确保 UTF-8 支持,不然后面编译会报奇奇怪怪的错
- 添加 ROS2 源——用官方源,别用镜像源,我踩过镜像源更新不及时的坑
- 安装基础包——
ros-humble-desktop就够了,别装 full,太多用不到的包 - 安装开发工具——
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
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 界面能正常打开
嗯,到这步,你的仿真环境就算搭好了。接下来就可以开始真正的联调了。