2. Gazebo环境搭建:Ubuntu下的安装与版本匹配

Gazebo的安装,说白了就是给机器人搭个「虚拟试验场」。我刚开始接触时也踩过不少坑,尤其是版本匹配问题,搞不好就是几个小时白费。今天咱们一步步来,把这事捋清楚。

核心原则:ROS版本和Gazebo版本必须严格对应。别想着「我装个最新版Gazebo总没错」——在ROS生态里,版本错配是最大的坑。

2.1 版本匹配:ROS与Gazebo的「联姻」关系

先看这张图,你就明白为什么版本匹配这么重要了。

ROS 版本 版本匹配 检查 Gazebo 版本 常见对应关系: ROS Noetic → Gazebo 9.x (Ubuntu 20.04) ROS Melodic → Gazebo 9.x (Ubuntu 18.04) ROS Kinetic → Gazebo 7.x (Ubuntu 16.04) ROS2 Foxy → Gazebo 9.x (Ubuntu 20.04) ROS2 Humble → Gazebo 11.x (Ubuntu 22.04)

我个人习惯是:先确定ROS版本,再装对应的Gazebo。别反过来,否则你会发现自己装了个「孤岛」——ROS和Gazebo互相不认识。

小技巧:如果你不确定当前Ubuntu该装哪个ROS版本,直接运行 lsb_release -a 查看系统版本。Ubuntu 20.04就用Noetic,18.04就用Melodic,简单粗暴。

2.2 安装步骤:两种方式,我推荐第二种

安装Gazebo有两种主流方式。我两种都试过,给你说说区别。

方式一:单独安装Gazebo

# 添加源
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

# 添加密钥
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

# 更新并安装
sudo apt update
sudo apt install gazebo11

这种方式装完,Gazebo能跑,但和ROS是「两张皮」。你得手动装 gazebo_ros_pkgs 才能通信。我在项目里遇到过这种情况,调试时发现话题接不上,查了半天才发现是ros包没装全。

方式二:通过ROS安装(我推荐)

# 先装ROS(假设你已有ROS环境)
sudo apt install ros-noetic-gazebo-ros-pkgs
sudo apt install ros-noetic-gazebo-ros-control

看到没?一条命令搞定。ROS会自动帮你拉取匹配的Gazebo版本。说白了,ROS的包管理器已经帮你做好了版本校验,省心很多。

注意:千万别同时用apt装Gazebo又用pip装pygazebo。我见过有人混着装,结果Gazebo启动时加载了不同版本的库,直接崩溃。保持单一来源。

2.3 启动测试:验证你的环境

装完别急着写代码,先跑个测试。嗯,这里有个小仪式感——我每次搭好环境都会先启动一个空世界看看。

# 启动Gazebo(空世界)
gazebo --verbose

# 或者通过ROS启动
roslaunch gazebo_ros empty_world.launch

如果看到Gazebo窗口弹出来,并且没有报错,恭喜你,环境搭好了。你想想看,一个3D仿真环境就这么跑起来了,是不是挺有成就感的?

接下来可以加载一个简单模型测试:

# 在Gazebo中插入一个盒子
# 菜单栏:Insert → 选择 "box" 拖到场景中

# 或者用命令行
rosrun gazebo_ros spawn_model -file /usr/share/gazebo-11/models/box/model.sdf -sdf -model my_box -x 0 -y 0 -z 1

个人经验:启动时如果卡在「Loading world」界面超过30秒,八成是显卡驱动问题。我遇到过好几次,最后发现是NVIDIA驱动没装好。运行 glxinfo | grep "OpenGL renderer" 检查一下。

2.4 常见安装问题排查

这部分我花了不少时间总结,你直接收藏就行。

问题现象 可能原因 解决方案
Gazebo启动后黑屏 显卡驱动问题或OpenGL版本过低 安装显卡驱动:sudo apt install nvidia-driver-470
roslaunch找不到gazebo_ros gazebo_ros_pkgs未安装 运行 sudo apt install ros-noetic-gazebo-ros-pkgs
Gazebo启动报错「VMware」 虚拟机3D加速未开启 虚拟机设置中启用3D加速,或换用双系统
模型加载缓慢 网络问题导致模型下载超时 设置代理或离线下载模型到 ~/.gazebo/models/
「libignition」相关错误 版本冲突,多个Gazebo版本共存 彻底卸载旧版:sudo apt purge gazebo* 后重装

避坑指南:我曾经在Ubuntu 20.04上装了Gazebo 11,然后又手贱装了Gazebo 9,结果两个版本互相打架。启动时一会报libignition-math4的错,一会报libignition-math6的错。最后只能全部卸载,用 sudo apt autoremove 清理干净,重新只装一个版本。

2.5 验证安装:写个简单测试

最后,咱们写个简单的Python脚本,验证ROS和Gazebo的通信是否正常。

#!/usr/bin/env python3
import rospy
from gazebo_msgs.srv import SpawnModel
from geometry_msgs.msg import Pose

rospy.init_node('test_gazebo_connection')

# 等待服务启动
rospy.wait_for_service('/gazebo/spawn_sdf_model')
print("✅ Gazebo服务连接成功!")

# 创建一个简单的球体
sphere_sdf = '''<?xml version="1.0"?>
<sdf version="1.6">
  <model name="test_sphere">
    <link name="link">
      <collision name="collision">
        <geometry><sphere><radius>0.5</radius></sphere></geometry>
      </collision>
      <visual name="visual">
        <geometry><sphere><radius>0.5</radius></sphere></geometry>
      </visual>
    </link>
  </model>
</sdf>'''

try:
    spawn_model = rospy.ServiceProxy('/gazebo/spawn_sdf_model', SpawnModel)
    pose = Pose()
    pose.position.x = 1.0
    pose.position.y = 1.0
    pose.position.z = 0.5
    
    spawn_model('test_sphere', sphere_sdf, '', pose, 'world')
    print("✅ 球体模型成功加载到Gazebo中!")
except Exception as e:
    print(f"❌ 加载失败:{e}")

运行这个脚本,如果看到两个✅,说明你的Gazebo环境已经完全就绪了。你想想看,从安装到验证,整个过程其实也就十几分钟。但要是版本没对上,可能折腾一整天。

最后说一句:Gazebo的日志文件在 ~/.gazebo/log/ 下。如果遇到奇怪的问题,先去看日志。我80%的问题都是靠看日志解决的,比在网上瞎搜有效率得多。

可可精品资料库