URDF学习(一)什么是URDF以及怎么理解一个URDF文件

226
0
2021年1月23日 09时26分

1.什么是URDF?
URDF全称(United Robotics Description Format)统一机器人描述格式,是一个XML语法框架下用来描述机器人的语言格式,URDF在ROS界很流行。我们可以

 

  1. 通过URDF对机器人建模然后放到ROS里面进行仿真与分析
  2. 把一个URDF文件转换成simscape模型,在Simulink里面进行仿真分析或者控制器设计。
  3. 把simscape模型转化成urdf格式

 

2.URDF文件长啥样?
URDF文件里面有着与XML语言格式。要定义好一个机器人,首先你得知道机器人有什么。一个机器人主要由连杆(link)和关节(joint)组成, URDF具有类似XML树状结构的,比如下面的例子:

 

<robot>
	<link>
		...
	</link>
	<link>
		...
	</link>
	<joint>
		...
	</joint>
</robot>

 

上面的 link 与 joint 是 robot 下面的子分量(应该有比‘子分量’更好的描述),换句话说 joint 和 link 隶属于 robot 。知道了机器人的基本构成之后还不够,还需要知道基本组成部分的一些物理信息,例如连杆的质量属性,惯量属性,颜色,以及关节的种类,这到底是转动关节还是平动关节。因此 link 和 joint 也要有自己的子分量,比如 inertial 和 visual , visual 下面还可以再次细分子分量 geometry 和 material ,然后 material 下面还可以有自己的子分量,由此往复我们就可以用URDF来充分定义好一个机器人的各个信息。所以一个增加了这些额外信息的URDF文件内容例子如下

 

<robot>
	<link>
		<inertial>
			...
		</inertial>
		<visual>
			<geometry>
				...
			</geometry>
			<material>
				<color />
			</material>
		</visual>
	</link>
	...
</robot>

 

我们定义好了机器人的组成部分以及各个部分所具有的信息,接着还需要有属性描述这些量。比如 robot,link,joint 都有 name属性,一个用来辨识模块的字符串。 color 有 rgba 属性,用来定义连杆的外表颜色。添加了相关信息的URDF文件长这个样子:

 

<robot name = "linkage">
	<link name = "root link">
		<inertial>
			...
		</inertial>
		<visual>
			<geometry>
				...
			</geometry>
			<material>
				<color rgba = "1 0 0 1" />
			</material>
		</visual>
	</link>
	...
</robot>

 

把这些属性附上对应的数值之后,一个机器人的 urdf 模型中各个模块的外表和物理属性就建立好了。
接下来我们来描述关节连杆之间的关系。

 

3.URDF的层次结构以及动力学树
URDF文件里,就像XML一样,link 通过 joint 按一定的层次一个个联系在一起。 joint 通过 parent-child 关系把上下 link 联系起来,parent link可以同时作为其他 link 的child link,而child link也可以同时作为其他link的parent link,举例:

 

<parent> and <child> Joint Elements
<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语法建立了一个这样的连杆模型:

 

  • 连杆A通过关节A连接着连杆B,连杆A是父连杆
  • 连杆C通过关节B连接着连杆A,连杆A是父连杆
  • 连杆D通过关节C连接着连杆C,连杆C是父连杆

 

我们可以通过connectivity graph来展示 link 之间的从属和连接关系,用圆代表link,箭头代表joint,joint 从 parent link流出,指向child link,于是上述URDF文件可以用图表示为:

 

在这里插入图片描述

 

描述好关系之后,一个加上上面所说的物理和外表属性,一个完整的机器人 URDF 模型就建立好了。
但是在URDF里面,模型的拓扑结构也受到着一定的限制:那就是URDF不能定义一个闭环的连杆模型。翻译成URDF说法就是:

 

  • 一个child 只能有一个parent link
  • 只有root link(也就是connectivity graph的起源)可以有多个分支
  • 一个模型只能由一个root link

 

举例:
Kinematic Loop URDF Example

 

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

 

上述URDF的连线图如下所示:

 

在这里插入图片描述

 

它有一个child link D具有两个parent link, 因此该模型不能用URDF来建模

 

4. URDF里必要的和可选的部分

 

URDF里面并不是所有的信息都需要定义,一些信息比如 link 下面的 inertial 信息就是可选的,可以定义也可以不定义。下面的例子中绿色代表可选的信息,可填可不填:

 

在这里插入图片描述

发表评论

后才能评论