2. Gazebo仿真环境搭建

各位同学,欢迎来到《Gazebo机械臂抓取原理解析》的第二讲。

上一章我们聊了Gazebo能干什么,以及它在机器人开发中的位置。今天咱们直接动手,把环境搭起来。说实话,很多初学者卡在第一步——装不上、跑不起来、界面看不懂。我当年也踩过不少坑,今天就把这些经验一次性分享给你。

2.1 安装Gazebo:别怕,其实很简单

Gazebo的安装方式有很多种,我个人最推荐的是通过ROS的包管理器来装。为什么呢?因为这样能保证和ROS的版本兼容,省去很多头疼的依赖问题。

第一步:确认你的ROS版本

我假设你用的是Ubuntu 20.04 + ROS Noetic,或者Ubuntu 18.04 + ROS Melodic。如果你不确定,打开终端输入:

echo $ROS_DISTRO

嗯,看到输出了吧?如果是 noetic 或 melodic,那就对了。

第二步:一键安装

打开终端,直接敲下面这行命令:

sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control

如果你是Melodic,把 noetic 换成 melodic 就行。

小提示: 安装过程中如果提示缺少某些依赖,别慌。运行 sudo apt-get update 更新一下源,再重试。我遇到过好几次,其实就是源没刷新。

第三步:验证安装

装完之后,在终端输入:

gazebo --version

如果看到类似 Gazebo multi-robot simulator, version 11.x.x 的输出,恭喜你,装好了!

注意: 如果你用的是虚拟机,记得给虚拟机分配至少2GB显存,否则Gazebo启动时会卡成PPT。我曾经在虚拟机里折腾了一下午,最后发现是显存不够。

2.2 熟悉Gazebo界面:别被它吓到

装好之后,在终端输入 gazebo 回车,界面就出来了。第一次打开可能会有点懵,我当初也是。其实它的布局很清晰,咱们拆开来看。

主界面分区

区域 名称 作用
中央 3D场景视图 显示机器人、物体、光照等
左侧 世界面板 列出所有模型、光源、碰撞体
顶部 工具栏 添加模型、调整视角、播放/暂停仿真
底部 状态栏 显示仿真时间、实时因子、帧率

你想想看,这个布局是不是跟很多3D建模软件很像?左侧是资源列表,中央是画布,顶部是工具。上手其实不难。

几个常用操作

  • 旋转视角: 按住鼠标滚轮拖动
  • 平移视角: 按住 Ctrl + 鼠标滚轮拖动
  • 缩放: 滚动鼠标滚轮
  • 选中物体: 左键单击
  • 移动物体: 选中后按 W 键,出现坐标轴拖拽

我个人习惯先把视角调成俯视图,这样看地面和物体位置更直观。你可以在顶部菜单 View -> Top View 切换。

2.3 创建简单仿真世界:从零开始搭一个场景

好,环境熟悉了,咱们来建一个自己的世界。说白了,就是创建一个 .world 文件。这个文件描述了仿真世界里有什么:地面、墙、桌子、机器人等等。

方法一:图形化操作(适合新手)

在Gazebo界面里,点击顶部工具栏的 Insert 标签,你会看到很多预设模型。比如:

  • ground_plane —— 地面
  • sun —— 太阳光
  • unit_box —— 一个方块
  • unit_cylinder —— 一个圆柱

直接拖拽到场景里就行。我刚开始学的时候,就是这么一个个拖出来的,感觉像在搭积木。

方法二:手写SDF文件(推荐)

图形化操作虽然直观,但没法复用。我建议你学会手写SDF(Simulation Description Format)文件。这是Gazebo的原生格式,比URDF更灵活。

创建一个 my_world.world 文件,内容如下:

<?xml version="1.0" ?>
<sdf version="1.6">
  <world name="my_simple_world">

    <!-- 添加光源 -->
    <include>
      <uri>model://sun</uri>
    </include>

    <!-- 添加地面 -->
    <include>
      <uri>model://ground_plane</uri>
    </include>

    <!-- 添加一个红色方块 -->
    <model name="red_box">
      <pose>1 0 0.5 0 0 0</pose>
      <link name="link">
        <collision name="collision">
          <geometry>
            <box>
              <size>0.5 0.5 0.5</size>
            </box>
          </geometry>
        </collision>
        <visual name="visual">
          <geometry>
            <box>
              <size>0.5 0.5 0.5</size>
            </box>
          </geometry>
          <material>
            <ambient>1 0 0 1</ambient>
          </material>
        </visual>
      </link>
    </model>

  </world>
</sdf>

保存后,在终端运行:

gazebo my_world.world

你会看到一个带阳光的地面,中间有个红色方块。是不是很有成就感?

核心知识点: SDF文件中的 <pose> 标签定义了物体的位置和姿态,格式是 x y z roll pitch yaw。单位是米和弧度。我经常在这里写错坐标,建议你每次改完都先预览一下。

2.4 添加光源与地面:让世界更真实

刚才的例子已经包含了光源和地面,但我想再深入聊聊。因为在实际项目中,光照和地面设置会直接影响视觉SLAM、深度相机等传感器的仿真效果。

光源类型

Gazebo支持三种光源:

  • 方向光(directional): 模拟太阳,平行光,没有位置衰减
  • 点光源(point): 模拟灯泡,从一点向四周发光
  • 聚光灯(spot): 模拟手电筒,有方向锥角

我个人最常用的是方向光,因为它简单且性能开销小。如果你需要模拟室内环境,可以加几个点光源。

手动添加一个点光源的示例:

<light name="my_point_light" type="point">
  <pose>0 0 2 0 0 0</pose>
  <diffuse>1 1 1 1</diffuse>
  <specular>0.1 0.1 0.1 1</specular>
  <attenuation>
    <range>10</range>
    <constant>0.5</constant>
    <linear>0.01</linear>
    <quadratic>0.001</quadratic>
  </attenuation>
</light>

地面设置

地面默认是无限大的平面,但你可以修改它的材质和纹理。比如你想模拟一个木地板或水泥地,可以修改 ground_plane 的材质参数。

不过说实话,对于机械臂抓取仿真,默认的灰色地面完全够用。我只有在做视觉相关的项目时才会去调地面纹理。

避坑指南: 我曾经在添加多个光源时,发现场景变得特别暗。后来排查了半天,发现是光源的 diffuse 颜色值写成了 0 0 0(黑色)。记住,RGB值范围是0到1,1 1 1 才是白色光。

2.5 本章知识体系

为了让你更直观地理解本章的内容结构,我画了一张图:

Gazebo仿真环境搭建 安装Gazebo 熟悉界面 创建仿真世界 添加光源与地面 核心产出:一个可运行的 .world 文件

你看,整个流程是线性的:先装好工具,再熟悉界面,然后动手创建世界,最后优化细节。每一步都踩实了,后面的机械臂抓取才能跑得稳。

好了,这一章的内容就到这里。你可以在终端里多试试不同的光源参数和物体摆放,玩熟了再往下走。下一章我们会聊如何把机械臂模型导入Gazebo,那才是真正有意思的部分。

可可精品资料库