URDF 入门
什么是 URDF?
URDF, 或统一的机器人描述格式, 是一个 XML 规范用于学术界和工业界的模型多体系统, 如机器人机械手武器制造装配线和仿真机器人的游乐园。URDF 是特别受欢迎的 ROS, 或机器人操作系统的用户-一个框架, 为 URDF 模型提供标准支持。您可以将 URDF 模型导入到Simscape™ Multibody™环境中, 例如, 用于模拟、分析和控制设计任务。见人形机器人的典型例子为一个简单的用例。
仿人机器人 URDF 模型
URDF 文件中有什么?
与其他类型的 xml 文件一样, URDF 文件包含各种 xml 元素, 如<robot>
、 <link>
、 <joint>
、嵌套在称为 XML 树的分层结构中。例如, <link>
和<joint>
元素据说是<robot>
元素的孩子, 并相互, <robot>
元素的<link>
的父母和<joint>
元素。
<robot>
<link>
...
</link>
<link>
...
</link>
<joint>
...
</joint>
</robot>
子元素, 如<link>
和<joint>
在<robot>
下, 可以反过来有自己的子元素。例如, <link>
元素有子元素<inertial>
和<visual>
。<visual>
元素有子元素<geometry>
和<material>
。<material>
元素有子元素<color>
。此类子元素链对于定义父元素的属性和行为至关重要。
<robot>
<link>
<inertial>
...
</inertial>
<visual>
<geometry>
...
</geometry>
<material>
<color />
</material>
</visual>
</link>
...
</robot>
除了子元素之外, URDF 模型中的 XML 元素还可以具有属性。例如, <robot>
, <link>
, 和<joint>
元素都有属性<name>
-一个字符串, 用来标识元素。<color>
元素具有属性rgba
--带有链接颜色的红色、绿色、蓝色和 alpha (或不透明度) 值的数字数组。这些属性帮助完全定义模型中的元素。
<robot name = "linkage">
<link name = "root link">
<inertial>
...
</inertial>
<visual>
<geometry>
...
</geometry>
<material>
<color rgba = "1 0 0 1" />
</material>
</visual>
</link>
...
</robot>
XML 层次结构和运动学树
URDF 链接通过分层结构中的节点连接, 而不像通过在 URDF 文件中嵌套 XML 元素而形成的。<joint>
元素通过<parent>
和<child>
元素来强制执行这些层次结构, 它将标识一个链接作为父级, 另一个作为子项。父链接本身也可以是子级链接, 而子节点则是模型中其他链接的家长。
<parent>
和<child>
联合元素
<robot name = "linkage">
<joint name = "joint A ... >
<parent link = "link A" />
<child link = "link B" />
</joint>
<joint name = "joint B ... >
<parent link = "link A" />
<child link = "link C" />
</joint>
<joint name = "joint C ... >
<parent link = "link C" />
<child link = "link D" />
</joint>
</robot>
您可以使用称为连接关系图的示意图来可视化链接之间的连接。这个数字显示了一个例子。圆圈表示链接, 箭头表示关节。箭头根标识父节点, 箭头提示子节点。连通图揭示了底层模型的拓扑结构-这里是一个具有两个分支的简单运动树。
运动树的连通图
模型拓扑在 URDF 中很重要。模型的连通图只能以运动树的形状为形式, 即运动链, 分支或不分枝, 总是开放的。运动回路, 每一个封闭链组成的连接两端的另一开放链, 是不允许的。此限制会影响<link>
元素在 URDF 模型中的连接方式。
该限制转换为以下规则: no <link>
元素可作为多个<joint>
元素中的子节点。换句话说, 没有<link>
元素可以在模型的连接图中有多个父元素。只有根链接 (在连接关系图的起始处) 可以有许多不同于一个 (零) 的父节点。模型中只允许有一个根链接。
运动回路 URDF 例
<robot name = "linkage">
<joint name = "joint A ... >
<parent link = "link A" />
<child link = "link B" />
</joint>
<joint name = "joint B ... >
<parent link = "link A" />
<child link = "link C" />
</joint>
<joint name = "joint C ... >
<parent link = "link C" />
<child link = "link D" />
</joint>
<joint name = "joint D ... >
<parent link = "link B" />
<child link = "link D" />
</joint>
</robot>
该代码在两个<joint>
元素、联合joint C
和joint D
中声明链接link D
, 作为子节点。link D
元素有两个父级, 形成一个运动回路。该模型违反了 URDF 连接规则, 并且无效。图中显示了模型的连通关系图。
运动回路的连通图
必需的和可选的 URDF 实体
并非 URDF 规范中列出的所有元素和属性都是必需的。一些, 如<inertial>
在<link>
, 是可选的。下面的代码演示可以使用的各种元素和属性, 以及可选的绿色颜色。
在可选元素中显示为必需的元素和属性仅在使用可选元素时才如此。可选属性的默认值以圆括号和斜体字体显示。请注意, 此代码仅作为引用包含, 并且它不表示有效的 URDF 模型。省略号 ("...") 在 URDF 模型中无效, 仅用于中断长行代码以便于查看。
<robot name>
<link name>
<inertial>
<origin xyz("0 0 0") rpy("0 0 0") />
<mass value />
<inertia ixx iyy izz ixy ixz iyz />
</inertial>
<visual name>
<origin xyz("0 0 0") rpy("0 0 0") />
<geometry>
<box size />
<cylinder radius length />
<sphere radius />
<mesh filename scale("1") />
</geometry>
<material name>
<color rgba("0.5 0.5 0.5 1") />
<texture filename />
</material>
</visual>
<collision name>
<origin xyz("0 0 0") rpy("0 0 0") />
<geometry>
<box size />
<cylinder radius length />
<sphere radius />
<mesh filename scale("1") />
</geometry>
</collision>
</link>
<joint name type>
<origin xyz("0 0 0") rpy("0 0 0") />
<parent link />
<child link />
<axis xyz("1 0 0") />
<calibration rising />
<calibration falling />
<dynamics damping("0") friction("0") />
<limit† lower† upper† effort velocity />
<mimic joint multiplier("1") offset("0") />
<safety_controller soft_lower_limit("0") ...
... soft_upper_limit("0") k_position("0") k_velocity("0") />
</joint>
</robot>
†<joint>
type
prismatic
和外卷的元素revolute
所需的。
创建简单的 URDF 模型
例如, 创建一个双摆的 URDF 模型。在选择的文本编辑器中, 使用下面显示的代码创建一个文件, 并将该文件另存为double_pendulum.urdf
在一个方便的文件夹中。在文件名中包含文件扩展名。一个单独的示例演示如何将此模型导入Simscape多体环境 (请参阅导入简单 URDF 模型).
<robot name = "linkage">
<!-- links section -->>
<link name = "link A">
<inertial>
<origin xyz = "0 0 0" />
<mass value = "0.5" />
<inertia ixx = "0.5" iyy = "0.5" izz = "0.5"
ixy = "0" ixz = "0" iyz = "0" />
</inertial>
<visual>
<origin xyz = "0 0 0" />
<geometry>
<box size = "0.5 0.5 0.1" />
</geometry>
<material name = "gray A">
<color rgba = "0.1 0.1 0.1 1" />
</material>
</visual>
</link>
<link name = "link B">
<inertial>
<origin xyz = "0 0 -0.5" />
<mass value = "0.5" />
<inertia ixx = "0.5" iyy = "0.5" izz = "0.5"
ixy = "0" ixz = "0" iyz = "0" />
</inertial>
<visual>
<origin xyz = "0 0 -0.5" />
<geometry>
<cylinder radius = "0.05" length = "1" />
</geometry>
<material name = "gray B">
<color rgba = "0.3 0.3 0.3 1" />
</material>
</visual>
</link>
<link name = "link C">
<inertial>
<origin xyz = "0 0 -0.5" />
<mass value = "0.5" />
<inertia ixx = "0.5" iyy = "0.5" izz = "0.5"
ixy = "0" ixz = "0" iyz = "0" />
</inertial>
<visual>
<origin xyz = "0 0 -0.5" />
<geometry>
<cylinder radius = "0.05" length = "1" />
</geometry>
<material name = "gray C">
<color rgba = "0.5 0.5 0.5 1" />
</material>
</visual>
</link>
<!-- joints section -->>
<joint name = "joint A" type = "continuous">
<parent link = "link A" />
<child link = "link B" />
<origin xyz = "0 0 -0.05" />
<axis xyz = "0 1 0" />
</joint>
<joint name = "joint B" type = "continuous">
<parent link = "link B" />
<child link = "link C" />
<origin xyz = "0 0 -1" />
<axis xyz = "0 1 0" />
<dynamics damping ="0.002" />
</joint>
</robot>
关于 URDF 模型
该代码定义了一个名为 "linkage
" 的多体模型。该模型包含三链接, 命名的link A
,link B
和link C
, 连接通过两个关节, 命名为joint A
和joint B
。<parent>
和<child>
关节的元素确定链接连接方式:link A
连接到link B
,link B
连接到link C
。link A
没有父链接-即, 它仅作为子元素出现在<joint>
元素中, 因此是根链接。
link A
的<inertial>
元素定义了链路的惯性 (ixx
、iyy
、izz
) 的质量和力矩。惯性产品 (ixy
、 ixz
和iyz
) 未指定, 且 URDF 默认值为零。link A
的visual
元素定义了用于模型可视化的几何类型和材料颜色。这种情况下的几何是一个框, 宽度和厚度为0.5
米, 高度为0.1
米。链接<inertial>
和<visual>
的<origin>
元素指定从链接参考框架到惯性和可视参考帧的转换。相似的元素适用于link B
和link C
.
<joint>
元素的type
属性定义了关节为连续-一种不受运动限制的外卷接头。<origin>
元素指定连接相对于父链接元素的参照框架的位置。例如,joint A
的<origin>
元素偏移沿-Z
轴的联合0.05
m 相对于link A
的原点参照框架。嵌套在每个joint
元素内的axis
元素定义了连接的旋转轴, 作为笛卡尔向量[0, 1, 0]
或+Y
.
图中显示了模型的组件-链接和连接, 以及它们包含的各种帧。R表示一个链接参考框架, I 一个链路惯性框架, V 一个链接视觉框架。J 表示一个联合参考框架-按定义与子链接的参考框架相吻合。惯性和视觉帧被偏移到链接的中心和连接框架到他们的下边缘。
双摆模型组件
获取要导入的 URDF 模型
您可以, 但一般不必手动创建自己的 URDF 文件。对于更复杂的模型, 最好从其他源获取 URDF 文件。机器人制造商和顾问经常为他们的机器人系统提供 URDF 模型。CAD 应用程序, 如 SolidWorks®和 PTC®Creo™支持将 CAD 组件转换为 URDF 模型的 URDF 出口商。在使用复杂的机器人模型时, 请考虑这些选项, 这可能不是手工创建的简单方法。
另见
相关主题
参看网址:https://ww2.mathworks.cn/help/physmod/sm/ug/urdf-model-import.html