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
全部评论(76)
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
百里九十
rmy45_6452
佚名
古月作者
佚名
佚名
佚名
佚名
I, Hit Worker
I, Hit Worker
佚名
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
古月作者
古月作者
佚名
古月作者
佚名
佚名
佚名
google
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
佚名