目录
一、URDF介绍
URDF全称Unified Robot Description Format,指统一机器人描述格式。ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型。
URDF创造的机器人模型包含的内容有:
◦连杆link
◦关节joint
◦运动学参数axis
◦动力学参数dynamics
◦碰撞检测模型collision
URDF模型可以使用网格模型网格对象(STL或Collada)、简单的盒状或者圆柱体组件。毕竟XML语言可以描述坐标系之间的关系,连杆与关节的关系,但是没有外观。也就是只有结构没有外形。
举个例子,如果仅仅只有XML语言编写的NAO机器人模型,在rviz打开是这样的:
但是加上了mesh文件就会好看很多。
二、URDF的编写方式
机器人底盘模型、机械臂模型都可以用urdf编写使用,一般有两种方法。
1.直接用XML语言编写机器人的结构,然后加上mesh文件作为机器人的外形。
2. 用solidworks插件在三维模型中选取连杆关节间的关系,直接导出urdf包。
第二种方法更简单,但是不如第一种可靠。
2.1 用XML编写URDF文件
1.基础模型
首先从整体结构出发,不考虑过多的细节,构建一个基础模型。
<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>
这段代码也比较好理解,直接看也能看得懂。就是构建了一个机器人“test_robot”,这个机器人包含四个连杆和三个关节。关节1连接了连杆1和连杆2,关节2连接了连杆1和连杆3,关节3连接了连杆3和连杆4.
2.添加机器人尺寸
在上述模型的基础上,为机器人添加尺寸大小。
对比上一节代码,这节的代码只是在关节的定义中多了<origin>一行。
由于每个环节的参考系都位于该环节的底部,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系。URDF中的<origin>域就是用来表示这种相对关系的。
<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>
<origin>的前一个参数表示连杆间在x轴y轴的相对位移,后一个参数表示在轴上的旋转变换。
3.添加运动学参数
为机器人的关节添加旋转轴参数,使之具备基本的运动学参数。
这节代码相对上节多了<axis>一行。
<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>
joint绕轴旋转可以如上表示。
4.图形化显示URDF模型
ROS提供了相应的工具,可以让URDF图像化显示出来。
2.2 用solidworks插件导出URDF文件
这个东西是我最初接触ros时尝试做的东西,可以从之前的博客 使用solidworks插件获取urdf包 中查看。隔了有些年头,但是用法应该没啥变化的。
参考
1.古月居 ROS探索总结(二十三)——解读URDF
2.ROS wiki urdf
3.《ROS进阶实例》第四章