本教程介绍SDF模型对象的详细信息。
文章目录
SDF 文件可以描述从简单的形状到复杂的机器人的各类模型。它指了SDF标记,本质上是链接、关节、碰撞对象、视觉效果和插件的集合。所需模型的复杂性高的话,生成SDF 模型文件可能很困难。本页将提供一些关于如何构建模型的小提示。
1. SDF 模型的组成
- Links: 链接包含模型的一个实体的物理属性。 这可以是一个轮子,也可以是关节链中的一个链接。 每个链接可以包含许多碰撞和视觉元素。 我们建议尽量减少模型中的链接数量,以提高性能和稳定性。 例如,桌子模型可能由通过关节连接的5个链接(4个用于腿部,1个用于顶部)组成。 但是,这样做过于复杂。由于关节永远不会移动,我们可以创建包含1个链接元素和5个碰撞元素的表。
- Collision: 碰撞元素封装用于碰撞检查的几何体。这可以是一个简单的形状(首选),也可以是一个三角形网格(消耗更多资源)。链接可能包含许多碰撞元素。
- Visual: 视觉元素用于可视化链接的各个部分。 链接可以包含0个或多个可视元素。
- Inertial:惯性元素描述了链节的动力学特性,例如质量和旋转惯性矩阵。
- Sensor: 传感器可以从环境中收集数据,一般是以插件的形式添加进来的。 一个链接可能包含0个或多个传感器。
- Light: 光源元素描述连接到链接的光源。链接可能包含0个或多个光源。
- Joints: 关节连接两个链接。 将建立父子关系以及其他参数,例如旋转轴和关节极限。
- Plugins: 插件是由第三方创建的用于控制模型的共享库。
2.构建一个 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
文件不足以将模型加载到图形客户端。 您还必须正确设置模型目录,这将在下一个教程:制作移动机器人中学习。