Gazebo教程(四)——创建一个Model

1、简介

这个教程描述如何创建一个SDF的model,SDF文件的Model可以描述一个小方块到一个复杂的机器人,它使用<model> SDF的标签,而且本质上来说是一个links、joints、collision、visuals、plugins的集合。一个model文件的复杂度和model的复杂度相关。

2、SDF Models的组成

Links:一个link包含了物理的属性,这可以是一个轮子,一个关节链中的link,每个link可能包含很多碰撞collision和可视化的visual元件。尽量减少links的数量来提升机器人的性能和稳定性。举例来说,一个桌子的model包含5个links(4个桌腿和一个桌盘),通过joints链接。然而,这个结构太复杂了,特别是这些joints永远不会动,所以,创建一个link和5个碰撞的collision元件。

collision:一个collision元件囊括了一个几何形状来实现碰撞检查,这可以是一个简单的模型或者是一个三角形的模型,一个link可以包含多个collision的模型。

visual:visual元件是用来显示一个link,一个link可以包含0个或者多个visual元件。

interial:interial元件用来描述link的动态属性,例如密度、转动惯量等。

sensor:sensor通过plugin收集环境中的数据,一个link可能包含0个或者多个sensors。

joints:joints用来连接两个links,父子关系、转动轴、joints限制都包含在joints属性中。

plugins:plugin是第三方提供的用来控制model的库。

3、创建一个model

第一步:收集所有零件

这个步骤用于收集所有必要的3D零件文件来建立我的model,gazebo提供了简单的块的设计,包括box,sphere,cylinder。如果你的model需要更复杂的设计,继续往下学习。

meshes可以从很多地方获得,包括Google’s 3D wearhouse。你也可以自己创建3D meshes,使用Blender或者Stetchup。

Gazebo需要的mesh文件的格式为STL或者Collada,Collada是gazebo兼容的更好的文件。

通过3D软件将mesh移动到原点。

Collada的文件允许附加材料到meshes上面,这可以提升显示的效果。

尽量保持meshes的简单,尤其是你要用mesh来当碰撞元件。

第二步:创建model的sdf文件

下面创建一个简单的便于仿真的model文件,这是一个基本的box文件,包括相同的碰撞几何模型,相同的visual和相同的内部构造。

创建一个box.sdf文件。

gedit 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> <!-- interias are tricky to compute -->
          <!-- http://answers.gazebosim.org/question/4372/the-inertia-matrix-explained/ -->
          <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>

注意box的几何原点在box的中心,所以为了让box的底部在ground上面,需要设置原点的位置在<pose> 0 0 0.5 0 0 0</pose>来提升box的位置。这个文件把box的model设置成static的,这样model就是固定不动的,这个特征在model的创建中非常有用,如果你想要你的model可以移动,把<static>的标签设置成false。

第三步:把model添加到SDF文件中

将model的文件逐渐变得复杂,参考步骤如下(添加之前确认你的文件正确)。

1. 添加一个link

2.设置collision元件

3.设置visual元件

4.设置inertial属性

5.回到1步骤直到所有的links添加完毕

6.添加所有的joints

7.添加所有的plugins

 

发布者

harifun

小学的时候,说自己要当一名科学家!那时候,看到新闻联播在宣传“四化”,立志要为现代化作出贡献!高中立志要做机器人,本科和硕士学的自动化!毕业进入华为,因为是测试岗位而离开,然后进入创业公司做工业扫地机器人和服务式机器人!A轮完成数千万级融资后因家庭原因离开上海,回武汉进入一家上市公司从事激光雷达设计工作!机器人是我一直以来的追求,希望有一天我能实现我的理想!

发表评论

电子邮件地址不会被公开。 必填项已用*标注