1. Gazebo与ROS2环境搭建:从零开始,跑通第一个仿真世界
大家好,我是你们的老朋友。
做机器人仿真,说白了就是先搭个“虚拟实验室”。你想想看,真机调试一次成本多高?撞坏了还得修。所以,Gazebo + ROS2 这套组合拳,几乎是每个机器人工程师的必修课。
今天咱们就从零开始,把环境搭好,跑通第一个仿真世界。嗯,这一步走稳了,后面30章的路才好走。
1.1 为什么选ROS2 Humble + Gazebo Fortress?
我刚开始做机器人那会儿,用的还是ROS1和Gazebo 9。那时候版本匹配全靠缘分,经常装完发现不兼容,心态直接炸裂。
现在好了,ROS2 Humble 和 Gazebo Fortress 是官方钦定的“黄金搭档”。它们之间的通信接口(ros_gz_bridge)已经非常成熟。我个人习惯用这个组合,稳定,坑少。
| 组件 | 版本 | 说明 |
|---|---|---|
| Ubuntu | 22.04 LTS | 推荐,兼容性最好 |
| ROS2 | Humble Hawksbill | 2022年发布,长期支持 |
| Gazebo | Fortress (Gazebo 11) | 与Humble完美匹配 |
1.2 安装ROS2 Humble
安装过程其实不复杂,但有几个细节容易翻车。我建议你严格按照下面的步骤来。
1.2.1 设置语言环境
先确保你的系统语言是英文。为什么?因为ROS2的某些工具对中文路径支持不好。我在项目里吃过这个亏,编译报错找了半天,最后发现是中文目录名惹的祸。
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
1.2.2 添加ROS2软件源
这一步要加两个东西:一个是ROS2的官方源,一个是GPG密钥。说白了就是让系统知道去哪下载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
1.2.3 安装ROS2 Humble桌面版
桌面版包含了Rviz2、可视化工具等,初学者直接装这个就行。我刚开始学的时候装的是基础版,结果后面缺工具又补装,麻烦得很。
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
1.3 安装Gazebo Fortress
Gazebo Fortress 是 Gazebo 的第11个版本,也是目前和ROS2 Humble配合最丝滑的版本。
sudo apt update
sudo apt install ros-humble-ros-gz-sim
嗯,就这么一行命令。它会自动把Gazebo Fortress和ROS2的桥接包一起装好。我当年装Gazebo 9的时候,要手动配一堆环境变量,现在省心多了。
1.4 配置工作环境
装完只是第一步,配置环境才是关键。很多新手装完发现找不到命令,就是因为没source环境变量。
1.4.1 设置环境变量
每次打开终端都要source一下,太麻烦了。我建议你直接写进.bashrc里,一劳永逸。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
1.4.2 创建工作空间
工作空间就是你的项目文件夹。我习惯用src、build、install、log这四个目录结构,这是ROS2的标准做法。
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
1.5 验证安装
装没装好,跑个例子就知道了。我每次装完新环境,都会用这个方法来验证,简单粗暴。
1.5.1 测试ROS2
打开两个终端。第一个终端跑发布者,第二个终端跑订阅者。能看到数据在跑,就说明ROS2装好了。
# 终端1
ros2 run demo_nodes_cpp talker
# 终端2
ros2 run demo_nodes_cpp listener
1.5.2 测试Gazebo
直接启动Gazebo,看看能不能打开空世界。
ign gazebo empty.sdf
如果看到一个灰色的3D场景,恭喜你,Gazebo也装好了。
1.6 第一个仿真世界
好了,重头戏来了。咱们用ROS2启动Gazebo,加载一个带小车的世界。
1.6.1 启动Gazebo世界
我准备了一个简单的世界文件,里面有一辆差速驱动小车。你直接复制下面的命令就行。
# 启动Gazebo并加载世界
ign gazebo ~/ros2_ws/src/my_world.sdf
如果没看到小车,别慌。可能是模型路径没设置。我曾经在这个坑里卡了半小时,后来发现是环境变量忘配了。
export IGN_GAZEBO_RESOURCE_PATH=$IGN_GAZEBO_RESOURCE_PATH:~/ros2_ws/src/models
1.6.2 用ROS2控制小车
启动桥接节点,把ROS2的/cmd_vel话题和Gazebo的驱动连接起来。
ros2 run ros_gz_bridge parameter_bridge /cmd_vel@geometry_msgs/msg/Twist@ignition.msgs.Twist
然后在另一个终端发布速度指令:
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5}, angular: {z: 0.1}}"
看到小车动起来了吗?嗯,这就是你的第一个仿真世界。
1.7 本章知识体系
下面这张图,是我用SVG画的本章知识结构。你可以把它当成一张地图,随时回来看看自己走到哪了。
这张图把本章内容分成了三大块:环境安装、配置验证、仿真运行。你跟着这个流程走,就不会乱。
1.8 常见问题与避坑
- 问题1: 运行colcon build时报错“找不到Python模块”。
解决: 安装python3-colcon-common-extensions。我遇到过三次,都是这个原因。 - 问题2: Gazebo启动后黑屏。
解决: 检查显卡驱动。Gazebo需要OpenGL支持,虚拟机用户尤其要注意。 - 问题3: ros2 run找不到包。
解决: 确认source了setup.bash,并且在工作空间目录下运行了colcon build。
好了,第一章的内容就到这里。环境搭好了,后面咱们就可以放开手脚,玩点真格的了。