第二讲 建立一个简单模型
概述
本讲将详细介绍SDF模型对象。
SDF模型可以描述从简单的形状到复杂的机器人。它指的是<model> SDF标签,本质上是链接,关节,碰撞对象,视觉效果和插件的集合。如果模型很复杂,生成模型文件可能很困难。该页面将提供一些有关如何构建模型的提示。
SDF 模型的组成
- Links : 链接(Link) 包含模型一个实体的物理属性。这可以是轮子,也可以是关节链中的链接。每个链接可能包含许多碰撞和视觉元素。尝试减少模型中的链接数,可以提高性能和稳定性。例如,一个桌子模型可以包含5个通过关节连接的链接(4条腿,1条腿)。但是,这过于复杂,尤其是因为关节永远不会移动。而是创建具有1个链接和5个碰撞元素的桌子模型。
- Collision:碰撞 碰撞元素封装了用于碰撞检查的几何体。这可以是简单的形状(首选),也可以是三角形的网格(消耗更多的资源)。一个 链接(Link) 可能包含许多 碰撞 元素。
- Visual : 视觉 视觉元素用于 链接(Link) 的可视化部分。一个 链接(Link) 可能有0个或者多个 视觉 元素。
- Inertial: 惯性 元素描述了链节的动力学特性,例如质量和旋转惯性矩阵。
- Sensor: 传感器 使用插件在 世界(world) 中收集数据。一个 链接(Link) 可以有0个或者多个 传感器。
- Light: 灯光 描述附加在 链接(Link) 上的光源。一个 链接(Link) 可以有0个或者多个光源。
- Joints: 关节用于连接两个链接。关节将建立 链接(Link) 的父子关系以及其他参数,例如坐标轴的旋转角度和关节的限制。
- Pligins : 插件是第三方创建的用于控制模型的共享库。
建立一个模型
第一步:组织网格信息
此步骤涉及收集构建模型所需的所有必要3D网格文件。Gazebo提供了一组简单的形状:盒子,球体和圆柱体。如果您的模型需要更复杂的东西,请继续阅读。
网格来自许多地方。Google的3D仓库是个获取3D模型的好地方。或者,您可能已经具有必要的文件。最后,您可以使用3D建模器(例如Blender或Sketchup)制作自己的网格。
Gazebo要求网格文件的格式设置为STL,Collada或OBJ,其中Collada和OBJ是首选格式。
-
提示:使用3D建模软件移动每个网格,使其以原点为中心。这将大大简化模型在凉亭中的放置。
-
提示: 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>
请注意,Box几何的原点位于盒子的几何中心,因此,为了使盒子的底部与地面齐平,请添加标签< pose>0 0 0.5 0 0 0< /pose>,从而使盒子在地面以上。
提示 :上述例子中将盒子设置为静态,这使模型不可移动。这个特性在模型创建时非常有用。一旦你完成了模型创建,将标签< static>设置为false,从而使模型可移动。
第三步:增加模型sdf文件
慢慢增加更多的复杂性到sdf问价中。
最好按照以下顺序添加特征:
- 添加一个link;
- 设置碰撞单元;
- 设置可见单元;
- 设置惯性属性;
- 返回1,直到所有的links都被添加;
- 添加所有的joints;
- 添加所有的插件(如果有)。
每添加一个属性,使用图形化客户端加载模型确保模型正确。但是box.sdf文件自己不足以加载模型到图形化客户端。必须设置正确的模型路径,从下一讲中将介绍:如何制作一个移动机器人。