玩转Gazebo:创建机器人系列教程 - 第二步:动手制作SDF模型实例
Step 1: 收集所需基本元素的网格(mesh)描述
此步骤涉及收集构建模型所需的所有必要三维网格文件。 Gazebo提供了一组简单的形状的描述:长方体、球体和圆柱体。 如果您的模型需要更复杂的内容,请继续阅读。
网格来自许多地方。 谷歌的3D仓库是一个很好的3D模型存储库,你可以从那里得到所需的3D网格文件。您也可以使用3D建模器(如Blender或Sketchup)创建自己的网格文件。
Gazebo要求网格文件格式为STL、COLLADA或OBJ,COLLADA和OBJ是首选格式。
小贴士: 使用三维建模软件移动每个网格,使其中心放置在坐标原点。 这将使模型在Gazebo中的放置变得非常容易。
小贴士: Collada和OBJ文件格式允许将材质附加到网格。使用此机制可以改善网格的视觉外观。
小贴士: 保持网格简单。如果计划将网格用作碰撞元素,则尤其如此。通常的做法是使用低多边形网格作为碰撞元素,而使用高多边形网格作为视觉元素。一个更好的实践是使用一个内置的形状(长方体、球体、圆柱体)作为碰撞元素。
Step 2: 创建你的模型 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\>
以将长方体提升到地平面上方。
小贴士: 以上示例将简单长方体模型设置为静态,这将使模型不可移动。此功能在模型创建期间非常有用。创建完模型后,如果要移动模型,请将<static>标记设置为false。
Step 3: 添加部件到模型SDF文件
对于一个.sdf
文件,可以慢慢地开始增加更多的复杂性。
以下是添加功能的推荐顺序:
- 添加一个 link.
- 设置碰撞元素。
- 设置视觉元素。
- 设置惯性属性。
- 转到#1,直到添加了所有链接。
- 添加所有关节(如果有)。
- 添加所有插件(如果有)。
对于每个新添加的内容,请使用图形客户端加载模型,以确保您的模型是正确的。 但是,仅有box.sdf
文件不足以将模型加载到图形客户端。 您还必须正确设置模型目录,这将在下一个教程:制作移动机器人中学习。