教程一:创建一个模型
一.简述
该教程主要讲述SDF文件的细节.
二.SDF模型的组成部分
links:它描述了一个模型的的一部分身体的物理属性.每一个link都可能包含许多个collision和visual属性.减少links的数量能够提升模型的稳定性.
collision:它封装了geometry属性来用于碰撞检测.一个link可能由多个collision元素.
visual:它用于可视化link的各个部分.一个link可能包含0个或多个visual元素.
inertial:它描述了link的动态属性,例如质量和转动惯量矩阵.
sensor:它为插件收集外界数据.一个link可能包含0个或多个sensors.
light:它描述光源.一个link可能包含0个或多个lights.
joints:它连接两个link.
plugins:它是由第三方为了控制模型建立的共享库.
三.建立一个模型
第一步:收集meshes(网格)
这一步包括获取你所需要的所有三维mesh文件.Gazebo提供了一些简单的形状:方形,圆形,圆柱.如果需要更复杂的形状,继续往下读.
Meshes可以从许多地方获得.Google's 3D warehouse是一个获取3D模型的不错的库.或者如果你已经有了必要的文件的话,可以通过Blender或Sketchup建立一个自己的mesh.
Gazebo要求mesh文件以STL,Collada或OBJ格式存储,后两者是首选.
第二步:为你的模型建立SDF文件
最好以一个简单的模型开始,或者复制已有的模型文件来开始.这样的好处是不用从头开始且便于调试.
现在有一个非常基础的小盒子模型文件.
创建 box.sdf 模型文件
gedit box.sdf
复制下列内容到 box.sdf 文件中
<?xml version='1.0'?>
<sdf version="1.4">
<model name="my_model">
<pose>0 0 0.5 0 0 0</pose>
<static>true</static>
<link name="link">
<inertial>
<mass>1.0</mass>
<inertia> <!-- inertias are tricky to compute -->
<!-- http://gazebosim.org/tutorials?tut=inertia&cat=build_robot -->
<ixx>0.083</ixx> <!-- for a box: ixx = 0.083 * mass * (y*y + z*z) -->
<ixy>0.0</ixy> <!-- for a box: ixy = 0 -->
<ixz>0.0</ixz> <!-- for a box: ixz = 0 -->
<iyy>0.083</iyy> <!-- for a box: iyy = 0.083 * mass * (x*x + z*z) -->
<iyz>0.0</iyz> <!-- for a box: iyz = 0 -->
<izz>0.083</izz> <!-- for a box: izz = 0.083 * mass * (x*x + y*y) -->
</inertia>
</inertial>
<collision name="collision">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
</link>
</model>
</sdf>
要注意这个物体的原点在盒子的几何中心,所以为了把它放在地面上,设置<pose>0 0 0.5 0 0 0</pose>
Tip:在建立模型时设置为不可移动是很有用的.一旦那你完成了模型的建立,可以设置<static>属性为false来使模型能够移动.
第三步:向SDF文件中添加属性
添加特征的一个比较好的顺序是:
1.添加一个link
2.设置collision标签
3.设置visual标签
4.设置inertial属性
5.回到步骤1直到所有links都被添加
6.添加所有的joints(如果有)
7.添加所有的plugins(如果有)
教程二:创建一个移动机器人
一.创建你的model文件夹
1.创建model文件夹
mkdir -p ~/.gazebo/models/my_robot
2.创建一个model config文件
gedit ~/.gazebo/models/my_robot/model.config
3.复制以下内容
<?xml version="1.0"?>
<model>
<name>My Robot</name>
<version>1.0</version>
<sdf version='1.4'>model.sdf</sdf>
<author>
<name>My Name</name>
<email>me@my.email</email>
</author>
<description>
My awesome robot.
</description>
</model>
4.在该路径~/.gazebo/models/my_robot/下创建model.sdf文件
gedit ~/.gazebo/models/my_robot/model.sdf
5.复制以下内容
<?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
</model>
</sdf>
通过这一部分内容我们已经拥有了模型的一些基础内容.model.config文件描述了这个机器人的一些额外的属性.model.sdf文件包含了必要的标签,来实例化名为my_robot的模型.
二.建立模型框架
这一步将建立一个带两个轮子的长方体模型
第一步是布局模型的基本形状.为了完成这个我们需要使模型固定.
1.在 ~/.gazebo/models/my_robot/model.sdf中通过<static>true</static>使模型固定.
2.添加长方体
这里建立了一个0.4x0.2x0.1米的长方体.在大多数情况下,collision和visual元素是相同的.
3.运行Gazebo查看你的模型,通过Insert Model插入模型并显示.
gazebo
你会看到一个白的漂浮的长方体.在地面上方1m处.
4.现在我们可以添加一些附属物.比如一个没有摩擦的球体.这种方法比添入一个带关节的车轮好,因为他带来的限制更少.
确认它在模型中出现了.(不需要重启Gazebo)
5.现在我们添加一个左轮.在上面的程序中添加如下代码
再次确认.
6.我们可以复制左轮然后调整他的位姿来作为右轮.继续添加如下代码
7.设置<static>为false使模型能够移动,并添加为左右轮各添加一个合页
这两个关节绕y轴旋转<xyz>0 1 0</xyz>,并连接车轮和车身.
8.启动Gazebo,并插入模型.然后拖拽屏幕右边的小点.
9.这样会出现一个包含各个关节不同类型控制器的窗口.
10.在Force栏下,给每个关节添加一个0.1N/m的力,这个机器人会向前移动.