1. Gazebo初探:什么是Gazebo、Gazebo在机器人开发中的角色、Gazebo与ROS的关系、安装Gazebo
1.1 什么是Gazebo?
Gazebo,说白了就是一个机器人仿真器。你想想看,做机器人开发最头疼的是什么?是每次改完代码都要跑到实验室去跑真机,万一撞墙了还得修车。Gazebo就是帮你解决这个问题的。
我个人习惯把Gazebo理解成一个「虚拟实验室」。在这个实验室里,你可以搭建各种环境——室内、室外、崎岖地形,甚至火星表面。然后把你的机器人模型放进去,像在真实世界里一样跑起来。传感器会发回数据,物理引擎会计算碰撞和摩擦力,一切都跟真的一样。
我记得刚入行那会儿,带我的老工程师跟我说:「别急着上真机,先在Gazebo里跑三天。」当时我还不太理解,觉得仿真哪有真机来得实在。直到有一次,我在真机上测试导航算法,机器人直接怼上了墙,激光雷达都撞歪了……嗯,从那以后,我再也不敢跳过仿真这一步了。
核心要点:Gazebo是一个高保真的3D机器人仿真环境,支持物理引擎、传感器模拟、环境建模等功能。它让你可以在虚拟世界中反复测试算法,而不用担心损坏硬件。
1.2 Gazebo在机器人开发中的角色
Gazebo在机器人开发流程里,到底扮演什么角色?我用一张图来说明:
从这张图你能看出来,Gazebo不是孤立存在的。它连接了算法开发、硬件验证和数据生成三个环节。我在做移动机器人项目时,经常先在Gazebo里跑一遍导航算法,确认没问题了再移植到真机上。这样做的好处是——你可以在一天内跑完一百种不同的场景,而真机测试可能一周都跑不完。
1.3 Gazebo与ROS的关系
很多人搞不清楚Gazebo和ROS到底是什么关系。我简单说一下:
- ROS(Robot Operating System)是机器人的「操作系统」,负责通信、驱动、工具链。
- Gazebo是机器人的「仿真环境」,负责物理模拟、传感器模拟、场景渲染。
- 两者通过ROS-Gazebo接口(即
gazebo_ros_pkgs)进行通信。
说白了,ROS是大脑和神经系统,Gazebo是虚拟身体和虚拟世界。ROS给Gazebo发指令(比如「往前走一米」),Gazebo模拟物理过程,然后把传感器数据(激光雷达、摄像头、里程计)通过ROS话题发回来。
小技巧:我在项目中习惯用roslaunch同时启动Gazebo和ROS节点。这样Gazebo世界和ROS节点是同步启动的,省去了手动启动的麻烦。具体做法是写一个launch文件,里面包含gazebo_ros的empty_world.launch和你自己的节点。
为什么会这样设计?因为Gazebo和ROS是独立发展的两个项目。Gazebo最初是南加州大学开发的,ROS是Willow Garage搞的。后来大家发现这两个东西配合起来特别好用,就通过接口把它们连在了一起。现在你装ROS的时候,Gazebo基本是标配了。
1.4 安装Gazebo
安装Gazebo其实很简单,但不同系统版本有点区别。我以Ubuntu 20.04 + ROS Noetic为例,这是目前最稳定的组合。
1.4.1 安装ROS(如果还没装)
# 添加ROS源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新并安装
sudo apt update
sudo apt install ros-noetic-desktop-full
1.4.2 安装Gazebo
ROS Noetic自带Gazebo 9,但建议升级到Gazebo 11,因为功能更全,bug也更少。
# 安装Gazebo 11
sudo apt install gazebo11 gazebo11-plugin-base
# 安装ROS-Gazebo接口
sudo apt install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
注意:我曾经遇到过一个问题——装完Gazebo后启动报错,提示缺少某些库。后来发现是因为系统里同时装了多个版本的Gazebo,导致冲突。解决办法是:先卸载旧版本,再装新版本。命令如下:
sudo apt remove gazebo* libgazebo*
sudo apt autoremove
sudo apt install gazebo11 gazebo11-plugin-base
1.4.3 验证安装
装完之后,打开终端输入:
gazebo --version
如果看到类似下面的输出,说明安装成功:
Gazebo multi-robot simulator, version 11.12.0
Copyright (C) 2012-2020 Open Source Robotics Foundation.
然后试试启动Gazebo:
gazebo
你会看到一个空荡荡的世界。别急,这就是你的虚拟实验室。你可以用鼠标拖拽视角,按住滚轮平移,右键旋转。先熟悉一下操作界面。
1.4.4 安装后的快速测试
我个人习惯装完Gazebo后,立刻跑一个简单的测试,确保ROS和Gazebo能正常通信:
# 启动ROS核心
roscore &
# 启动Gazebo空世界
roslaunch gazebo_ros empty_world.launch
# 查看话题列表(新开一个终端)
rostopic list
如果看到/gazebo/link_states、/clock等话题,说明ROS和Gazebo已经成功握手了。
避坑指南:我曾经在安装时卡在「找不到gazebo_ros包」这个问题上。后来发现是因为只装了Gazebo本体,没装ros-noetic-gazebo-ros-pkgs。记住,这两个东西是分开的,必须都装上才能让ROS和Gazebo对话。
1.5 本章小结
这一章我们聊了Gazebo是什么、它在机器人开发中扮演什么角色、和ROS是什么关系,以及怎么安装。说白了,Gazebo就是你的虚拟机器人实验室,让你在写代码的时候不用提心吊胆怕撞坏真机。
下一章我们会正式进入Gazebo的世界,从创建一个简单的机器人模型开始。嗯,到时候你会看到,一个方盒子也能跑起来,还挺好玩的。