URDF - 通用机器人描述格式 - XML 规范

系列文章目录


前言

英文 中文
link 刚体
joint 关节
frame 坐标系
identity element 单位元(加法为 0)


一、robot

1.1 <robot> 元素

机器人描述文件的根元素必须是 robot ,所有其他元素都必须封装在其中。

1.2 元素

1.3 属性

name

主文件必须有 name 属性。在包含文件中,name 属性是可选的。如果在附加的包含文件中指定了属性名称,其值必须与主文件中的相同。

1.4 示例

<robot name="pr2">
  <!-- pr2 robot links and joints and more -->
</robot>

二、link

2.1 <link> 元素

link 元素描述了一个具有惯量(inertia)、视觉特征(visual features)和碰撞属性(collision properties)的刚体(rigid body)。

下面是一个 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>

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> 标签:

  <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> 元素

关节元素描述了关节的运动学和动力学特性,还规定了关节的安全限制。

下面是一个关节元素的示例:

 <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 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 $I=\left[\begin{array}{c c c}{​{​{\frac{2}{5}}m r^{2}}}&{​{0}}&{​{0}}\\ {​{0}}&{​{​{\frac{2}{5}}m r^{2}}}&{​{0}}\\ {​{0}}&{​{0}}&{​{​{\frac{2}{5}}m r^{2}}}\end{array}\right]$
空心球,半径为r,质量为m

$I=\left[\begin{array}{c c c}{​{​{\frac{2}{3}}m r^{2}}}&{​{0}}&{​{0}}\\ {​{0}}&{​{​{\frac{2}{3}}m r^{2}}}&{​{0}}\\ {​{0}}&{​{0}}&{​{​{\frac{2}{3}}m r^{2}}}\end{array}\right]$

实心椭球,半轴为abc,质量为m $I=\left[\begin{array}{c c c}{​{​{\frac{1}{5}}m (b^2+c^2)}}&{​{0}}&{​{0}}\\ {​{0}}&{​{​{\frac{1}{5}}m (a^2+c^2)}}&{​{0}}\\ {​{0}}&{​{0}}&{​{​{\frac{1}{5}}m (a^2+b^2)}}\end{array}\right]$
圆锥,半径为r,高为h,质量为m
实心长方体,高为h,宽为w,长为d,质量为m
端点绕y轴旋转的细棒,长为l,质量为m

$I=\left[\begin{array}{c c c}{​{\frac{1}{3}m l^{2}}}&{​{0}}&{​{0}}\\ {​{0}}&{​{0}}&{​{0}}\\ {​{0}}&{​{0}}&{​{\frac{1}{3}m l^{2}}}\end{array}\right]$

中心绕y轴旋转的细棒,长为l,质量为m

$I=\left[\begin{array}{c c c}{​{\frac{1}{12}m l^{2}}}&{​{0}}&{​{0}}\\ {​{0}}&{​{0}}&{​{0}}\\ {​{0}}&{​{0}}&{​{\frac{1}{12}m l^{2}}}\end{array}\right]$

实心圆柱,半径为r,高为h,质量为m

$I=\left[\begin{array}{c c c}{​{\frac{1}{12}m(3r^{2}+h^{2})}}&{​{0}}&{​{0}}\\ {​{0}}&{​{\frac{1}{12}m(3r^{2}+h^{2})}}&{​{0}}\\ {​{0}}&{​{0}}&{​{\frac{1}{2}m r^{2}}}\end{array}\right]$

两端开通的厚圆柱,内半径为r1,外半径为r2,高为h,质量为m $I=\left[\begin{array}{c c c}{​{\frac{1}{12}m(3(r_{1}^{2}+r_{2}^{2})+h^{2})}}&{​{0}}&{​{0}}\\ {​{0}}&{​{\frac{1}{12}m(3(r_{1}^{2}+r_{2}^{2})+h^{2})}}&0\\ 0& 0&{​{\frac{1}{2}m({r_{1}^{2}+r_{2}^{2}})}}\end{array}\right]$

相关推荐

  1. UR5 机器人 URDF 代码阅读

    2024-01-02 11:02:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 11:02:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 11:02:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 11:02:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 11:02:02       20 阅读

热门阅读

  1. 基于SpringBoot的家具商城设计与实现

    2024-01-02 11:02:02       38 阅读
  2. 排序算法——快速排序

    2024-01-02 11:02:02       41 阅读
  3. 数据预处理:标准化和归一化

    2024-01-02 11:02:02       38 阅读
  4. 机器学习中字符特征的处理方式

    2024-01-02 11:02:02       40 阅读
  5. c 生成16×16个像素点的rgb图片并转为yuv420P 格式

    2024-01-02 11:02:02       30 阅读
  6. MATLAB --- fullfile()函数的用法

    2024-01-02 11:02:02       41 阅读
  7. LeetCode 224:基本计算器

    2024-01-02 11:02:02       40 阅读
  8. LeetCode 热题 100——283. 移动零

    2024-01-02 11:02:02       42 阅读
  9. mysqldump导出函数、存储过程和视图

    2024-01-02 11:02:02       47 阅读
  10. 【排序算法】LeetCode-347. 前 K 个高频元素

    2024-01-02 11:02:02       34 阅读
  11. 系统监视工具 | htop

    2024-01-02 11:02:02       35 阅读
  12. Linux Shell 021-输入输出重定向

    2024-01-02 11:02:02       40 阅读
  13. 概率论基础

    2024-01-02 11:02:02       25 阅读