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

系列文章目录


前言

英文 中文
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>

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)名称。

3.3.3 <child>(必填)

带有强制属性的子刚体(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
实心椭球,半轴为abc ,质量为m
圆锥,半径为r ,高为h ,质量为m
实心长方体,高为h ,宽为w ,长为d ,质量为m
端点绕y 轴旋转的细棒,长为l ,质量为m
中心绕y 轴旋转的细棒,长为l ,质量为m
实心圆柱,半径为r ,高为h ,质量为m
两端开通的厚圆柱,内半径为r 1,外半径为r 2,高为h ,质量为m
相关推荐
禁默17 分钟前
第六届机器人、智能控制与人工智能国际学术会议(RICAI 2024)
人工智能·机器人·智能控制
火山口车神丶2 小时前
某车企ASW面试笔试题
c++·matlab
今天吃饺子3 小时前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
Robot25114 小时前
Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速
人工智能·机器人·微信公众平台
Evand J15 小时前
集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
matlab·平面·目标跟踪
FreeIPCC17 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
地平线开发者19 小时前
CPU& 内存加压工具 stress-ng 介绍
算法·自动驾驶
施努卡机器视觉20 小时前
电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现
运维·机器人·自动化
我是博博啦20 小时前
matlab例题
人工智能·算法·matlab
2402_8713219521 小时前
MATLAB方程组
gpt·学习·线性代数·算法·matlab