URDF文件
URDF
简介
- Unified Robot Description Format,统一机器人描述格式,简称为URDF
- ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型
解析
<robot>
介绍
- 完整机器人模型的最顶层标签
- <link>和<joint>标签都必须包含在<robot>标签内
- 一个完整的机器人模型,由一系列<link>和<joint>组成
例子:
<robot name="robot_name">
<link>......</link>
<link>......</link>
<joint>......</joint>
<joint>......</joint>
</robot>
<link>
属性
name
(必需):link的名字
介绍
- urdf 中的 link 标签用于描述机器人某个部件(也即刚体部分)的外观和物理属性,比如:机器人底座、轮子、激光雷达、摄像头...每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状(shape)、尺寸(size)、颜色(color)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等一系列属性
子标签
<visual>
:描述机器人link部分的外观参数<geometry>
:可视化对象的形状box
:矩形cylinder
:圆柱体sphere
:球体mesh
:网格,纹理(更为复杂的模型)
<origin>
:设置偏移量与倾斜弧度<material>
:可视化组件的材料color
:颜色
<texture>
:材料属性(纹理)
<inertial>
:描述link的惯性参数<origin>
:定义连杆质心坐标<mass>
:连杆的质量<inertia>
:惯性张量
<collision>
:描述link的碰撞属性<origin>
:碰撞组件的参考坐标系相对于连杆坐标系的参考坐标系<geometry>
:与上述geometry元素描述相同
例子:
<link name="my_link">
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
</link>
<joint>
介绍
- urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限,机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,不同的关节有不同的运动形式::旋转、滑动、固定、旋转速度、旋转角度限制等等,比如:安装在底座上的轮子可以360度旋转,而摄像头则可能是完全固定在底座上
- joint标签对应的数据在模型中是不可见的
属性
<name>
(必需):指定joint的名字(唯一的)type
(必需):指定joint的类型,有下列几种:
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以绕单轴无限旋转 |
revolute | 旋转关节,类似于 continues,但是有旋转角度限制 |
prismatic | 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制 |
planer | 平面关节,允许在平面正交方向上平移或旋转 |
floating | 浮动关节,允许进行平移、旋转运动 |
fixed | 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制 |
子标签
<parent>
:parent link的名字是一个强制的属性,是这个link在机器人结构树中的名字。 可以理解为parent是主体,child是固定在主体上的配件<child>
:child link的名字,是这个link在机器人结构树中的名字<origin>
:从parent link到child link的变换,joint位于child link的原点<calibration>
:关节的参考位置,用来校准关节的绝对位置rising
:当joint正向运动时,参考点会触发一个上升沿falling
:当joint正向运动时,参考点会触发一个下降沿
<axis>
:设置围绕哪个关节轴运动<dynamics>
:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到damping
:joint的阻尼值friction
:joint的摩擦力值
<limit>
:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等lower
:指定joint运动范围下界的属性,连续型的joint忽略该属性upper
:指定joint运动范围上界的属性,连续型的joint忽略该属性effort
:该属性指定了joint运行时的最大的力velocity
:该属性指定了joint运行时的最大的速度
<mimic>
:指定该joint来模仿已存在的jointjoint
:需要模仿的joint的名字multiplier
:指定上述公式中的乘数因子offset
:指定上述公式中的偏移项,默认值为0
<safety_controller>
:描述安全控制器参数soft_lower_limit
:该属性指定了joint安全控制边界的下界,是joint安全控制的起始限制点,默认为0soft_upper_limit
:该属性指定了joint安全控制边界的上界,是joint安全控制的起始限制点,默认为0k_position
:本属性用于说明位置和速度之间的关系k_velocity
:本属性用于说明力和速度之间的关系
例子:
<joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<axis xyz="0 0 1" />
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>