ROS学习笔记(十):机器人建模
- 统一机器人描述格式(URDF)
- link标签
- joint标签
- robot标签
- gazebo标签
- URDF检查
- URDF可视化
统一机器人描述格式(URDF)
URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,ROS同时也提供了URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。URDF模型可以通过文本编辑器创建,若有CAD模型,也可以将CAD模型转化为URDF模型。
link标签
<link>标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision propertes)等。
机器人的link结构基本的URDF描述语法如下:
<link name="<link name>">
<inertial>......</inertial>
<visual>......</visual>
<collision>......</collision>
</link>
- <visual>标签用于描述机器人link部分的外观参数;
- <inertial>标签用于描述link的惯性参数;
- 而<collision>标签用于描述link的碰撞属性。
从下图中可以看出,检测碰撞的link区域大于外观可视的区域,这就意味着只要有其他物体与collision区域相交,就认为link发生碰撞。
joint标签
<joint>标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制。根据机器人的关节运动形式,可以将其分为以下六种类型:
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以围绕单轴无限旋转 |
revolute | 旋转关节,类似于continuous,但是有旋转的角度极限 |
prismatic | 滑动关节,沿某一轴线移动的关节,带有位置极限 |
planar | 平面关节,允许在平面正交方向上移动或者旋转 |
floating | 浮动关节,允许进行平移、旋转运动 |
fixed | 固定关节,不允许运动的特殊关节 |
机器人关节的主要作用是连接两个刚体link,这两个link分别称为parent link和child link,如下图所示。
<joint name="<name of the joint>">
<parent link="parent_link">
<child link="child_link">
<calibration ... />
<dynamics damping ... />
<limit effort ... />
</joint>
其中,必须指定joint的parent link和child link,还可以设置关节的其他属性:
- <calibration>:关节的参考位置,用来校准关节的绝对位置;
- <dynamics>:用于描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到。
- <limit>:用于描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等。
- <mimic>:用于描述该关节与已有关节的关系。
- <safety_controller>:用于描述安全控制器参数。
robot标签
<robot>是完整机器人模型的最顶层标签,<link>和<joint>标签都必须包含在<robot>标签内。<robot>标签内可以设置机器人的名称,其基本语法如下:
<robot name="<name of the robot>">
<link> ...... </link>
<link> ...... </link>
<joint> ...... </joint>
<joint> ...... </joint>
</robot>
gazebo标签
<gazebo>标签用于描述机器人模型在Gazebo中仿真所需要的参数,包括机器人材料的属性、Gazebo插件等。该标签不是机器人模型必需的部分,只有在Gazebo仿真时才需加入。该标签的基本语法如下:
<gazebo reference="link_1">
<material>Gazebo/Black</material>
</gazebo>
URDF检查
安装相关依赖包sudo apt-get install liburdfdom-tools
,输入以下指令即可检查pr2.urdf文件
check_urdf pr2.urdf
URDF可视化
安装相关依赖包sudo apt-get install liburdfdom-tools
,输入以下指令即可查看pr2.urdf的结构。
urdf_to_graphiz pr2.urdf