ROS机器人描述——URDF和XACRO

一、URDF
URDF(Unified Robot Description Format)是一种特殊的XML文件格式。
URDF形成通常有三种途径:

  1. 直接使用URDF的XML tag进行文件编写。
  2. 使用XACRO建模后转为URDF文件。
  3. 使用SolidWorks进行三维建图后使用SW2URDF插件转换为URDF文件。

URDF文件介绍:

1. link和joint
这里写图片描述

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>

2.位置
定义好机器人的骨架后,我们需要进一步用origin子标签对link所在的位置进行定义。link的位置由joint决定,因此该子标签定义在joint内。

<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.7" rpy="0 0 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-.2 .5 -0.3" rpy="0 0 1.57" />
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz=".5 0 0.2" rpy="0 0 -1.57" />
  </joint>
</robot>

上述位置关系定义如下图所示:
这里写图片描述

3.形状
通过visual标签和geometry标签定义link的形状。下面示例了一些常用的形状, 以及可能会导入的一些奇形怪状的东西. 不但可以导入stl格式的文件, 还可以导入dae格式。下述示例中导入了一个小刀。

<?xml version="1.0"?>
<robot name="test_robot">
  <link name="link1">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2" />
      </geometry>
    </visual>
  </link>

  <link name="link2">
    <visual>
      <geometry>
        <box size="0.6 0.2 .1" />
      </geometry>
    </visual>
  </link>

  <link name="link3" >
    <visual>
      <geometry>
        <sphere radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <link name="link4" >
    <visual>
      <origin rpy="0 -1.57 0" xyz="0 0 0"/>
      <geometry>
        <mesh filename="package://urdf_csdn/urdf/mesh/knife.stl"/>
      </geometry>
    </visual>
  </link>


  <joint name="joint1" type="fixed">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="0.22 0 0.6" rpy="0 1.57 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-0.1 0.5 0" />
  </joint>

  <joint name="joint3" type="fixed">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz=".5 0 0" rpy="0 0 -1.57" />
  </joint>
</robot>

4.collision和joint限制
为了避免link之间发生碰撞,所以针对每一个link,还有一个collision标签,和visual标签内容完全一样。
还可以对joint的运动进行限制。比如,我们限制joint只能沿着y轴旋转,可以定义标签<axis xyz="0 1 0"/>。我们也可以限制joint的运动范围,速度,力矩进行限制,则可以添加<limit lower="-3.14" upper="3.14" effort="150.0" velocity="3.15"/>

<?xml version="1.0"?>
<robot name="test_robot">
  <link name="link1">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2" />
      </geometry>
    </visual>
    <collision>
      <origin xyz="0.0 0 0.0" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.6" radius="0.2" />
      </geometry>
    </collision>
  </link>

  <link name="link2">
    <visual>
      <geometry>
        <box size="0.6 0.2 .1" />
      </geometry>
    </visual>
  </link>

  <link name="link3" >
    <visual>
      <geometry>
        <sphere radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <link name="link4" >
    <visual>
      <origin rpy="0 -1.57 0" xyz="0 0 0"/>
      <geometry>
        <mesh filename="package://urdf_csdn/urdf/mesh/knife.stl"/>
      </geometry>
    </visual>
  </link>


  <joint name="joint1" type="fixed">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="0.22 0 0.6" rpy="0 1.57 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-0.1 0.5 0" />
    <axis xyz="0 1 0"/>
    <limit lower="-3.14" upper="3.14" effort="150.0" velocity="3.15"/>
  </joint>

  <joint name="joint3" type="fixed">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz=".5 0 0" rpy="0 0 -1.57" />
  </joint>
</robot>

5.可视化
通过rviz显示URDF文件,可以使用命令:

roslaunch urdf_tutorial display.launch model:=path/to/your/xxx.urdf

如上述内容,进行显示之后,,可以得到下图所示内容。 坐标系图示,需要添加TF条目进行显示。值得注意的地方,将Global Options中的fixed frame设定为link1。
这里写图片描述
如果设置了可移动joint,你想查看joint移动的效果和设定,可以使用命令:

roslaunch urdf_tutorial display.launch model:=path/to/your/xxx.urdf gui:=true

猜你喜欢

转载自blog.csdn.net/weixin_42018112/article/details/80344420