Unified Robotics Description Format(机器人统一描述格式--学习记录)

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 Cjoint 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 Blink C, 连接通过两个关节, 命名为joint Ajoint B<parent><child>关节的元素确定链接连接方式:link A连接到link B ,link B连接到link Clink A没有父链接-即, 它仅作为子元素出现在<joint>元素中, 因此是根链接。

link A<inertial>元素定义了链路的惯性 (ixxiyyizz) 的质量和力矩。惯性产品 (ixy、 ixziyz) 未指定, 且 URDF 默认值为零。link Avisual元素定义了用于模型可视化的几何类型和材料颜色。这种情况下的几何是一个框, 宽度和厚度为0.5米, 高度为0.1米。链接<inertial><visual><origin>元素指定从链接参考框架到惯性和可视参考帧的转换。相似的元素适用于link Blink 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 出口商。在使用复杂的机器人模型时, 请考虑这些选项, 这可能不是手工创建的简单方法。

另见

smimport

相关主题

参看网址:https://ww2.mathworks.cn/help/physmod/sm/ug/urdf-model-import.html

猜你喜欢

转载自blog.csdn.net/weixin_39090239/article/details/82083178