1、Gazebo与ROS2环境搭建:安装Gazebo与ROS2 Humble,配置通信接口,验证仿真环境连通性

大家好,我是你们的仿真工程师老张。今天咱们开始第一课——把吃饭的家伙先支棱起来。

做机器人仿真这么多年,我见过太多人卡在环境搭建这一步。说白了,工具链没配好,后面全是坑。所以这一章,咱们稳扎稳打,把Gazebo和ROS2 Humble这对黄金搭档装好、调通。

1.1 为什么选ROS2 Humble + Gazebo Fortress?

你可能要问:ROS版本那么多,为什么偏偏选Humble?

我个人习惯是看长期支持(LTS)。ROS2 Humble是2022年的LTS版本,支持到2027年。Gazebo Fortress(即Gazebo Ignition)是它的官方搭档。我在项目中遇到过用老版本Gazebo Classic的,后来迁移时接口全变了,那叫一个痛苦。所以这次咱们一步到位,用新架构。

核心组合:

  • 操作系统:Ubuntu 22.04 LTS
  • ROS2发行版:Humble Hawksbill
  • Gazebo版本:Ignition Fortress(即Gazebo Fortress)

1.2 安装ROS2 Humble

嗯,这里要注意:别用apt直接装,容易装成旧版。我建议走官方源。

打开终端,一行一行来:

# 设置编码
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
export 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桌面版(包含RViz、demo等)
sudo apt update
sudo apt install ros-humble-desktop

装完后,记得配置环境变量。我习惯把它写到.bashrc里:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

小技巧:如果你同时用ROS1和ROS2,建议分别写两个别名,避免冲突。比如:

alias ros1='source /opt/ros/noetic/setup.bash'
alias ros2='source /opt/ros/humble/setup.bash'

1.3 安装Gazebo Fortress

Gazebo Fortress的安装相对简单。但注意:不要和Gazebo Classic混装,容易出问题。我曾经踩过这个坑,两个版本抢端口,仿真器直接崩了。

# 安装Gazebo Fortress
sudo apt update
sudo apt install ignition-fortress

# 验证安装
ign gazebo --version

如果看到类似 Ignition Fortress 6.x.x 的输出,说明装好了。

1.4 配置ROS2与Gazebo的通信接口

这是关键一步。ROS2和Gazebo之间靠的是ros_gz_bridge这个桥接包。说白了,它负责把Gazebo里的传感器数据、控制指令翻译成ROS2能懂的Topic。

安装桥接包:

sudo apt install ros-humble-ros-gz-bridge

装完后,我们来测试一下通信是否正常。先启动Gazebo:

ign gazebo empty.sdf

然后新开一个终端,启动桥接:

ros2 run ros_gz_bridge parameter_bridge /clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock

这个命令的意思是:把Gazebo的/clock话题桥接到ROS2。如果看到类似 Creating new bridge 的日志,说明通了。

注意:桥接的话题方向用 @ 和 [ 表示。 @ 表示ROS2到Gazebo, [ 表示Gazebo到ROS2。双向用 ]。这个符号我一开始老搞反,后来干脆写了个小抄贴在显示器上。

1.5 验证仿真环境连通性

光装好不算完,得跑个demo验证一下。我习惯用turtlebot3做测试,因为它轻量、传感器齐全。

安装turtlebot3相关包:

sudo apt install ros-humble-turtlebot3-gazebo

启动仿真世界:

export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

你应该能看到Gazebo窗口里出现了一个带轮子的小车,周围有障碍物。这时候再开一个终端,查看话题:

ros2 topic list

如果看到 /scan、/odom、/cmd_vel 等话题,说明ROS2成功接收到了Gazebo的数据。恭喜,环境通了!

1.6 本章知识体系总览

下面这张图帮你理清整个搭建流程和组件关系:

Gazebo + ROS2 Humble 环境搭建架构图 ROS2 Humble 节点管理 话题/服务通信 TF坐标变换 Gazebo Fortress 物理引擎 传感器仿真 3D渲染 ros_gz_bridge 话题桥接 / 服务桥接 验证:turtlebot3_gazebo demo 检查 /scan /odom /cmd_vel 话题 操作系统:Ubuntu 22.04 LTS 通信协议:DDS(Fast DDS / Cyclone DDS)

1.7 常见问题与避坑指南

做这行十年了,有些坑我替你们先踩了:

  • 装完Gazebo打不开? 多半是显卡驱动问题。试试 export LIBGL_ALWAYS_SOFTWARE=1 强制软渲染。
  • 桥接后看不到话题? 检查一下 ros2 topic echo /clock 有没有数据。没数据就是桥接方向配反了。
  • 启动turtlebot3报错找不到模型? 别忘了设置 export TURTLEBOT3_MODEL=waffle。我刚开始老忘这步,后来直接写进.bashrc了。

我的习惯:每次搭建新环境,我都会写一个 check_env.sh 脚本,一键验证所有组件。比如检查ROS2版本、Gazebo版本、桥接是否运行。这样换电脑时省大事了。

好了,环境搭好了,后面咱们就能专心调避障参数了。记住:工欲善其事,必先利其器。这一步走稳了,后面事半功倍。


可可精品资料库