系列文章目录
前言
英文 | 中文 |
---|---|
link | 刚体 |
joint | 关节 |
frame | 坐标系 |
identity element | 单位元(加法为 0) |
一、robot
1.1 <robot> 元素
机器人描述文件的根元素必须是 robot ,所有其他元素都必须封装在其中。
1.2 元素
1.3 属性
name
主文件必须有 name 属性。在包含文件中,name 属性是可选的。如果在附加的包含文件中指定了属性名称,其值必须与主文件中的相同。
1.4 示例
XML
<robot name="pr2">
<!-- pr2 robot links and joints and more -->
</robot>
二、link
2.1 <link> 元素
link 元素描述了一个具有惯量(inertia)、视觉特征(visual features)和碰撞属性(collision properties)的刚体(rigid body)。
下面是一个 link元素的示例:
XML
<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>
2.2 属性
name(必需)
刚体(link)本身的名称。
2.3 元素
2.3.1 <inertial>(可选:如果未指定,默认质量为零,惯量为零)
刚体(link)的质量、质心位置和中心惯量特性。
2.3.1.1 <origin>(可选:如未指定,默认为单位元)
这个姿态(平移、旋转)描述了刚体(link)的质心坐标系(center of mass frame) C 相对于刚体(link)坐标系 L 的位置和方向。
xyz(可选:默认为 0 向量)
表示从 Lo(刚体坐标系原点)到 Co(刚体质量中心)的位置矢量为 x L̂x + y L̂y + z L̂z,其中 L̂x、L̂y、L̂z 为链接框架 L 的正交单位矢量。
rpy(可选:如果未指定,默认为单位元)
表示质心坐标系 C 的单位矢量 Ĉx、Ĉy、Ĉz 相对于刚体坐标系 L 的方向,是以弧度为单位的欧拉旋转序列 (r p y)。注意: Ĉx、Ĉy、Ĉz 不需要与刚体的惯性主轴对齐。
2.3.1.2 <mass>
刚体的质量由该元素的 value 属性表示
2.3.1.3 <inertia>
固定在质心坐标系 C 中的单位向量Ĉx、Ĉy、Ĉz 相对于 Co(刚体质心)的惯性矩 ixx、iyy、izz 和惯性积 ixy、ixz、iyz。
注意:Ĉx、Ĉy、Ĉz 相对于 L̂x、L̂y、L̂z 的方向由 <origin> 标签中的 rpy 值指定。一些原始形状的属性 ixx、ixy、ixz、iyy、iyz、izz 在这里。URDF 假定惯性积为负值(更多信息,请参阅有关使用 CAD 工具的 MathWorks 文档)。要避免与惯性积负号约定相关的兼容性问题,最简单的方法是将Ĉx、Ĉy、Ĉz 与主惯性方向对齐,使所有惯性积为零。
2.3.2 <visual>(可选)
刚体(link)的可视化属性。该元素用于指定对象的形状(方框、圆柱等),以便实现可视化。注意:同一刚体(link)可存在多个 <visual> 标记实例。它们定义的几何形状的组合构成了刚体(link)的可视化表示。
2.3.2.1 name**(可选)**
指定刚体几何体部分的名称。这对引用刚体几何图形的特定的位非常有用。
2.3.2.2 <origin>(可选:如未指定,默认为单位元)
visual 元素相对于刚体参照系的参照系。
xyz(可选:默认为 0 向量)
表示 x、y、z 偏移量。
rpy(可选:如果未指定,默认为单位元)
表示以弧度为单位的固定轴滚动角、俯仰角和偏航角。
2.3.2.3 <geometry>
视觉对象的形状。可以是以下形状之一:
<box>
size 属性包含方框的三个边长。方框的原点位于其中心。
<cylinder>
指定半径和长度。圆柱体的原点位于其中心。
<sphere>
指定半径。球体的原点位于其中心。
2.3.2.4 <mesh>
由文件名和可选的缩放比例指定的 trimesh 元素,缩放比例用于缩放网格的轴对齐包围盒。任何几何体格式都可接受,但具体应用的兼容性取决于实施情况。为获得最佳纹理和颜色支持,推荐使用 Collada .dae 文件格式。网格文件不会在引用同一模型的机器之间传输。它必须是本地文件。在文件名前加上 package://<packageagename>/<path>,使网格文件的路径相对于软件包 <packageagename>。
2.3.2.5 <material>
视觉元素的材质。可以在 "link "对象之外的顶层 "robot "元素中指定材质元素。在 link 元素中,您可以通过名称来引用材料。
name
材料名称
<color>
rgba 材料的颜色,由代表红/绿/蓝/阿尔法的四个数字组成,每个数字的范围为 [0,1]。
<texture>
材料的纹理由文件名指定
2.3.4 <collision>
刚体的碰撞属性。请注意,这可能与刚体的视觉属性不同,例如,为了减少计算时间,通常会使用更简单的碰撞模型。注意:同一刚体可以存在多个 <collision> 标记实例。它们定义的几何体的组合构成了刚体的碰撞表示。
2.3.4.1 name
指定刚体几何体部分的名称。这对引用刚体几何图形的特定的位非常有用。
2.3.4.2 <origin>
碰撞元素相对于刚体参照系的参照系。
xyz(可选:默认为 0 向量)
表示 x、y、z 偏移量。
rpy(可选:如果未指定,默认为单位元)
表示以弧度为单位的固定轴滚动角、俯仰角和偏航角。
2.3.4.3 <geometry>
参见上述视觉元素中的几何描述。
2.4 推荐的网格分辨率
在使用 ROS 运动规划软件包进行碰撞检测时,建议在 URDF 中添加的碰撞网格每个链接的面数越少越好(最好少于 1000 个)。如果可能,我们鼓励使用其他基元近似网格。
2.5 多碰撞体
会议决定,URDF 不应支持多组碰撞体,尽管有时会有这方面的应用。URDF 仅用于表示机器人的实际属性,而不是用于控制器碰撞检查等外部用途的碰撞。在 URDF 中,<visual> 元素应尽可能与真实机器人保持一致,而 <collision> 元素则应与真实机器人接近,尽管网格中的三角形数量要少得多。
如果您确实需要更粗粒度、更大尺寸的碰撞几何图形来进行碰撞检查和控制器等操作,您可以将这些网格/几何图形移动到自定义 XML 元素中。例如,如果您的控制器需要一些特殊的粗糙碰撞检查几何体,您可以在 <collision> 元素后添加 <collision_checking> 标签:
XML
<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 来获取这些信息。
三、Joint
3.1 <Joint> 元素
关节元素描述了关节的运动学和动力学特性,还规定了关节的安全限制。
下面是一个关节元素的示例:
XML
<joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>
3.2 属性
关节元素有两个属性:
name(必填)
指定接头的唯一名称
type(必填)
指定关节类型,其中类型可以是以下之一:
revolute - 沿轴线旋转的铰链接头,其范围由上下限指定。
continuous - 一种绕轴旋转的连续铰链接头,没有上下限。
prismatic - 沿轴线滑动的滑动接头,其范围受上下限的限制。
fixed - 这不是真正意义上的关节,因为它不能移动。所有自由度都被锁定。这种关节不需要 <axis>、<calibration>、<dynamics>、<limits> 或 <safety_controller>。
floating - 这种关节允许所有 6 个自由度的运动。
planar - 这种关节允许在垂直于轴的平面内运动。
3.3 元素
joint 元素包含以下元素:
3.3.1 <origin> (可选:如果未指定,默认为 identity)
这是从父刚体(link)到子刚体(link)的转换。如上图所示,关节点位于子刚体(link)的原点。
xyz(可选:默认为零向量)
代表 x、y、z 偏移量。所有位置的单位都是米。
rpy(可选:默认为零向量)
代表绕固定轴的旋转:首先绕 x 轴旋转,然后绕 y 轴旋转,最后绕 z 轴旋转。
3.3.2 <parent>(必填)
带有强制属性的父刚体(link)名称:
link
该刚体(link)在机器人树结构中的父刚体(link)名称。
3.3.3 <child>(必填)
带有强制属性的子刚体(link)名称:
link
作为子刚体(link)的刚体(link)名称。
3.3.4 <axis>(可选:默认为(1,0,0)
关节坐标系中指定的关节轴。对于旋转关节,这是旋转轴;对于棱柱关节,这是平移轴;对于平面关节,这是表面法线。轴在关节参考坐标系中指定。固定关节和浮动关节不使用轴字段。
xyz(必填)
代表矢量的(x、y、z)分量。矢量应进行归一化处理。
3.3.5 <calinration>(可选)
关节的参考位置,用于校准关节的绝对位置。
rising(可选)
当关节向正方向移动时,该参考位置将触发一个上升沿。
falling(可选)
当关节向正方向移动时,该参考位置将触发下降沿。
3.3.6 <dynamics>(可选)
指定关节物理属性的元素。这些值用于指定关节的建模属性,对仿真特别有用。
damping(可选,默认为 0)
关节的物理阻尼值(对于棱柱关节,单位为牛顿-秒/米[N∙s/m];对于旋转关节,单位为牛顿-米-秒/弧度[N∙m∙s/rad])。
friction(可选,默认为 0)
关节的物理静摩擦力值(对于棱柱形关节,单位为牛顿[N];对于反卷形关节,单位为牛顿-米[N∙m])。
3.3.7 <limit>(仅外旋式和棱柱式接头需要)
元素可包含以下属性:
lower (可选,默认为 0)
指定关节下限的属性(对于旋转关节,单位为弧度;对于棱柱关节,单位为米)。如果关节是连续的,则省略。
upper (可选,默认为 0)
指定关节上限的属性(对于旋转关节以弧度为单位,对于棱柱关节以米为单位)。如果关节是连续的,则省略。
effort(必填)
用于执行最大关节力的属性(|applied effort| < |effort|)。请参阅安全限制。
velocity(必填)
用于执行最大关节速度的属性(对于旋转关节,单位为弧度/秒 [rad/s];对于棱柱关节,单位为米/秒 [m/s])。请参阅安全限制。
3.3.8 <mimic>(可选)(ROS Groovy 的新功能,参见问题)
该标签用于指定已定义的关节模仿另一个现有关节。该关节的值可计算为:value = multiplier * other_joint_value + offset。
预期和可选属性:
joint(必填)
指定要模仿的关节名称。
multiplier(可选)
指定上述公式中的乘法因子。
offset(可选)
指定在上述公式中添加的偏移量。默认值为 0(外旋关节为弧度,棱柱关节为米)
<safety_controller>(可选)
元素可包含以下属性:
soft_lower_limit (可选,默认为 0)
指定安全控制器开始限制关节位置的下关节边界的属性。该限制必须大于关节下限(见上文)。更多详情,请参阅安全限制。
soft_upper_limit (可选,默认为 0)
指定接头上限边界的属性,安全控制器从此处开始限制接头位置。该限制必须小于关节上限(见上文)。详情请参阅安全限制。
k_position(可选,默认为 0)
指定位置和速度限制之间关系的属性。详情请参阅安全限值。
k_velocity (必填)
指定力度和速度限制之间关系的属性。详情请参阅安全限制。
四、model
统一机器人描述格式(URDF)是一种描述机器人的 XML 规范。我们试图尽可能保持该规范的通用性,但该规范显然无法描述所有机器人。目前的主要限制是只能表示树形结构,排除了所有并联机器人。此外,本规范假定机器人由通过关节连接的刚性连接组成;不支持柔性元素。规范包括
- 机器人的运动学和动力学描述
- 机器人的可视化表示
- 机器人的碰撞模型
机器人的描述由一组刚体(link)元素和一组将刚体(link)连接在一起的关节元素组成。因此,典型的机器人描述是这样的
XML
<?xml version="1.0"?>
<?xml-model href="https://raw.githubusercontent.com/ros/urdfdom/master/xsd/urdf.xsd" ?>
<robot name="pr2" xmlns="http://www.ros.org">
<link> ... </link>
<link> ... </link>
<link> ... </link>
<joint> .... </joint>
<joint> .... </joint>
<joint> .... </joint>
</robot>
可以看到,URDF 格式的根元素是 <robot> 元素。
五、常见几何体的惯量矩阵
描述 | 图形 | 惯量张量矩 |
---|---|---|
实心球,半径为r ,质量为m | ||
空心球,半径为r ,质量为m | ||
实心椭球,半轴为a 、b 、c ,质量为m | ||
圆锥,半径为r ,高为h ,质量为m | ||
实心长方体,高为h ,宽为w ,长为d ,质量为m | ||
端点绕y 轴旋转的细棒,长为l ,质量为m | ||
中心绕y 轴旋转的细棒,长为l ,质量为m | ||
实心圆柱,半径为r ,高为h ,质量为m | ||
两端开通的厚圆柱,内半径为r 1,外半径为r 2,高为h ,质量为m |