ROS中的URDF
什么是URDF
Unified Robot Description Format,统一机器人描述格式,简称为URDF;
ROS中一个非常重要的机器人模型描述格式;
URDF文件使用XML格式描述机器人模型;
ROS中的urdf功能包包含一个URDF的C++解析器。
URDF标签说明
<link>
作用:
- 描述机器人某个刚体部分的外观和物理属性;
- 尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。

子标签:
- <visual>:描述机器人link部分的外观参数;
- <inertial>:描述link的惯性参数;
- <collision>:描述link的碰撞属性。

<joint>
作用:
- 描述机器人关节的运动学和动力学属性;
- 包括关节运动的位置和速度限制;
- 根据关节运动的形式,可以将其分为六种类型。

关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以围绕单轴无限旋转 |
revolute | 旋转关节,类似于continuous,但有旋转的角度限制 |
prismatic | 滑动关节,沿某一轴线移动的关节,带有位置极限 |
planar | 平面关节,允许在平面正交方向上平移或者旋转 |
floating | 浮动关节,允许进行平移、旋转运动 |
fixed | 固定关节,不允许运动的特殊关节 |
子标签:
- <calibration>:关节的参考位置,用来校准关节的绝对位置;
- <dynamics>:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到;
- <limit>:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等;
- <mimic>:描述该关节与已有关节的关系;
- <safety_controller>:描述安全控制器参数。

<robot>
- 完整机器人模型的最顶层标签;
- <link>和<joint>标签都必须包含在<robot>标签内。

一个完整的机器人模型,由一系列<link>和<joint>组成。

URDF建模优化
URDF建模存在的问题:
- 模型冗长,重复内容过多;
- 参数修改麻烦,不便于二次开发;
- 没有参数计算的功能。
URDF模型的进化版本——xacro模型文件
- 精简模型代码
- 创建宏定义
- 文件包含
- 提供可编程接口
- 常量
- 变量
- 数学计算
- 条件语句
常量的定义和使用
常量定义:
<sacro:property name="M_PI" value="3.14159"/>
常量使用:
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>

数学计算
数学计算:
<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpx="0 0 0"/>

注意:所有的数学运算都会转换成浮点数进行,以保证运算精度。
宏定义
宏定义:
<sacro:macro name="name" params="A B C">
......
</sacro:macros>
宏调用:
<name A="A_value" B="B_value" C="C_value"/>

文件包含
文件包含:
<xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro"/>

模型显示
方法一:将xacro文件转换成URDF文件后显示
rosrun xacro xacro.py mbot.xacro>mbot.urdf
方法二:直接调用xacro文件解析器
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'"/>
<param name="robot_description" command="$(arg model)"/>
roslaunch mbot_description display_mbot_base_xacro.launch