1. Gazebo与ROS2初探
1.1 Gazebo到底是什么?
Gazebo,说白了就是一个机器人专用的3D仿真环境。你可以把它想象成一个「虚拟实验室」——里面有重力、有光照、有碰撞检测,甚至还能模拟传感器噪声。
我个人习惯把Gazebo比作「机器人界的游戏引擎」。它不像Unity或Unreal那样追求画面炫酷,而是专注于一件事:让机器人模型在虚拟世界里动起来,并且动得真实。
举个例子,你在Gazebo里放一个差速轮小车,给它发一个速度指令。它会真的因为地面摩擦而打滑,会因为重心偏移而侧翻。嗯,这就是它厉害的地方。
1.2 为什么非要搞仿真?
你想想看,做机器人开发最怕什么?怕撞墙、怕摔机、怕电池烧了。我在项目中遇到过好几次,真机调试时一个参数写错,电机直接过载冒烟。那味道,至今难忘。
仿真能帮你解决三个核心痛点:
- 成本问题:一台移动机器人少说几千块,机械臂动辄几万。仿真里随便摔,不心疼。
- 效率问题:真机测试一次要充电、上电、复位,半小时就过去了。仿真里点一下重启,一秒搞定。
- 安全问题:尤其是无人机、自动驾驶这类高危场景。我见过有人第一次飞无人机,直接撞天花板炸机。在仿真里先练手,它不香吗?
核心观点:仿真的目的不是替代真机,而是把真机上的试错成本降到最低。
1.3 ROS2和Gazebo是什么关系?
这个问题经常有人搞混。我直接说结论:ROS2是机器人的「神经系统」,Gazebo是机器人的「虚拟身体」。
ROS2负责发指令、收数据、做决策。Gazebo负责执行指令、模拟物理、生成传感器数据。两者通过一个叫 ros_gz_bridge 的桥梁通信。
打个比方:
- ROS2 就像你的大脑,想着「往前走」
- Gazebo 就像你的腿,真的迈出一步
- 腿走完会告诉大脑:「我走了10厘米,遇到一个台阶」
我曾经见过有人把Gazebo当成ROS2的一部分,其实不是。Gazebo可以独立运行,ROS2也可以不用Gazebo。但两者结合,才是目前机器人仿真领域最主流的方案。
小提示:ROS2和Gazebo的版本必须匹配。比如ROS2 Humble对应Gazebo Fortress(也叫Gazebo Ignition Fortress)。版本不对,连都连不上。
1.4 安装Gazebo和ROS2(Humble)
这里我直接给最稳的安装方式。我自己踩过不少坑,下面这个流程是验证过无数次的。
1.4.1 安装ROS2 Humble
# 设置编码
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
# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
# 添加ROS2 GPG密钥
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
# 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
注意:安装过程大概需要10-20分钟,取决于你的网速。我曾经在学校机房装过一次,网络限速,硬是装了40分钟。建议用有线网络。
1.4.2 安装Gazebo Fortress
# 安装Gazebo Fortress
sudo apt-get update
sudo apt-get install gz-fortress
# 验证安装
gz sim --version
如果看到版本号输出,比如 6.x.x,说明安装成功。
1.4.3 安装ros_gz_bridge
# 安装桥接包
sudo apt install ros-humble-ros-gz-bridge
这一步很多人会忘。没有这个桥接,ROS2和Gazebo就是两个孤岛,互相说不上话。
1.5 启动第一个空世界仿真
好了,现在我们来跑第一个仿真。什么都不放,就一个空荡荡的世界。
步骤一:配置环境变量
# 每次打开新终端都要执行,或者写进~/.bashrc
source /opt/ros/humble/setup.bash
步骤二:启动Gazebo空世界
# 启动空世界仿真
gz sim empty.sdf
你会看到一个灰色的窗口弹出来。中间有一个网格地面,上面什么都没有。嗯,这就是「空世界」。
步骤三:在ROS2中查看
再开一个终端,执行:
source /opt/ros/humble/setup.bash
ros2 topic list
你会看到类似这样的输出:
/clock
/parameter_events
/rosout
/tf
/tf_static
这说明ROS2已经和Gazebo连上了。虽然世界是空的,但通信链路已经建立。
个人经验:我第一次启动空世界时,窗口一片漆黑,还以为装错了。后来发现是视角问题。按住鼠标中键拖动,就能旋转视角。按住右键拖动,可以平移。这个操作习惯跟很多3D软件一样。
1.6 本章知识体系
下面这张图帮你理清本章的核心逻辑:
1.7 避坑指南
最后分享几个我当年踩过的坑:
- 版本不匹配:ROS2 Humble必须配Gazebo Fortress。我曾经试过用Gazebo Classic,结果桥接死活连不上。后来查文档才发现,Humble只支持Gazebo Ignition系列。
- 环境变量没source:每次新开终端都要
source /opt/ros/humble/setup.bash。我建议直接写进~/.bashrc,省得每次手动敲。 - 空世界启动后没反应:别慌。先检查终端有没有报错,再确认显卡驱动是否正常。Gazebo对OpenGL有依赖,虚拟机里经常跑不起来。
一句话总结:Gazebo是虚拟机器人身体,ROS2是大脑,桥接是神经。装好环境,跑个空世界,你就迈出了机器人仿真的第一步。
可可精品资料库