• 【gazebo要素9】 SDF制作Model文件


    一、概述

    ​​​​​​​

            SDF 模型的范围从简单的形状到复杂的机器人。它指的是 SDF 标签,本质上是链接、关节、碰撞对象、视觉效果和插件的集合。根据所需模型的复杂性,生成模型文件可能很困难。此页面将提供一些有关如何构建模型的提示。

    • 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/插件:插件是第三方创建的、用于控制模型的共享库。

    三、构建模型

    3.1 收集网格文件

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

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

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

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

    • Collada和OBJ文件格式允许您将材质附加到网格上。使用这个机制可以改善网格的视觉外观

    • 请让网格尽可能简单。如果想将网格用作碰撞元素,则尤其如此。通常的做法是将少边的多边形网格用于碰撞元素,而将更多边的多边形网格用于视觉元素。一个甚至更好的做法就是使用内置形状之一(盒子、球体、圆柱体)作为碰撞元素

    3.2 制作模型SDF文件

    • 开始时创建一个非常简单的模型文件,或者复制一个现有的模型文件。这里的关键是从您知道可以正常运行的模型文件开始,或者可以很容易地进行调试。

    • 下面要制作的是一个非常初级的、最小的盒子模型文件,只有一个单位尺寸的盒子形状作为碰撞几何体,且具有单位惯性的相同单位盒子视觉元素。

    • 请用以下命令创建box.sdf模型文件:

    gedit box.sdf
    
    • 将以下内容复制到box.sdf文件中:
    1. <sdf version="1.4">
    2. <model name="my_model">
    3. <pose>0 0 0.5 0 0 0pose>
    4. <static>truestatic>
    5. <link name="link">
    6. <inertial>
    7. <mass>1.0mass>
    8. <inertia>
    9. <ixx>0.083ixx>
    10. <ixy>0.0ixy>
    11. <ixz>0.0ixz>
    12. <iyy>0.083iyy>
    13. <iyz>0.0iyz>
    14. <izz>0.083izz>
    15. inertia>
    16. inertial>
    17. <collision name="collision">
    18. <geometry>
    19. <box>
    20. <size>1 1 1size>
    21. box>
    22. geometry>
    23. collision>
    24. <visual name="visual">
    25. <geometry>
    26. <box>
    27. <size>1 1 1size>
    28. box>
    29. geometry>
    30. visual>
    31. link>
    32. model>
    33. sdf>
    • 请注意,Box几何体的原点位于盒子的几何中心,因此,为了使盒子的底部与地面齐平,添加了一个属性值为 0 0 0.5 0 0 0 的原点位置元素以将该盒子提高到地平面上。

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

    3.3 向模型SDF文件添加内容

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

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

    • 添加一个链接

    • 设置碰撞元素

    • 设置视觉元素

    • 设置惯性属性

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

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

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

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

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

    参考:

  • 相关阅读:
    MySQL的安装与卸载
    一篇文章让你彻底掌握 shell 语言
    win11家庭版安装Docker启动一直Starting the Docker Engine...
    提升VR全景摄影画质的8个因素
    Java 大厂面试 —— 常见集合篇 List HashMap 红黑树
    c++ 学习 之 运算符重载
    4.3.4-Testing_for_Account_Enumeration_and_Guessable_User_Account
    【苹果群发】iMessage苹果推字符串访问权限,而我们在SSL推杆证书中的步骤相同
    (一)Linux环境的学习环境的搭建
    Linux 基本指令(下)
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126304702