Unified Robot Description Format,统一机器人描述格式,简称为URDF。ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型。
1 URDF语法规范
2 组件
URDF由一些不同的功能包和组件组成,下图描述了这些组件之间的联系。
3 URDF教程
如下图所示,本节将创建一个如下图所示结构的机器人模型。
3.1 基础模型
上图所示是一个树形机器人模型,我们先从机器人的整体结构出发,不考虑过多的细节,可以将机器人通过如下的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模型定义了机器人的4个环节(link),然后定义了三个关节(joint)来描述环节之间的关联。
ROS为用户提供了一个检查URDF语法的工具:
$ sudo apt-get install liburdfdom-tools
安装完毕后,执行检查:
check_urdf my_robot.urdf
如果一切正常,将会有如下显示:
robot name is: test_robot
———- Successfully Parsed XML —————
root Link: link1 has 2 child(ren)
child(1): link2
child(2): link3
child(1): link4
3.2 添加机器人尺寸
在基础模型之上,我们为机器人添加尺寸大小。由于每个环节的参考系都位于该环节的底部,关节也是如此,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系即可。URDF中的<origin>域就是用来表示这种相对关系。
例如,joint2相对于连接的link1在x轴和y轴都有相对位移,而且在x轴上还有90度的旋转变换,所以表示成<origin>域的参数就如下所示:
<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>
再次使用check_urdf检查通过后继续下一步。
3.3 添加运动学参数
如果我们为机器人的关节添加旋转轴参数,那么该机器人模型就可以具备基本的运动学参数。
例如,joint2围绕正y轴旋转,可以表示成:
<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>
便忘记使用check_urdf检查语法错误。
3.4 图形化显示URDF模型
我们现在已经完成了一个简单的URDF模型创建,ROS提供了相应的工具可以让URDF图像化显示出来。
$ urdf_to_graphiz my_robot.urdf
然后打开生成的pdf文件,即可看到图形化的URDF:
4 示例
参见:Example
5 调试工具
5.1 验证工具
上文已经提到了URDF语法检查工具check_urdf,在indigo版本的ROS中,执行如下命令即可:
rosrun urdfdom check_urdf /tmp/pr2.urdf
检查结果如下:
5.2 可视化工具
上文同样提到的URDF可视化工具urdf_to_graphiz,在indigo版本额ROS中属于liburdfdom-tools包中的一个工具,可以使用如下命令安装:
sudo apt-get install liburdfdom-tools
可视化工具的使用方法:
urdf_to_graphiz pr2.urdf
结果如下所示:
参考链接
1、urdf功能包:http://wiki.ros.org/urdf
2、urdf语法规范:http://wiki.ros.org/urdf/XML
3、urdf教程:http://wiki.ros.org/urdf/Tutorials
4、urdf示例:http://wiki.ros.org/urdf/Examples