ROS:学习 URDF (Unified Robot Description Format,统一的机器人描述文件格式)

自定义URDF文件

  • 1. 创建树结构
  • 2. 添加尺寸
  • 3. 完成运动学

1. 创建树结构

在这篇教程中,我们会创建URDF文件来描述图中所示机器人。
机器人图中的机器人是树状结构的。让我们从最简单的开始做起,创建一个树状结构描述,而不需要知道这些结构的尺寸。使用你最喜欢的编辑器,创建一个文件,我们叫它 my_robot.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文件。有一个简单的命令行工具,它将替你解析urdf文件,然后告诉你语法是不是正确:
可能需要用到urdfdom一个独立与ROS的包,获取方法:

$ sudo apt-get install liburdfdom-tools

使用这个工具,你需要在命令行运行它,用它检查你的urdf文件:

$ rosmake urdfdom_model              # 仅在从源安装时才需要
$ check_urdf my_robot.urdf                    # hydro 版本及之后的版本可以使用该命令
$
$ # 对于较旧的ROS发行版,请使用以下命令
$ rosrun urdfdom check_urdf my_robot.urdf     # groovy
$ rosrun urdf_parser check_urdf my_robot.urdf # electric and fuerte
$ rosrun urdf check_urdf my_robot.urdf        # diamondback 或更早版本

如果一切正常的话,会显示以下内容:

robot name is: test_robot
---------- Successfully Parsed XML ---------------
root Link: link1 has 2 child(ren)
    child(1):  link2
    child(2):  link3
        child(1):  link4

2. 添加尺寸

我们已经得到了基本树状结构,让我们添加适当的尺寸进去。你已经发现了,在上图中没有一个连杆的参考坐标系(绿色)都位于连杆的底端,并且与关节的参考坐标系相同。所以,想把尺寸加入我们的树中,需要做的事情就是:确定从连杆到其上子连杆关节的偏移量。为此,我们将字段添加到每个关节。
让我们看看第二个关节。Joint2在Y正方向上与link1有偏移量,在X负方向上与link1稍微有点偏移量,并且绕Z轴旋转90度。因此,我们需要添加以下元素:

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

更新你的my_robot.urdf文件,然后再次运行解析器:

$ check_urdf my_robot.urdf

3. 完成运动学

目前,我们还没有确定关节应该绕着哪个轴旋转。一旦我们把这个添加进去,我们就会得到一个很有趣的机器人运动学模型!在这一步,我们要做的仅仅是对每一个关节添加元素。这些axis指定了在局部坐标系中的旋转轴。
这样,你就会看到joint2围绕+Y轴旋转。因此,简单地将以下xml添加到关节元素就好:

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

更新你的my_robot.urdf文件,然后再次运行解析器:

$ check_urdf my_robot.urdf

就是这样,你创建了一个URDF机器人描述! 现在可以尝试使用graphiz可视化URDF:

$ urdf_to_graphiz my_robot.urdf

并使用你所喜欢的pdf查看器打开生成的文件:

 $ evince test_robot.pdf

ROS:学习 URDF (Unified Robot Description Format,统一的机器人描述文件格式)_第1张图片

你可能感兴趣的:(study)