1. Gazebo与ROS2生态概览
各位同学好,我是你们的仿真工程师讲师。今天咱们来聊聊Gazebo和ROS2这对黄金搭档。说实话,我刚开始接触机器人仿真时,也被各种版本号搞得晕头转向。但别担心,跟着我走一遍,你就能理清头绪。
1.1 Gazebo的前世今生
Gazebo最早是2002年由南加州大学的一个研究项目起步的。那时候它还叫「Gazebo 0.x」,功能简单得可怜。后来到了2011年,Open Source Robotics Foundation(OSRF)接手了开发,这才真正走上了正轨。
Gazebo版本演进:
| 版本 | 发布时间 | 主要特点 |
|---|---|---|
| Gazebo 1.x | 2011 | 基础物理引擎,简单传感器 |
| Gazebo 7.x | 2016 | 支持ROS Kinetic,稳定版 |
| Gazebo 9.x | 2018 | 改进渲染,支持更多传感器 |
| Gazebo 11.x | 2020 | ROS2支持,性能优化 |
| Gazebo Fortress | 2022 | 全新架构,Ignition改名 |
我个人印象最深的是从Gazebo 11到Fortress的过渡。那时候很多老项目突然不兼容了,社区里一片哀嚎。但说实话,Fortress的架构确实更干净,性能也提升了不少。
1.2 ROS2与Gazebo的桥梁:ros_gz
ROS2和Gazebo怎么通信?靠的就是ros_gz这个桥梁包。它本质上是一个中间件,负责把Gazebo里的传感器数据、关节状态、控制指令等,翻译成ROS2能理解的topic和service。
ros_gz的核心组件:
- ros_gz_bridge:消息转换的核心,把Gazebo的protobuf消息转成ROS2消息
- ros_gz_sim:启动、控制Gazebo仿真
- ros_gz_interfaces:定义了一些自定义消息类型
嗯,这里要注意一点:ros_gz的版本必须和ROS2以及Gazebo严格对应。比如我们用的ROS2 Humble,就必须搭配Gazebo Fortress和ros_gz 0.3.x。我曾经见过有人把Humble和Gazebo Garden混着用,结果折腾了两天都没跑起来。
版本对应关系:
- ROS2 Humble + Gazebo Fortress + ros_gz 0.3.x
- ROS2 Iron + Gazebo Garden + ros_gz 0.4.x
- ROS2 Rolling + Gazebo Harmonic + ros_gz 0.5.x
1.3 搭建仿真环境
好,咱们开始动手。我建议你用一个干净的Ubuntu 22.04系统,或者虚拟机也行。下面是我验证过无数次的安装步骤:
第一步:安装ROS2 Humble
# 设置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
# 添加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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
第二步:安装Gazebo Fortress
# 添加Gazebo源
sudo apt update
sudo apt install wget
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list
# 安装Fortress
sudo apt update
sudo apt install ignition-fortress
第三步:安装ros_gz桥梁
# 安装ros_gz
sudo apt install ros-humble-ros-gz
小技巧:安装完成后,记得把ROS2的环境变量加到.bashrc里:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
1.4 验证通信是否正常
环境装好了,怎么知道它们能不能正常通信?我一般用三步验证法:
第一步:启动Gazebo
ign gazebo -v 4
如果看到Gazebo的GUI界面弹出来,说明Fortress安装成功。
第二步:启动ros_gz桥梁
# 新开一个终端
source /opt/ros/humble/setup.bash
ros2 run ros_gz_bridge parameter_bridge /clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock
这个命令会把Gazebo的/clock话题桥接到ROS2。如果终端没有报错,说明桥梁建立成功。
第三步:验证数据流
# 再开一个终端
source /opt/ros/humble/setup.bash
ros2 topic echo /clock
你应该能看到类似这样的输出:
---
clock:
sec: 1234
nanosec: 567890000
---
看到这个,就说明ROS2成功接收到了Gazebo的仿真时间。通信验证通过!
避坑指南:我曾经遇到过一个问题——ros2 topic echo /clock没有任何输出。排查了半天,发现是Gazebo的仿真没有运行(界面虽然打开了,但没点播放按钮)。记住,Gazebo默认是暂停状态,必须点击左下角的播放按钮才能开始仿真。
1.5 本章知识体系
为了让你更直观地理解整个生态,我画了一张结构图:
这张图很清楚地展示了三个模块的关系:ROS2通过ros_gz桥梁与Gazebo通信,而验证通信是否正常的关键就是看/clock话题能不能收到数据。
1.6 小结
这一章我们走完了整个Gazebo + ROS2的生态概览。从Gazebo的历史版本,到ros_gz桥梁的作用,再到实际的环境搭建和通信验证。说白了,就是让你明白这三样东西怎么配合工作。
我个人觉得,最关键的还是版本对应关系。只要这个搞对了,后面的事情就顺了。如果安装过程中遇到问题,别慌,多半是版本没对上,或者环境变量没设好。
好,这一章就到这儿。下一章我们会开始搭建第一个仿真世界,到时候见。
本章要点回顾:
- Gazebo从1.x发展到Fortress,架构越来越清晰
- ros_gz是ROS2和Gazebo通信的桥梁,版本必须严格对应
- 安装顺序:ROS2 Humble → Gazebo Fortress → ros_gz
- 验证通信:启动Gazebo → 启动桥梁 → 查看/clock话题