ROS中使用XML格式描述机器人模型的URDF文件

ROS中使用XML格式描述机器人模型的URDF文件

  • 一.link
    • 1.
    • 2.
    • 3.
  • 二.joint
    • (1)属性:
    • (2)子元素:
    • 三.URDF

一.link

标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。

link结构一般如下所示:


     ...... 
     ...... 
     ...... 

(1)属性:
name:link自身的名称(必须要用引号括起)
(2)子元素:
标签用于描述机器人link部分的外观参数;
标签用于描述link的惯性参数;
标签用于描述link的碰撞属性。

下面具体介绍三个元素:三个元素都是可选项,在link标签下可有可无

1.

<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>

2.

属性是必须要有的

<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>

3.

检测碰撞的link区域大于外观可视区域,这就意味着只要其他物体与collision区域相交,就认为link发生碰撞。

<collision name="..."> (link的碰撞属性,同一个link可存在多个collision)
    <origin xyz="..." rpy="..." /> (可选)
    <geometry>
        与前述相同
    </geometry>
</collision>

标签中的内容与标签中的内容几乎一致,这是因为我们使用的模型都是较为简单的规则模型,如果使用真实机器人的设计模型,标签内可显示复杂的机器人外观,但为了减少碰撞检测时的计算量,中往往使用简化后的机器人模型,例如将机械臂的一根连杆简化成为圆柱体或者长方体。

二.joint

joint元素描述了机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制,并且指定了关节的安全限制。

joint的结构一般如下所示:

<joint name="..." type="...">
    <parent link="parent_link" />
    <child link="child_link" />
    <calibration ...... />
    <dynamics damping ...... />
    <limit effort ...... />
    ......
</joint>

(1)属性:

joint元素中拥有两个属性

name (必需的):指定joint的名字(唯一的)
type (必需的):指定joint的类型,有下列选项:
revolute - 旋转关节,可绕单轴旋转,但有旋转的角度极限。
continuous - 旋转关节,可以绕单轴无限旋转。
prismatic - 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制。
fixed - 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制。
floating - 浮动关节,允许进行平移、旋转运动(是一个具有6个自由度的关节)。
planar - 此关节在一个平面内运动,垂线是运动轴。

(2)子元素:

<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 (必要的,本属性用于说明力和速度之间的关系。 
 

三.URDF

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

你可能感兴趣的:(笔记)