Universal Robotic Description Format Specification2 *Link*
本章是URDF系列第三章,介绍link element
1. link
The link element describes a rigid body with an inertia, visual features, and collision properties.
<link name="my_link">
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
</link>
link element,上面这个例子包含了视觉效果,质量属性, 碰撞属性。
注意:
(1). Attributes name in link element is required. The name of the link itself.
(2). inertial is optional and defaults to a zero mass and zero inertia if not specified.
(3). xyz defaults to zero vector and rpy defaults to identity if not specified, 与关节原点位置重合,旋转一致
(4). visual is optional, multiple instances of visual tags can exist for the same link.
(5). collision frame and inertial frame and visual frame is relative to the link reference frame, namely the joint frame.
(6). material == color, mesh == dae, stl, …3D mesh files.
2. Multiple Collision Bodies
It was decided that URDFs should not support multiple groups of collision bodies, even though there are sometimes applications for this. The URDF is intended to only represent the actual robot’s properties, and not collisions used for external things like controller collision checking. In a URDF, the elements should be as accurate as possible to the real robot, and the elements should still be a close approximation, albeit with far fewer triangles in the meshes.
If you do need courser-grain, over sized collision geometries for things like collision checking and controllers, you can move these meshes/geometries to custom XML elements. For example, if your controllers need some special rough collision checking geometry, you could add the tag <collision_checking> after the element:
<link name="torso">
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://robot_description/meshes/base_link.DAE"/>
</geometry>
</visual>
<collision>
<origin rpy="0 0 0" xyz="-0.065 0 0.0"/>
<geometry>
<mesh filename="package://robot_description/meshes/base_link_simple.DAE"/>
</geometry>
</collision>
<collision_checking>
<origin rpy="0 0 0" xyz="-0.065 0 0.0"/>
<geometry>
<cylinder length="0.7" radius="0.27"/>
</geometry>
</collision_checking>
<inertial>
...
</inertial>
</link>
NOTE: A URDF will ignore these custom elements like “collision_checking”, and your particular program can parse the XML itself to get this information.
也就是说 collision尽量简化, 对于更加粗粒度的碰撞检测,可以使用collision_checking elements,这个s代表任意其他,ros的urdf parser只会处理 inertial visual collision三个,即像collision_checking这种,需要你自己写的parser来识别提取这个element中的内容。