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完美匹配
⚠️ 避坑指南: 我曾经见过有人用Ubuntu 20.04硬装ROS2 Humble,结果一堆依赖冲突。Ubuntu版本和ROS2版本是绑定的,别乱来。

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
💡 小技巧: 安装过程大概要下载2-3GB,网速慢的话可以先去喝杯咖啡。或者换个国内镜像源,速度能快不少。

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
🔑 核心知识点: colcon是ROS2的编译工具,相当于ROS1里的catkin。第一次build会生成install目录,里面放着你的可执行文件和库。

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章:Gazebo与ROS2环境搭建 环境安装 配置验证 仿真运行 安装ROS2 Humble 安装Gazebo Fortress 安装ros_gz_bridge 配置.bashrc环境变量 创建colcon工作空间 运行talker/listener测试 启动Gazebo空世界 加载小车模型 通过ROS2控制小车 目标:跑通第一个仿真世界

这张图把本章内容分成了三大块:环境安装、配置验证、仿真运行。你跟着这个流程走,就不会乱。

1.8 常见问题与避坑

  • 问题1: 运行colcon build时报错“找不到Python模块”。
    解决: 安装python3-colcon-common-extensions。我遇到过三次,都是这个原因。
  • 问题2: Gazebo启动后黑屏。
    解决: 检查显卡驱动。Gazebo需要OpenGL支持,虚拟机用户尤其要注意。
  • 问题3: ros2 run找不到包。
    解决: 确认source了setup.bash,并且在工作空间目录下运行了colcon build。
⚠️ 重要提醒: 如果你用的是虚拟机,建议给Gazebo分配至少2GB显存和4核CPU。否则跑起来会卡成PPT。

好了,第一章的内容就到这里。环境搭好了,后面咱们就可以放开手脚,玩点真格的了。

可可精品资料库