Gazebo学习--第二讲:构建一个简单模型

第二讲 建立一个简单模型

概述

本讲将详细介绍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问价中。
最好按照以下顺序添加特征:

  1. 添加一个link;
  2. 设置碰撞单元;
  3. 设置可见单元;
  4. 设置惯性属性;
  5. 返回1,直到所有的links都被添加;
  6. 添加所有的joints;
  7. 添加所有的插件(如果有)。
    每添加一个属性,使用图形化客户端加载模型确保模型正确。但是box.sdf文件自己不足以加载模型到图形化客户端。必须设置正确的模型路径,从下一讲中将介绍:如何制作一个移动机器人。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pangweijian

传播知识,点亮智慧~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值