10. URDF XML规程
10.1 robot
元素robot用于描述机器人的所有属性。
10.1.1 <robot>元素
在一个机器人的描述文件中,根元素必须是<robot>元素,所有其它元素都必须封装在<robot>元素之内。
10.1.2 子元素
<robot>主要有以下子元素:
<link>元素:用于定义具有其自身坐标系的链接。
<joint>元素:用于定义强制性关节坐标系。
<transmission>元素:专用于PR2机器人。
<gazebo>元素:Gazebo仿真扩展。
10.1.3 属性
Name属性:主文件中必须有name属性。在包含文件中name属性是可选的。如果在额外的包含文件中指定了属性name,则其值必须与主文件中的name属性值相同。
10.1.4 示例
<robot name="pr2">
<!-- pr2 robot links and joints and more -->
</robot>
10.2 link
元素link用于描述链接的运动学和动力学属性。
10.2.1 <link>元素
<link>元素用于描述具有惯性、视觉特征和碰撞属性的刚体。
下面是一个<link>元素的示例:
<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>
10.2.2 属性
Name属性(必须有):用于指定链接本身的名称。
10.2.3 子元素
<link>元素的子元素有<inertial>、<visual>和<collision>。
1、<inertial>元素
可选子元素,用于指定某个链接的惯性属性。如果未指定该子元素,则默认情况下该链接的mass和inertia子元素值均为0。该子元素又包括以下3个子元素:
(1)<origin>子元素
可选子元素,用于指定该惯性的原点,即相对于链接参考坐标系,该惯性参考坐标系的位姿。如果未指定,则默认与链接的原点相同。惯性参考坐标系的原点必须位于重心处。惯性参考坐标系的轴不必与惯性的主轴对齐。
该元素可以用以下两个子元素来描述:
①xyz
可选子元素,用于表达惯性参考坐标系原点对链接参考坐标系原点在xyz三个轴上的偏移量,默认为0向量。
②rpy
可选子元素,用于表达惯性绕xyz三个固定轴的旋转角度即横滚角(roll)、俯仰角(pitch)和偏航角(yaw),单位为弧度。如果未指定该子元素的值,则默认情况下为0向量,即不绕三个轴旋转或与链接参考坐标系的三个轴方向相同。
(2)<mass>子元素
此子元素的value属性用于表示链接的质量大小。
(3)<inertia>子元素
以惯性表示的3×3转动惯性矩阵。由于转动惯性矩阵是对称的,所以这里只指定了此矩阵对角线之上的6个元素,用属性ixx、ixy、ixz、iyy、iyz、izz来表示。一些原始形状的惯性矩阵可以在此处找到。
2、<visual>元素
可选子元素,用于指定链接的视觉属性。此元素为可视化目的指定物体的形状(方盒、圆柱体、球体等)。注意:同一链接可以有多个<visual>标签实例。这些标签实例定义的几何体的并集构成了该链接的视觉表示。
<visual>元素可以用可选属性name来指定链接几何体某个部分的名称,这对于引用链接几何体的特定部分非常有用。
<visual>元素包括以下3个子元素:
(1)<origin>子元素
可选子元素,用于指定该视觉的原点,即相对于链接参考坐标系,该视觉参考坐标系的位姿。如果未指定,则默认与链接的原点相同。
该元素可以用以下两个子元素来描述:
①xyz
可选子元素,用于表达视觉参考坐标系原点对链接参考坐标系原点在xyz三个轴上的偏移量,默认为0向量。
②rpy
可选子元素,用于表达视觉绕xyz三个固定轴的旋转角度即横滚角(roll)、俯仰角(pitch)和偏航角(yaw),单位为弧度。如果未指定该子元素的值,则默认情况下为0向量,即不绕三个轴旋转或与链接参考坐标系的三个轴方向相同。
(2)<geometry>子元素
此子元素是必须有的,用于指定视觉对象的形状,可以用以下4个子元素之一来指定:
①<box>
视觉对象形状为方盒(长方体)时使用此子元素,其属性size用于指定方盒三条边(长、宽、高)的长度,方盒的原点位于其中心点处。
②<cylinder>
视觉对象形状为圆柱体时使用此子元素,其属性radius和length用于指定圆柱体的圆形截面半径和圆柱体的长度。圆柱体的原点位于其中心点处。
③<sphere>
视觉对象形状为球体时使用此子元素,其属性radius用于指定球体的半径。球体的原点位于其中心点处。
④<mesh>
由一个filename和一个可选的scale指定的三角网格(trimesh)元素,其中scale会缩放网格的轴以使其与边界框对齐。可以接受任何几何格式,但具体的应用程序兼容性取决于具体实现。最佳纹理和颜色支持的推荐格式是Collada的.dae文件。网格文件不能在引用相同模型的不同机器之间进行传输,即网格文件必须是本地文件。在网格文件名之前加上package://<packagename>/<path>来设置该网格文件相对于软件包<packagename>的路径。
(3)<material>子元素
可选子元素,用于指定视觉元素的材质。允许在顶层<robot>元素中、<link>元素外指定材质元素。这样就可以在某个链接元素中以该材质元素的名称来引用。其name属性用于指定材质的名称。
该子元素又可以包括以下2个子元素:
①<color>
可选子元素,此子元素的rgba属性用代表红/绿/蓝/alpha颜色通道的四个数值集合来指定材质的颜色,这四个数值的范围均为[0,1]。
②<texture>
可选子元素,通过一个filename属性来指定某种材质的纹理。
3、<collision>元素
可选子元素,用于指定链接的碰撞属性。请注意,某个链接的碰撞属性可能会与其视觉属性不同,例如,通常使用更简单的碰撞模型来减少计算时间。注意:同一链接可以有多个<collision>标签实例,这些标签实例定义的几何体的并集构成了该链接的碰撞表示。
<collision>元素可以用可选属性name来指定链接几何体某个部分的名称,这对于引用链接几何体的特定部分非常有用。
<collision>元素包括以下2个子元素:
(1)<origin>子元素
可选子元素,用于指定该碰撞元素的原点,即相对于链接参考坐标系,该碰撞元素参考坐标系的位姿。如果未指定,则默认与链接的原点相同。
该元素可以用以下两个子元素来描述:
①xyz
可选子元素,用于表达碰撞元素参考坐标系原点对链接参考坐标系原点在xyz三个轴上的偏移量,默认为0向量。
②rpy
可选子元素,用于表达碰撞元素绕xyz三个固定轴的旋转角度即横滚角(roll)、俯仰角(pitch)和偏航角(yaw),单位为弧度。如果未指定该子元素的值,则默认情况下为0向量,即不绕三个轴旋转或与链接参考坐标系的三个轴方向相同。
(2)<geomery>子元素
与<visual>元素的相同,因此请参见上面<visual>元素中的<geometry>子元素说明。
10.2.4 推荐的网格分辨率
● 为了使用ROS运动规划(motion planning)软件包进行碰撞检测,推荐每个链接在URDF中的碰撞网格使用尽可能少的面(最好小于1000)。如果可能,鼓励使用其它原始形状(方盒、圆柱体、球体)来近似网格。
10.2.5 多碰撞体
URDF决定不支持多组碰撞体,即使有时会有这样的应用。URDF的目的仅在于表示实际机器人的属性,而不是为了表示用于诸如控制器碰撞检测等外部事物的碰撞。在URDF中,<visual>元素应该尽可能精确表达真实机器人,而<collision>元素则仍应该是真实机器人的一种近似,尽管在网格中的三角形要少得多。
如果您确实需要用于诸如碰撞检测和控制器之类的粗粒度、超大的碰撞几何体,则可以将这些网格/几何体移至自定义的XML元素中。例如,若您的控制器需要一些特殊的粗略碰撞检测几何体,则可以在<collision>元素之后添加<collision_checking>标签,如下所示:
<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>
URDF会忽略这些自定义元素,如“collision_checking”,而您的具体程序则可以解析XML本身以获取此信息。
评论(0)
您还未登录,请登录后发表或查看评论