4、第一个仿真世界:启动Gazebo、加载空世界、添加静态物体(地面、墙壁)

好,咱们正式开始动手了。

前面几章聊了不少理论,什么ROS架构啊、话题通信啊。我知道你肯定手痒了,想看看Gazebo到底长什么样。今天我们就来干一件最基础的事——启动Gazebo,加载一个空世界,然后往里面扔几个静态物体。

说白了,就是搭一个最简单的仿真舞台。

4.1 启动Gazebo:两种方式,你选哪种?

我个人习惯用终端直接敲命令。干净利落,没有花里胡哨的界面干扰。

打开终端,输入:

gazebo

回车。等几秒钟,你会看到一个灰色的窗口弹出来。嗯,这就是Gazebo的主界面了。

如果你装了ROS,也可以用ROS的启动方式:

roslaunch gazebo_ros empty_world.launch

这两种方式效果一样。区别在哪?用roslaunch的话,Gazebo会自动和ROS的Master节点连上,方便后面用ROS命令控制。我建议你从现在开始就养成用roslaunch的习惯,后面做机器人导航、避障的时候,你会发现这样省事很多。

小提示:第一次启动Gazebo会比较慢,因为它要加载一堆模型库。别急,喝口水等一等。以后启动就快了。

4.2 空世界长什么样?

你看到的这个灰色网格,就是Gazebo的「空世界」。

它其实就是一个三维空间,有坐标轴,有重力。你可以把它想象成一张无限大的白纸,我们后面要画的所有东西——地面、墙壁、机器人——都放在这张纸上。

为什么会看到网格?那是地面网格,方便你判断物体的位置和方向。我个人觉得这个设计很贴心,尤其是调试机器人位置的时候,看一眼网格就知道大概坐标了。

4.3 添加地面:让机器人有路可走

空世界虽然干净,但机器人不能悬空跑啊。我们需要一个地面。

点击菜单栏的 Edit → Building Editor,或者直接用快捷键 Ctrl+B。不过说实话,这个编辑器我很少用,因为它有点笨重。

我更推荐用代码的方式添加地面。打开一个新终端,输入:

gz model --spawn-file=/usr/share/gazebo-11/models/ground_plane/model.sdf --model-name=ground_plane -x 0 -y 0 -z 0

或者,如果你用的是ROS,可以写一个launch文件。我习惯把常用的模型都放在一个launch文件里,方便复用。比如这样:

<launch>
  <node name="spawn_ground" pkg="gazebo_ros" type="spawn_model" args="-file $(find gazebo_ros)/models/ground_plane/model.sdf -sdf -model ground_plane -x 0 -y 0 -z 0" output="screen"/>
</launch>

运行之后,你会看到Gazebo里出现了一个灰色的平面。嗯,这就是地面了。

注意:地面模型默认是无限大的,但你实际看到的只是可视范围。别担心,机器人不会掉下去。

4.4 添加墙壁:给机器人划个圈

光有地面还不够,我们得给机器人一点挑战。加几堵墙,让它知道什么叫「此路不通」。

Gazebo自带了一些基础模型,比如立方体、圆柱体。我们可以用立方体来当墙壁。

在终端里执行:

gz model --spawn-file=/usr/share/gazebo-11/models/box/model.sdf --model-name=wall_1 -x 2 -y 0 -z 0.5

这里解释一下参数:

  • --model-name:给这个模型起个名字,方便后面管理
  • -x -y -z:模型的位置坐标。单位是米
  • -z 0.5:因为立方体高度是1米,所以把底部抬高0.5米,让墙壁正好立在地面上

你可能会问:为什么墙壁是立方体?嗯,你可以调整它的尺寸。在模型文件里修改<size>标签就行。比如改成0.2米厚、2米高、3米宽,就是一堵像模像样的墙了。

我曾经在一个项目里,用这种立方体搭了一个迷宫。虽然看起来简陋,但用来测试避障算法完全够用。

4.5 用SVG理一理思路

说了这么多,我们来画一张图,把整个流程串起来。

搭建第一个仿真世界的流程 启动Gazebo gazebo 或 roslaunch 加载空世界 默认灰色网格界面 添加地面 ground_plane模型 添加墙壁 box模型调整尺寸 第一个仿真世界搭建完成

你看,整个流程其实就四步。启动、加载、加地面、加墙壁。是不是很简单?

4.6 避坑指南:我踩过的几个坑

讲几个我当年踩过的坑,你遇到了别慌。

  • 模型加载不出来:我曾经遇到过模型下载失败的情况。Gazebo第一次加载模型时会从网上下载,如果网络不好就会卡住。解决办法是手动下载模型库,放到~/.gazebo/models/目录下。
  • 坐标搞反了:有一次我把墙壁的x坐标写成了负数,结果墙壁跑到地面下面去了。嗯,检查坐标的时候多看一眼z值,别让墙壁悬空或者穿模。
  • 模型名字重复:如果你添加了两个同名模型,Gazebo会报错。给每个模型起个独一无二的名字,比如wall_1、wall_2。
核心要点:
  • 启动Gazebo用roslaunch更方便与ROS集成
  • 地面和墙壁都是静态模型,用gz model命令添加
  • 坐标位置要仔细检查,尤其是z轴高度
  • 模型名字不能重复

好了,现在你的Gazebo世界里应该有一个地面、几堵墙。虽然看起来简陋,但这是你亲手搭建的第一个仿真环境。后面我们会往里面放机器人,让它动起来,甚至学会自己避开这些墙壁。

嗯,今天就到这里。去试试吧,把墙壁摆成你喜欢的样子。

可可精品资料库