link结构一般如下所示:
......
......
......
(1)属性:
name:link自身的名称(必须要用引号括起)
(2)子元素:
下面具体介绍三个元素:三个元素都是可选项,在link标签下可有可无
<inertial> (惯性参数)
<origin xyz="..." rpy="..." /> (初始坐标,可选,如果没有指定则使用默认值, 这是惯性参考系相对于link参考系的姿态。惯性参考系的原点必须位于重心。惯性参考系的轴不需要与惯性主轴对齐。)
xyz (optional: defaults to zero vector,xyz坐标,表示偏移量,单位为米)
rpy (optional: defaults to identity if not specified,绕x、y、z轴旋转,单位为弧度)
<mass />
link的质量由mass的值属性表示
<inertia />
3x3转动惯量矩阵,在惯量框架中表示。由于转动惯量矩阵是对称的,因此此处仅指定该矩阵对角线元素上方的6个元素,使用属性ixx、ixy、ixz、iyy、iyz、izz。
</inertial>
<visual name="..."> (定义外观属性,此元素指定用于可视化目的的对象(框、圆柱体等)的形状)
(注意:同一个link可以有多个visual标签,它们定义的几何图形的联合形成了link的视觉表示)
name (visual名称,可选,指定link几何图形的一部分的名称。这对于能够参考link几何结构的特定位很有用。
<origin xyz="..." rpy="..." />
<geometry> (必须要有的属性,描述link的几何形状,可从一下四种中选择)
<box> 矩形,大小属性包含三个边长,原点在其中心.
<cylinder> 圆柱,指定半径和长度,原点在其中心.
<sphere> 球体,指定半径,原点在其中心.
<mesh filename="package://pkg_description/meshs/name.dae" /> 通过该标签可以导入该模型的mesh文件
</geometry>
<material name="..."> (可选,可视化元素的材质)
name 材料名称
<color rgba="...." /> (可选,rgb是颜色值,a是透明度,数值范围在0-1)
<texture /> (可选,材质的纹理可通过文件名指定)
</material>
</visual>
检测碰撞的link区域大于外观可视区域,这就意味着只要其他物体与collision区域相交,就认为link发生碰撞。
<collision name="..."> (link的碰撞属性,同一个link可存在多个collision)
<origin xyz="..." rpy="..." /> (可选)
<geometry>
与前述相同
</geometry>
</collision>
joint元素描述了机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制,并且指定了关节的安全限制。
joint的结构一般如下所示:
<joint name="..." type="...">
<parent link="parent_link" />
<child link="child_link" />
<calibration ...... />
<dynamics damping ...... />
<limit effort ...... />
......
</joint>
joint元素中拥有两个属性
name (必需的):指定joint的名字(唯一的)
type (必需的):指定joint的类型,有下列选项:
revolute - 旋转关节,可绕单轴旋转,但有旋转的角度极限。
continuous - 旋转关节,可以绕单轴无限旋转。
prismatic - 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制。
fixed - 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制。
floating - 浮动关节,允许进行平移、旋转运动(是一个具有6个自由度的关节)。
planar - 此关节在一个平面内运动,垂线是运动轴。
<origin xyz="..." rpy="...">从parent link到child link的变换,joint位于child link的原点,具体如图所示。
xyz (optional: defaults to zero vector)
代表x,y,z轴方向上的偏移,单位米。
rpy (optional: defaults 'to zero vector 'if not specified)
代表绕着固定轴旋转的角度:roll绕着x轴,pitch绕着y轴,yaw绕着z轴,用弧度表示。
<parent link="..." /> (必要的,parent link的名字是一个强制的属性)
link
parent link的名字,是这个link在机器人结构树中的名字。
<child link="..." /> (必要的,child link的名字是一个强制的属性)
link
child link的名字,是这个link在机器人结构树中的名字。
<axis xyz="..." /> (optional: defaults to (1,0,0))
joint的axis轴在joint的坐标系中。这是revolute joint旋转的轴,prismatic joint移动的轴,是planar joint的标准平面。
这个轴在joint坐标系中被指定。fixed和floating类型的joint不需要用到这个字段。
xyz (必要的,代表轴向量的x,y,z分量,这应该是一个标准化的向量。)
<calibration /> (可选择的,joint的参考点,用来矫正joint的绝对位置。)
rising (可选择的,当joint正向运动时,参考点会触发一个上升沿。)
falling (可选择的,当joint正向运动时,参考点会触发一个下降沿。)
<dynamics /> (可选择的,该元素用来指定joint的物理性能。它的值被用来描述joint的建模性能,尤其是在仿真的时候。)
damping (optional, defaults to 0)
joint的阻尼值。(移动关节为(N*s)/m ,旋转关节为(N*m*s)/rad)
friction (optional, defaults to 0)
joint的摩擦力值。(移动关节为N, 旋转关节为N*m)
<limit> (required only for revolute and prismatic joint)
该元素包含以下属性:
lower (optional, defaults to 0)
指定joint运动范围下界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。
upper (optional, defaults to 0)
指定joint运动范围上界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。
effort (必要的,该属性指定了joint运行时的最大的力。)
velocity (必要的,该属性指定了joint运行时的最大的速度。)
<mimic> (optional)
这个标签用于指定已定义的joint来模仿已存在的joint。
这个joint的值可以用以下公式计算 value = multiplier * other_joint_value + offset.
有如下可选的属性:
joint (必要的,需要模仿的joint的名字。)
multiplier (optional)
指定上述公式中的乘数因子。
offset (optional)
指定上述公式中的偏移项。默认值为0(revolute joint的单位为弧度,prismatic joint的单位为米)。
<safety_controller> (optional)
该元素包含下列属性:
soft_lower_limit (optional, defaults to 0)
该属性指定了joint安全控制边界的下界,是joint安全控制的起始限制点。这个值需要大于上述的limit中的lower值。
soft_upper_limit (optional, defaults to 0)
该属性指定了joint安全控制边界的上界,是joint安全控制的起始限制点。这个值需要小于上述的limit中的upper值。
k_position (optional, defaults to 0,本属性用于说明位置和速度之间的关系。)
k_velocity (必要的,本属性用于说明力和速度之间的关系。
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
我们现在已经完成了一个简单的URDF模型创建,ROS提供了相应的工具可以让URDF图像化显示出来。
$ urdf_to_graphiz my_robot.urdf
URDF语法检查工具check_urdf,在indigo版本的ROS中,执行如下命令即可:
rosrun urdfdom check_urdf /tmp/pr2.urdf
URDF可视化工具urdf_to_graphiz,在indigo版本额ROS中属于liburdfdom-tools包中的一个工具,可以使用如下命令安装:
sudo apt-get install liburdfdom-tools
可视化工具的使用方法:
urdf_to_graphiz pr2.urdf