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 本章知识体系总览
下面这张图帮你理清整个搭建流程和组件关系:
1.7 常见问题与避坑指南
做这行十年了,有些坑我替你们先踩了:
- 装完Gazebo打不开? 多半是显卡驱动问题。试试
export LIBGL_ALWAYS_SOFTWARE=1强制软渲染。 - 桥接后看不到话题? 检查一下
ros2 topic echo /clock有没有数据。没数据就是桥接方向配反了。 - 启动turtlebot3报错找不到模型? 别忘了设置
export TURTLEBOT3_MODEL=waffle。我刚开始老忘这步,后来直接写进.bashrc了。
我的习惯:每次搭建新环境,我都会写一个 check_env.sh 脚本,一键验证所有组件。比如检查ROS2版本、Gazebo版本、桥接是否运行。这样换电脑时省大事了。
好了,环境搭好了,后面咱们就能专心调避障参数了。记住:工欲善其事,必先利其器。这一步走稳了,后面事半功倍。