1. Gazebo与ROS2环境搭建
做机器人仿真,第一步就是把环境搭好。我见过太多人卡在这一步,折腾几天连个仿真窗口都打不开。说实话,环境搭建本身不难,但版本匹配和依赖关系确实容易让人头疼。今天咱们就把这事彻底搞定。
1.1 Gazebo简介
Gazebo是什么?说白了,它是一个3D机器人仿真器。你可以在里面建机器人模型、搭传感器、写控制逻辑,然后看它在虚拟世界里跑起来。
我个人习惯把Gazebo理解成「机器人界的游戏引擎」。它内置了物理引擎(ODE、Bullet等)、传感器模拟(激光雷达、摄像头、IMU)、以及丰富的机器人模型库。你想想看,在真实机器人上调试避障算法,撞一次墙可能就得修半天。但在Gazebo里,随便撞,重启一下就行。
Gazebo有几个核心特点:
- 高保真物理仿真:支持刚体动力学、碰撞检测、摩擦力模拟
- 传感器仿真:激光雷达、深度相机、GPS、IMU等都能模拟
- 插件机制:可以自定义控制器、传感器模型
- 与ROS深度集成:通过话题和服务与ROS节点通信
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窗口能正常打开,并且终端没有报错,那就说明接口配置成功了。
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提供仿真环境,ROS2负责控制逻辑,接口包让它们协同工作。三者缺一不可。
好了,环境搭建就到这里。你跟着步骤走一遍,应该能顺利跑起来。如果遇到问题,别急,大概率是版本匹配或者依赖没装全。检查一下Ubuntu版本(必须是22.04)、ROS2版本(Humble)、Gazebo版本(Fortress或更高),这三个对上了,基本就没问题。
export LIBGL_ALWAYS_SOFTWARE=1。这是显卡驱动兼容性问题,我遇到过好几次。
可可精品资料库