首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星
目录

使用Gazebo的GUI创建机器人

在本文中,我们将利用Gazebo的GUI工具,模型编辑器,来创建一个简单的机器人。它是一个轮式的小车,有一个传感器可以探测前方事物并跟随它移动。 GUI工具能帮助我们实现一些简单的模型,对于复杂的机器人使用SDF文件来描述更为方便。本文的主要目的是介绍Gazebo的GUI界面, 所以还是从模型编辑器开始我们的Gazebo之旅。

本文假设读者已经安装了Gazebo 7或者以上版本。如果是按照ROS的安装和初体验完全安装的Kinetic版本的ROS系统, 那么在你的机器上就已经安装了Gazebo 7。

1. GUI界面

对于Ubuntu的系统按下Alt-F2,然后输入Gazebo按下回车就可以打开Gazebo软件。也可以在终端中通过如下的指令打开软件,软件界面如下图1所示。

        $ gazebo
图1(a). Gazebo默认界面 图1(b). Gazebo界面解释
如上图1(b)所示,场景区是在中间占据了GUI的大部分页面,场景的左右两边分别是两个边栏,他们中间有一个分隔栏,通过拖拽分隔栏可以显示、隐藏边栏,或者修改边栏的大小。 其中,右边栏默认是隐藏的。

左边栏中有三个选项卡。其中World描述了反正场景的所有信息。Insert则提供了向仿真场景中添加新的模型的功能。而Layers是将场景中的模型进行分组也就是所谓的Layer, 我们可以在场景中选择显示或者不显示某个Layer。

右边栏只有一个Joints的选项卡,当我们选定了某个关节(Joint)后,就可以通过这个选项卡来控制施加在关节上的力(力矩)、位置、速度,是一个很方便的仿真变量输入工具。

在场景区的上下两个部分,分别有两个工具栏。上面的工具栏主要用于编辑仿真场景,提供与场景之间的交互工具。下面的工具栏主要用于开启或者暂停仿真、提示仿真时间与实际时间。 如下图2和图3所示。

图2. Gazebo上工具栏
图3. Gazebo下工具栏
下图为Gazebo的菜单,从菜单中可以找到Gazebo几乎所有的GUI功能,有些功能已经在工具栏中体现了。
在查看和编辑仿真场景的时候,鼠标是一个非常有用的工具。下图描述了常用的鼠标操作。通过中间的滚轮可以放大和缩小场景,按下左键的拖拽可以实现场景的平移,按下滚轮的拖拽可以实现场景的旋转, 右键的拖拽也可以实现场景的放大和缩小。

通过在菜单中选择Edit->Model Editor,或者通过快捷键Ctrl-m就可以进入模型编辑器。进入模型编辑器时就会暂停仿真。模型编辑器的界面与Gazebo的主界面有些不一样, 如下图所示,大体上还是三个部分:场景区、左右边栏。所不同的是场景区中没有了下工具栏,上工具栏中的简单几何体没有了。左边栏中只有Insert和Model两个选项卡, 在Insert选项卡中多了插入简单几何体的选项。右边栏没有什么变化,而且实际上也没有用。

2. 创建小车

首先,我们添加一个立方体作为小车的主体。在Insert选项卡中点击立方体(Box)的图标,如下图4(a)所示,然后将鼠标移到场景区中,点击左键就在场景中加入了一个立方体,如图4(b)所示。

图4(a). Gazebo模型编辑器添加立方体 图4(b). Gazebo模型编辑器添加立方体效果

接下来,我们需要修改立方体的尺寸让它看起来像是一个小车的车体。我们可以在工具栏中选择Scale工具来实现,点击工具栏的Scale图标(如下图5(a)所示)后选择场景中的立方体,就会出现红绿蓝三种颜色的线段。 它们分别表示了小车的xyz三个坐标轴。用鼠标拖动某一个轴,就可以实现在该轴上的伸缩变换。调整后的效果如下图5(b)所示。

图5(a). Scale图标 图5(b). Gazebo模型编辑器修改立方体尺寸

然后,我们期望这个车体到地面之间有点距离。双击立方体时将弹出一个Link Inspector的对话框如下图6所示,这个对话框描述了仿真对象的所有属性。 我们选择其中的Link选项卡,找到其中的Pose选项并展开,修改其中的z值为0.4,这意味着立方体的中心到地面之间的距离为0.4m。点击Ok后确认并关闭对话框。

图6. Link Inspector

实际上,我们也可以在这个对话框中修改立方体的尺寸的。下面我们添加两个圆柱体代表小车的轮子,并介绍如何在Link Inspector中修改对象的尺寸。我们先从左侧边栏中选择圆柱体,并将其添加到场景中。 添加进来的圆柱体是竖着的,我们需要先将它放到,在Link Inspector中Link选项卡下Pose选项中修改Roll为1.5707弧度(90度),如下图7所示。

图7. 旋转圆柱体

紧接着,我们在对话框中修改圆柱体的半径和长度。点击Visual选项卡,展开唯一的visual项,在其中的Geometry项下修改半径为0.3m,长度为0.25m。 修改完成后,我们会看到一个大圆柱体套了一个小圆柱体。 如图8(a)所示。这是因为在Gazebo中一个物体有Visual和Collision两个描述。其中Visual描述的是几何图形在软件中应当如何显示,它只涉及到可视化的内容。Collision描述的是物体的碰撞模型, 它是Gazebo进行物理仿真时使用的模型。所以我们还需要修改Collision选项卡下的几何尺寸描述,让两者保持一致如图8(b)所示。

