1. Gazebo与ROS2环境搭建

做机器人仿真,第一步就是把环境搭好。我见过太多人卡在这一步,折腾几天连个仿真窗口都打不开。说实话,环境搭建本身不难,但版本匹配和依赖关系确实容易让人头疼。今天咱们就把这事彻底搞定。

1.1 Gazebo简介

Gazebo是什么?说白了,它是一个3D机器人仿真器。你可以在里面建机器人模型、搭传感器、写控制逻辑,然后看它在虚拟世界里跑起来。

我个人习惯把Gazebo理解成「机器人界的游戏引擎」。它内置了物理引擎(ODE、Bullet等)、传感器模拟(激光雷达、摄像头、IMU)、以及丰富的机器人模型库。你想想看,在真实机器人上调试避障算法,撞一次墙可能就得修半天。但在Gazebo里,随便撞,重启一下就行。

Gazebo有几个核心特点:

  • 高保真物理仿真:支持刚体动力学、碰撞检测、摩擦力模拟
  • 传感器仿真:激光雷达、深度相机、GPS、IMU等都能模拟
  • 插件机制:可以自定义控制器、传感器模型
  • 与ROS深度集成:通过话题和服务与ROS节点通信
小提示:Gazebo和ROS是两个独立项目。Gazebo负责仿真,ROS负责通信和控制。它们通过一个叫「gazebo_ros_pkgs」的桥梁包连接起来。这个后面会细说。

1.2 ROS2 Humble安装

ROS2有很多发行版,我为什么选Humble?因为它是个长期支持版(LTS),到2027年都有人维护。做课程嘛,稳定性第一。

安装步骤其实很固定,我直接给命令:

# 1. 设置编码
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

# 2. 添加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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 4. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

嗯,这里要注意:安装过程大概需要10-20分钟,取决于你的网速。我曾经在客户现场装ROS2,结果他们内网限速,硬是等了快一个小时。所以建议提前准备好网络环境。

装完之后验证一下:

ros2 --version

如果看到类似「ros2 humble」的输出,就说明装好了。

1.3 Gazebo与ROS2接口配置

这一步是很多人翻车的地方。Gazebo和ROS2各自独立,需要装一个桥梁包才能让它们对话。

安装命令:

sudo apt install ros-humble-gazebo-ros-pkgs

这个包提供了几个关键组件:

组件 作用
gazebo_ros_node Gazebo的ROS2节点,负责通信
gazebo_ros_factory 在仿真中生成/删除模型
gazebo_ros_state 发布仿真状态(模型位姿、速度等)
gazebo_ros_control 机器人关节控制接口

装完之后,我建议你跑一个简单的测试:

# 启动Gazebo(带ROS2接口)
gazebo --verbose -s libgazebo_ros_factory.so

如果Gazebo窗口能正常打开,并且终端没有报错,那就说明接口配置成功了。

常见坑:如果你遇到「libgazebo_ros_factory.so找不到」的错误,大概率是gazebo_ros_pkgs没装对。检查一下:dpkg -l | grep gazebo-ros,看看有没有ros-humble-gazebo-ros-pkgs。

1.4 第一个仿真世界

环境搭好了,咱们来跑第一个仿真世界。Gazebo自带了一些示例世界,我挑一个简单的:

# 启动一个带小车的世界
ros2 launch gazebo_ros gazebo.launch.py world:=src/my_robot_world/worlds/empty.world

如果你没有自定义世界,直接用Gazebo自带的也行:

gazebo worlds/empty.world

你会看到一个空荡荡的世界,只有地面和天空。别觉得寒酸,这就是我们所有仿真的起点。

接下来,咱们往世界里放一个机器人。Gazebo里有个「Insert」选项卡,里面有一些预设模型。你点一下「Pioneer 3DX」,它就会出现在世界里。

但更专业的方式是用命令行:

# 通过ROS2话题生成机器人
ros2 service call /spawn_entity gazebo_msgs/srv/SpawnEntity "{name: 'my_robot', xml: '<?xml version=\"1.0\"?><robot name=\"my_robot\"><link name=\"base_link\"><visual><geometry><box size=\"0.5 0.5 0.2\"/></geometry></visual></link></robot>'}"

嗯,这个命令有点长。但它的好处是——你可以完全用代码控制仿真世界,不需要手动操作。

核心思路:Gazebo仿真 = 世界环境 + 机器人模型 + 传感器插件 + 控制器。这四个要素组合起来,就能模拟出各种复杂的机器人场景。

知识体系总览

我把本章的核心逻辑画了张图,方便你理解:

Gazebo与ROS2环境搭建知识体系 Gazebo仿真器 ROS2 Humble gazebo_ros_pkgs 物理引擎 · 传感器 · 模型 话题 · 服务 · 动作 · 参数 spawn_entity · 状态发布 · 控制 第一个仿真世界 三者缺一不可:Gazebo提供仿真环境,ROS2负责控制逻辑,接口包让它们协同工作

这张图把本章的核心逻辑说清楚了。Gazebo提供仿真环境,ROS2负责控制逻辑,接口包让它们协同工作。三者缺一不可。

好了,环境搭建就到这里。你跟着步骤走一遍,应该能顺利跑起来。如果遇到问题,别急,大概率是版本匹配或者依赖没装全。检查一下Ubuntu版本(必须是22.04)、ROS2版本(Humble)、Gazebo版本(Fortress或更高),这三个对上了,基本就没问题。

我的经验:第一次跑Gazebo时,如果窗口卡住或者闪退,试试在终端里先跑 export LIBGL_ALWAYS_SOFTWARE=1。这是显卡驱动兼容性问题,我遇到过好几次。

可可精品资料库