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 本章知识体系

为了让你更直观地理解整个生态,我画了一张结构图:

Gazebo + ROS2 生态结构图 ROS2 Humble 机器人操作系统 话题/服务/动作 节点/参数/生命周期 ros_gz 桥梁 ros_gz_bridge ros_gz_sim ros_gz_interfaces Gazebo Fortress 物理引擎 传感器仿真 3D渲染 发布/订阅 protobuf 三步验证法 ① 启动Gazebo ② 启动ros_gz桥梁 ③ 验证/clock话题 ign gazebo -v 4 ros2 run ros_gz_bridge parameter_bridge ... ros2 topic echo /clock

这张图很清楚地展示了三个模块的关系: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话题

可可精品资料库