在这篇教程中,我们会创建URDF文件来描述图中所示机器人。
图中的机器人是树状结构的。让我们从最简单的开始做起,创建一个树状结构描述,而不需要知道这些结构的尺寸。使用你最喜欢的编辑器,创建一个文件,我们叫它 my_robot.urdf:
<robot name="test_robot">
<link name="link1" />
<link name="link2" />
<link name="link3" />
<link name="link4" />
<joint name="joint1" type="continuous">
<parent link="link1"/>
<child link="link2"/>
joint>
<joint name="joint2" type="continuous">
<parent link="link1"/>
<child link="link3"/>
joint>
<joint name="joint3" type="continuous">
<parent link="link3"/>
<child link="link4"/>
joint>
robot>
酱紫结构就创建好啦,是不是很简单!现在让我们看看是否可以解析这个urdf文件。有一个简单的命令行工具,它将替你解析urdf文件,然后告诉你语法是不是正确:
可能需要用到urdfdom一个独立与ROS的包,获取方法:
$ sudo apt-get install liburdfdom-tools
使用这个工具,你需要在命令行运行它,用它检查你的urdf文件:
$ rosmake urdfdom_model # 仅在从源安装时才需要
$ check_urdf my_robot.urdf # hydro 版本及之后的版本可以使用该命令
$
$ # 对于较旧的ROS发行版,请使用以下命令
$ rosrun urdfdom check_urdf my_robot.urdf # groovy
$ rosrun urdf_parser check_urdf my_robot.urdf # electric and fuerte
$ rosrun urdf check_urdf my_robot.urdf # diamondback 或更早版本
如果一切正常的话,会显示以下内容:
robot name is: test_robot
---------- Successfully Parsed XML ---------------
root Link: link1 has 2 child(ren)
child(1): link2
child(2): link3
child(1): link4
我们已经得到了基本树状结构,让我们添加适当的尺寸进去。你已经发现了,在上图中没有一个连杆的参考坐标系(绿色)都位于连杆的底端,并且与关节的参考坐标系相同。所以,想把尺寸加入我们的树中,需要做的事情就是:确定从连杆到其上子连杆关节的偏移量。为此,我们将字段添加到每个关节。
让我们看看第二个关节。Joint2在Y正方向上与link1有偏移量,在X负方向上与link1稍微有点偏移量,并且绕Z轴旋转90度。因此,我们需要添加以下
元素:
<origin xyz="-2 5 0" rpy="0 0 1.57" />
如果,你把每个关节都加上像这样的元素,他会变成这样子:
<robot name="test_robot">
<link name="link1" />
<link name="link2" />
<link name="link3" />
<link name="link4" />
<joint name="joint1" type="continuous">
<parent link="link1"/>
<child link="link2"/>
<origin xyz="5 3 0" rpy="0 0 0" />
joint>
<joint name="joint2" type="continuous">
<parent link="link1"/>
<child link="link3"/>
<origin xyz="-2 5 0" rpy="0 0 1.57" />
joint>
<joint name="joint3" type="continuous">
<parent link="link3"/>
<child link="link4"/>
<origin xyz="5 0 0" rpy="0 0 -1.57" />
joint>
robot>
更新你的my_robot.urdf文件,然后再次运行解析器:
$ check_urdf my_robot.urdf
目前,我们还没有确定关节应该绕着哪个轴旋转。一旦我们把这个添加进去,我们就会得到一个很有趣的机器人运动学模型!在这一步,我们要做的仅仅是对每一个关节添加
元素。这些axis指定了在局部坐标系中的旋转轴。
这样,你就会看到joint2围绕+Y轴旋转。因此,简单地将以下xml添加到关节元素就好:
<axis xyz="0 1 0" />
对于joint1进行相似操作,他就会绕着下面这个轴转:
<axis xyz="-0.707 0.707 0" />
请注意,将轴标准化是个好主意。
如果我们将它添加到机器人的所有关节,我们的URDF看起来像这样:
<robot name="test_robot">
<link name="link1" />
<link name="link2" />
<link name="link3" />
<link name="link4" />
<joint name="joint1" type="continuous">
<parent link="link1"/>
<child link="link2"/>
<origin xyz="5 3 0" rpy="0 0 0" />
<axis xyz="-0.9 0.15 0" />
joint>
<joint name="joint2" type="continuous">
<parent link="link1"/>
<child link="link3"/>
<origin xyz="-2 5 0" rpy="0 0 1.57" />
<axis xyz="-0.707 0.707 0" />
joint>
<joint name="joint3" type="continuous">
<parent link="link3"/>
<child link="link4"/>
<origin xyz="5 0 0" rpy="0 0 -1.57" />
<axis xyz="0.707 -0.707 0" />
joint>
robot>
更新你的my_robot.urdf文件,然后再次运行解析器:
$ check_urdf my_robot.urdf
就是这样,你创建了一个URDF机器人描述! 现在可以尝试使用graphiz可视化URDF:
$ urdf_to_graphiz my_robot.urdf
并使用你所喜欢的pdf查看器打开生成的文件:
$ evince test_robot.pdf