图8(a). 修改圆柱体视图尺寸 图8(b). 修改圆柱体碰撞尺寸

为了保证轮子刚好接触地面,我们在Link选项卡中指定Z轴的Pose为0.3m,然后通过Ctrl-c和Ctrl-v我们可以再复制一个轮子。 为了让小车不倒,我们再添加一个半径为0.2m的球作为小车的万向轮,并制定z轴的Pose为0.2m,如图9(a)所示。接下来,就需要把这些分立的物体拼接到一起做成小车。 建立各个物体之间联系就需要建立Joint。如下图9所示,点击工具栏中的Joint图标后就会弹出一个Create Joint的对话框。 我们依次点击刚刚添加的立方体和一个圆柱体就会注意到,在这两个几何体之间有一条线连接,同时Link Selections中的Parent和Child分别改为了立方体和圆柱体的名称。

图9(a). 几何体创建完毕 图9(b). Create Joint
下面我们需要关注一下Joint的类型,在Gazebo中有多种不同的关节,比较常用的有:fixed表示两个Link是固定在一起的不会发生相对的移动;revolute表示一个旋转关节,它将绕一个指定的轴转动; Prismatic表示一个平动的关节,它将沿着指定轴平移。在这里我们选择revolute类型。需要指定绕z轴旋转,修改Joint axis为(x,y,z)=(0,0,1)。从下图10中可以看到绕着z轴有一个圆圈,表示关节的转轴。
图10. Revolute型关节的旋转轴
现在虽然建立起了车体与轮子之间的连接,但我们期望轮子紧挨着车体。可以通过Align Links调整两个Link之间的排列关系。这里我们选择X Align Max和Y Align Max,同时勾选Y轴的Reverse选项。 就可以得到如下图11所示的样子。读者可以选择其它选项看看都会产生什么样的效果,这里不再一一介绍。
图11. Align Links
类似的我们可以建立车体与另一个轮子和万向轮之间的Joint联系。需要说明的是,我们这里的万向轮采用的球形关节,也就是选用ball类型。建立完成所有连接后,我们就可以看到如下图12所示的场景。 一个小车的模型就基本构建完成了。下面我们为小车加上一个传感器,来实现它跟踪前面物体的功能。
图12. 未加传感器的小车模型

3. 传感器和插件

现在我们要为小车加上一个深度摄像头(depth camera),用来探测小车前方的物体。我们将从模型库中选择一个已有的传感器模型插入到我们的模型中。

让我们再来看一下左侧边栏,其中有一个Model Database的栏,如下图13(a)所示。图中有三个路径,其中前两个路径是本地的模型库路径。第三个路径是一个http地址,它是Gazebo官方提供的模型库。 如果我们是新安装的Gazebo,本地模型库中可能是空的,此时我们可以选择官方的库,它会将其下载到本地的"~/.gazebo/model"目录下,也就是这里的第一个路径中。

图13. 模型库

这里我们选用官方的Depth Camera,经过一段时间的下载后,就可以将其放置到场景区中。通过调整位置,是它在小车的正上方,并与车体之间建立fixed类型的Joint将之固定在小车上。 效果如下图14所示。我们可以顺便关注一下左侧边栏的Model选项卡,其中列出了模型的所有信息:有一个depth_camera的模型,4个Links,4个Joints。

图14. 带有Depth Camera的小车模型

现在我们的机器人也安装上了传感器,但是它只能静止在原地并不断的发布深度数据。我们可以通过添加插件的形式赋予小车一些功能,比如说我们这里的跟踪前方物体的功能, 甚至是传感器的数据处理、路径规划、自动控制等任务。为了简化教程,这里将为小车装上一个已有的插件, 当然我们还可以自己码代码写插件详细请参考官方的Plugin教程

我们点击左侧边栏Model选项卡中的Model Plugins项下的Add按钮就会弹出一个叫做"Model Plugin Inspector"的对话框,如下图15(a)所示,在"Plugin Name"中填入"follower","Filename"中填入"libFollowerPlugin.so"。 在Gazebo中的插件一般都是通过动态链接库的形式存在的,这样它才能在运行时链接到指定的插件中,也就是我们这里的follower。因为这个插件的使用可以不用任何参数,所以我们保留Innerxml为空白,点击Ok确认退出。 此时我们就可以在左侧边栏的Model选项卡中看到新添加的插件,如图15(b)所示。

图15(a). Model Plugin Inspector 图15(b). Model Puglin

4. 模型的保存及使用

通过菜单栏File->Save As,或者Ctrl-s快捷键可以打开如下图16所示的保存对话框,为模型命名指定路径后点击Save保存即可。

图16. 保存模型

通过菜单File->Exit Model Editor,Gazebo将返回仿真模式。点击下工具栏中的Play按钮将开始仿真,此时小车还是静止的。为了测试插件的效果,我们在小车前防止一个立方体, 就可以看到小车不断的接近它。

图17. 仿真

5. 总结

在本文中,我们通过Gazebo的Model Editor创建了一个小车,并从官方的模型库中下载了一个Depth Camera的模型,作为小车的传感器。为小车添加了一个follower的插件,使得小车能够跟随前方的物体。 通过GUI的形式创建机器人模型的过程是很繁琐的,尤其是在机器人比较复杂的时候。我个人在使用过程中,发现它的GUI界面还是有很多Bug的,所以推荐尽量使用SDF文件来描述机器人。




Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1