ROS2与Gazebo11入门教程-嵌套模型
说明:
- 介绍如何将一个模型嵌入到另一个模型中以创建模型集合
嵌套的模型
在“制作模型”一节教程中可以看到,模型SDF文件由链接和关节的集合组成。从SDF 1.5版开始,SDF的
元素已经扩展到支持自引用,这意味着允许嵌套 元素。Gazebo 7及后续版本均添加了对加载嵌套 元素的支持 下面是嵌套模型SDF文件的一个基本示例:
<sdf version="1.6">
<model name="model_00">
<pose>0 0 0.5 0 0 0</pose>
<link name="link_00">
<pose>0.0 0 0 0 0 0</pose>
<collision name="collision_00">
<geometry>
<sphere>
<radius>0.5</radius>
</sphere>
</geometry>
</collision>
<visual name="visual_00">
<geometry>
<sphere>
<radius>0.5</radius>
</sphere>
</geometry>
</visual>
</link>
<model name="model_01">
<pose>1.0 0 0.0 0 0 0</pose>
<link name="link_01">
<pose>0.25 0 0.0 0 0 0</pose>
<collision name="collision_01">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</collision>
<visual name="visual_01">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
</link>
</model>
</model>
</sdf>
该模型SDF由一个链接(link_00)和一个具有另一个链接(link_01)的嵌套模型(model_01)组成。
由于Gazebo中的模型只是一组对象的抽象容器,因此在Gazebo中加载该模型将会在物理引擎中仅创建两个刚体;一个刚体用于球形链接,而另一个刚体用于嵌套的盒子链接。
默认情况下,它们不会像同一模型中的其他链接那样自我碰撞。
在GUI客户端上,您将会看到一个球体和一个盒子并排放置,而且应该不会注意到嵌套模型和链接之间的任何视觉差异。
关节
- 也可以在嵌套模型的链接之间创建关节。下面是可以添加到上述模型SDF文件中的一个关节示例:
<joint name="joint_00" type="revolute">
<parent>link_00</parent>
<child>model_01::link_01</child>
<pose>0.0 0.0 0.0 0.0 0.0 0.0</pose>
<axis>
<xyz>1.0 0.0 0.0</xyz>
</axis>
</joint>
- 可以将该关节SDF元素添加到顶层元素或嵌套的
元素中。 然后就会在球体和盒子链接之间创建一个旋转关节。请注意该关节父级链接 和子级链接 名称的范围;对嵌套模型的链接的引用需要指定其范围,但顶层模型的链接其名称前缀可以不用加顶层模型名。
SDF文件中include元素的注意事项
嵌套模型的另一种方法就是在“向机器人添加传感器”一节教程中展示的方法,该方法主要是使用
元素来进行模型嵌套。 元素通过从被包含的模型中获取所有链接并将它们嵌入到父级模型中从而实现模型嵌套。该方法的缺点是在此过程中修改了模型表示,即保存世界文件将会导致模型的所有链接都合并到一个 元素中,而不会保留 标签。这是嵌套 元素旨在解决的缺点之一。 但从另一方面来看,
元素是一种简单干净的解决方案,只需要引用SDF文件即可创建模型集合。将来的工作将会研究对SDF文件嵌套 元素进行扩展以使其具有include元素的这个优点。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号