1. 仿真环境搭建:Ubuntu与ROS2的安装、Gazebo与MoveIt2的安装、仿真环境验证

各位同学,咱们正式开始。做机械臂仿真,第一步就是把“地基”打牢。说白了,就是装系统、装ROS2、装Gazebo和MoveIt2。这一步要是出问题,后面所有联调都白搭。我见过太多人卡在环境上,一卡就是两三天,心态直接崩了。

所以这一章,我会把每一步拆开揉碎了讲。你跟着我的节奏走,基本不会踩坑。

1.1 为什么选Ubuntu + ROS2?

你可能要问:为什么非得用Ubuntu?Windows不行吗?

嗯,理论上可以,但实操起来你会想砸电脑。ROS2对Linux的支持最原生,社区里99%的包都是为Ubuntu写的。我个人习惯用Ubuntu 22.04 LTS,搭配ROS2 Humble,这是目前最稳的组合。

组件 推荐版本 说明
操作系统 Ubuntu 22.04 LTS 长期支持,兼容性好
ROS2 Humble Hawksbill 2022年LTS版本,稳定
Gazebo Gazebo Classic 11 与ROS2 Humble官方适配
MoveIt2 Humble分支 直接从源码或二进制安装
我的建议:别用Ubuntu 20.04 + ROS2 Foxy了,Foxy在2023年就EOL了。Humble至少能撑到2027年,省心。

1.2 Ubuntu 22.04 安装要点

装系统这事,我默认你已经有基础了。但有几个坑我得提前说:

  • 磁盘分区:至少给Ubuntu留80GB。别问我为什么,ROS2 + Gazebo + 各种依赖装完,30GB就没了。我刚开始做项目时只分了40GB,结果装到一半磁盘满了,那叫一个尴尬。
  • 网络配置:安装时连上网络,让系统自动更新。不然后面装ROS2时缺依赖,你会疯的。
  • 显卡驱动:如果你用NVIDIA显卡,装完系统后先装驱动。Gazebo的渲染需要GPU加速,没驱动的话画面卡成PPT。
注意:千万别用虚拟机装Gazebo!除非你只想看代码。Gazebo的3D渲染在虚拟机里基本跑不动。双系统或直接物理机安装才是正道。

1.3 ROS2 Humble 安装

ROS2的安装其实很套路化。官方文档写得很清楚,但我还是把核心步骤列出来,方便你对照。

# 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

# 5. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

装完之后,验证一下:

ros2 run demo_nodes_cpp talker
# 再开一个终端
ros2 run demo_nodes_py listener

如果能看到talker和listener在通信,恭喜你,ROS2装好了。

避坑指南:我曾经在装ROS2时忘了加ros-dev-tools,结果后面编译功能包时缺colcon,折腾了半天。所以这步别跳。

1.4 Gazebo与MoveIt2安装

Gazebo和MoveIt2是仿真的两大核心。Gazebo负责物理环境,MoveIt2负责运动规划。两者配合,才能让机械臂在虚拟世界里动起来。

1.4.1 安装Gazebo Classic 11

# 安装Gazebo
sudo apt install gazebo11
sudo apt install libgazebo11-dev

# 安装ROS2与Gazebo的桥梁
sudo apt install ros-humble-gazebo-ros2-control
sudo apt install ros-humble-gazebo-ros2-pkgs

装完后,终端输入 gazebo,如果能弹出窗口,就算成功。

小技巧:第一次启动Gazebo会比较慢,因为它要下载一些模型文件。耐心等一会儿,别急着关。

1.4.2 安装MoveIt2

MoveIt2的安装有两种方式:二进制安装和源码编译。我建议新手用二进制安装,省时间。

# 二进制安装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-simple-controller-manager

验证MoveIt2是否装好:

ros2 launch moveit2_tutorials demo.launch.py

如果能看到Rviz2界面里出现一个机械臂模型,说明MoveIt2可以正常工作了。

注意:MoveIt2的Humble版本对Python3.10有依赖。如果你用的是Ubuntu 22.04,Python版本默认就是3.10,没问题。但如果你自己改了Python版本,可能会出兼容性问题。

1.5 仿真环境验证

所有东西都装完了,怎么知道它们能不能协同工作?我准备了一个简单的验证流程。

1.5.1 启动Gazebo并加载一个空世界

gazebo --verbose

在Gazebo里,你应该能看到一个空荡荡的仿真世界。如果画面卡顿,检查一下显卡驱动。

1.5.2 启动MoveIt2并连接Gazebo

这里我们用一个简单的示例包来测试:

# 创建一个测试工作区
mkdir -p ~/test_ws/src
cd ~/test_ws/src
git clone https://github.com/ros-planning/moveit2_tutorials.git
cd ..
colcon build --symlink-install
source install/setup.bash

# 启动MoveIt2 + Gazebo联合仿真
ros2 launch moveit2_tutorials gazebo_demo.launch.py

如果一切顺利,你会看到:

  • Gazebo里出现一个机械臂模型
  • Rviz2里出现同样的机械臂,并且可以拖动规划
  • 在Rviz2里规划一个运动,Gazebo里的机械臂会跟着动
验证成功标志:Rviz2里规划的轨迹,能真实驱动Gazebo里的机械臂运动。这说明ROS2、Gazebo、MoveIt2三者之间的通信链路是通的。

1.6 整体架构图

下面这张图展示了我们搭建的仿真环境各组件之间的关系。你看一眼,心里就有数了。

仿真环境整体架构 用户/开发者 MoveIt2 运动规划 · 碰撞检测 · 逆解 ROS2 通信层 Topic · Service · Action ROS2 Control 关节状态 · 指令下发 Gazebo 物理仿真引擎 物理碰撞 · 传感器仿真 · 可视化 用户通过MoveIt2规划轨迹 → ROS2将指令转发给Gazebo → Gazebo执行物理仿真并反馈状态 整个闭环通过ROS2的Topic/Action机制完成,延迟通常在10ms以内

1.7 常见问题与解决

装环境的过程中,你大概率会遇到一些问题。我把最常见的几个列出来:

问题 原因 解决方法
Gazebo启动后黑屏 显卡驱动未安装或OpenGL版本过低 安装NVIDIA驱动,或更新Mesa库
colcon build报错 缺少依赖包 运行 rosdep install --from-paths src --ignore-src -r -y
MoveIt2无法加载机器人模型 URDF/SRDF路径配置错误 检查 robot_description 参数是否指向正确的URDF文件
Gazebo与MoveIt2通信失败 ROS2命名空间不匹配 确保Gazebo中的机器人命名空间与MoveIt2配置一致
我的经验:遇到问题先看终端输出。ROS2的错误信息其实很详细,只是很多人一看到红字就慌了。静下心读一读,80%的问题都能自己解决。