< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-制作模型

ROS2与Gazebo11入门教程-制作模型

说明:

  • 介绍如何制作模型

概述

  • SDF模型的范围可以从简单的形状到复杂的机器人。
  • 它指的是 SDF标签,本质上是链接(links)、关节(joints)、碰撞对象(collision objects)、视觉(visuals)和插件(plugins)的集合。
  • 取决于所需模型的复杂性,生成模型文件可以很难。
  • 本节教程会提供一些有关如何构建模型的提示。

SDF模型的组成部分

  • links/链接:链接包含模型某个身体的物理属性。链接可以是一个轮子,也可以是关节链中的一个链节。每个链接可能包含许多碰撞和视觉元素。为了改进性能和稳定性,请试着减少模型中的链接数量。

  • 例如,一个桌子模型可以由5个通过关节连接的链接(其中4个链接为腿,1个链接为桌面)组成。但是,这会过于复杂,特别是由于关节永远不会移动。相反地,应该用1个链接和5个碰撞元素来创建该桌子。

  • joints/关节:一个关节会连接两个链接。关节中会建立父链接-子链接关系以及其他参数,例如旋转轴和关节极限。

  • collision/碰撞:碰撞元素封装了用于碰撞检测的几何体。碰撞可以是简单的形状(首选),也可以是三角形网格(这会消耗更多资源)。一个链接可以包含多个碰撞元素。

  • visuals/视觉:视觉元素用于可视化链接的各个部分。一个链接可以包含0个或更多视觉元素。

  • Inertial/惯性:惯性元素描述了链节的动力学特性,例如质量和旋转惯性矩阵。

  • sensors/传感器:传感器从仿真世界采集数据以供插件使用。一个链接可能包含0个或多个传感器。

  • right/灯光:灯光元素描述了连接到某个链接的光源。一个链接可能包含0个或更多的灯光。

  • plugins/插件:插件是第三方创建的、用于控制模型的共享库。

构建模型

收集网格文件

  • 此步骤包括收集构建您的模型所需的所有必要3D网格文件。Gazebo提供了一组简单的形状:盒子(长方体)、球体和圆柱体。如果您的模型需要更复杂的东西,则请继续阅读以下内容。

  • 网格来自许多地方。Google的3D仓库是3D模型的一个优秀存储库。或者,您可能已经具有必要的网格文件。最后,您还可以使用3D建模软件(如Blender或Sketchup)制作自己的网格。

  • Gazebo要求网格文件的格式为STL,Collada或OBJ,其中Collada和OBJ是首选格式。

  • 使用3D建模软件移动每个网格,以使其中心点位于原点上。这样会大大简化Gazebo中模型的安放

  • 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几何体的原点位于盒子的几何中心,因此,为了使盒子的底部与地面齐平,添加了一个属性值为 0 0 0.5 0 0 0 </ pose>的原点位置元素以将该盒子提高到地平面上。

  • 上面的示例将简单盒子模型设置为静态,从而使模型不可移动。在模型创建期间,该特性很有用。在创建完模型后,如果想要该模型可移动,则请将标签设置为false。

向模型SDF文件添加内容

  • 有了一个可以正常运行的.sdf文件后,再慢慢开始增加更多更复杂的要素。

  • 在添加更多更复杂的要素时,建议按以下顺序添加:

  • 添加一个链接

  • 设置碰撞元素

  • 设置视觉元素

  • 设置惯性属性

  • 回到#1,直到添加了所有链接

  • 添加所有关节(如果有的话)

  • 添加所有插件(如果有的话)

  • 每新添加一个新的要素,请使用图形客户端加载该模型以确保您的模型是正确的。但是,仅有box.sdf文件不足以将模型加载到图形客户端中。

  • 您还必须正确设置您的模型目录,而如何正确设置模型目录将在下一教程“制作移动机器人”中学到。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程