Gazebo 学习笔记之构建一个Robot 2:构造一个SDF模型

本教程介绍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建模器(如BlenderSketchup)创建自己的网格文件。

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文件,可以慢慢地开始增加更多的复杂性。

以下是添加功能的推荐顺序:

  1. 添加一个 link.
  2. 设置碰撞元素。
  3. 设置视觉元素。
  4. 设置惯性属性。
  5. 转到#1,直到添加了所有链接。
  6. 添加所有关节(如果有)。
  7. 添加所有插件(如果有)。

对于每个新添加的内容,请使用图形客户端加载模型,以确保您的模型是正确的。 但是,仅有box.sdf文件不足以将模型加载到图形客户端。 您还必须正确设置模型目录,这将在下一个教程:制作移动机器人中学习。

发布了45 篇原创文章 · 获赞 1 · 访问量 2417

猜你喜欢

转载自blog.csdn.net/amnesiagreen/article/details/105744133