此文用于记录URDF模型中最重要和最常用的两个标签,文章的内容大部分都来自官方
http://wiki.ros.org/urdf/XML/link
http://wiki.ros.org/urdf/XML/joint
对于各个标签的理解和使用,不定时更新。
link
各标签
子标签或属性 (带<>为标签,不带为属性) |
子标签和属性 | 描述 | 是否理解 |
---|---|---|---|
name (必填) |
用于描述 link 的名称 |
√ | |
<inertial> (可选) |
物理惯性 | ||
<origin> (可选) |
位置和姿态 | ||
<mass> |
质量 | ||
<inertia> |
3x3的旋转惯性矩阵 | ||
<visual> (可选) |
连杆的外观,可存在多个 | √ | |
name (可选) |
名称 | √ | |
<origin> (可选) |
位置和姿态 | √ | |
<geometry> (必填) |
形状 | √ | |
<material> (可选) |
纹理外观 | √ | |
<collision> (可选) |
碰撞,可存在多个 | ||
name (可选) |
名称 | ||
<origin> (可选) |
位置和姿态 | ||
<geometry> (必填) |
形状 |
针对上面的第二列中的子标签描述,同名的意义相同,只描述一次
子标签或属性 (带<>为标签,不带为属性) |
子标签和属性 | 描述 |
---|---|---|
<origin> (可选) |
位置和姿态 | |
xyz (可选) |
x、y、z的偏移,以米为单位。 | |
rpy (可选) |
x、y、z的旋转,以弧度为单位 | |
<mass> |
value |
质量 |
<inertia> |
ixx |
|
ixy |
||
ixz |
||
iyy |
||
iyz |
||
izz |
||
<geometry> (必填) |
||
<box> |
长方体size 属性对应长宽高 |
|
<cylinder> |
圆柱体radius 对应半径length 对应高度 |
|
<sphere> |
球体radius 对应半径 |
|
<mesh> |
外部文件引入filename 设置外部文件scale 设置缩放比例 |
|
<material> (可选) |
纹理外观 | |
name |
名称 | |
<color> |
颜色rgba 设置颜色值,取值[0, 1] |
|
<texture> |
外部文件引入filename 设置外部文件 |
例子
长方体
1 |
<robot name="my_box"> |
创建了一个简单的长方体,长宽高分别为1、2、3。
圆柱
1 |
<robot name="my_cylinder"> |
创建了一个简单的圆柱,长度为
1
,半径为0.5
球体
1 |
<robot name="my_cylinder"> |
创建一个简单的球体,半径为
0.5
。
Mesh 加载自定义的文件
1 |
<robot name="my_mesh"> |
从文件中读取形状,使用
package
开头,一般将对应的纹理文件dae
放在文件夹meshes
中。
位置和姿势
1 |
<robot name="my_box"> |
使用
origin
的xyz
控制位置,rpy
控制姿态,旋转遵循右手螺旋法则
设置视觉纹理
- 内部设置的方式
1 |
<robot name="my_box"> |
- 外部设置的方式
1 |
<robot name="my_box"> |
建议使用第二种方式,因为一个颜色很有可能在多个地方需要使用。
joint
各标签
子标签或属性 (带<>为标签,不带为属性) |
子标签和属性 | 描述 | 是否理解 |
---|---|---|---|
name (必填) |
用于描述joint 的名称 |
√ | |
type (必填) |
用于描述joint 的类型:1. fixed :固定关节2. revolute :限制旋转关节3. continuous :无限旋转关节4. prismatic :滑动关节5. floating :悬浮关节6. planar :2T1R
|
√ | |
<origin> (可选) |
位置和姿态 | √ | |
xyz (可选) |
x、y、z的偏移,以米为单位。 | √ | |
rpy (可选) |
x、y、z的旋转,以弧度为单位 | √ | |
<parent> (必填) |
被连接的那个link |
√ | |
link |
link 的名称 |
√ | |
<child> (必填) |
连接的link |
√ | |
link |
link 的名称 |
√ | |
<axis> (可选) |
指定的关节轴 | √ | |
xyz (必填) |
x、y、z 偏移或旋转 | √ | |
<calibration> (可选) |
校准位置 | ||
rising (可选) |
上升沿 | ||
falling (可选) |
下降沿 | ||
<dynamics> (可选) |
动力 | ||
damping (可选) |
物理阻尼 | ||
friction (可选) |
物理静摩擦力 | ||
<limit> (可选, revolute 和prismatic 必填) |
限制约束 | √ | |
lower (可选) |
下限 | √ | |
upper (可选) |
上限 | √ | |
effort (必填) |
最大承受力 | √ | |
velocity (必填) |
最大速度 | √ | |
<mimic> (可选) |
模拟现有一个关节value = multi * joint + offset |
||
joint (必填) |
要模拟的关节 | ||
multiplier (可选) |
乘法因子 | ||
offset (可选) |
偏移量 | ||
<safety_controller> (可选) |
安全控制器 | ||
soft_lower_limit (可选) |
限制关节位置的下关节边界 | ||
soft_upper_limit (可选) |
限制关节位置的上关节边界 | ||
k_position (可选) |
|||
k_velocity (必填) |
例子
在上面的表格中共有六种类型,实际使用中只有4中能使用,
fixed
、revolute
、continuous
、prismatic
。以下都定义了两个link,从而展示例子,只写关节部分代码
以下为公共区域代码,
...
表示加入后面的关节代码
1 |
<robot name="my_box"> |
- 关节1的名字为
base_link
,颜色为红色 - 关节2的名字为
link1
,颜色为绿色
fixed关节
1 |
<joint name="joint0" type="fixed"> |
该关节仅仅起到连接作用
revolute 关节
1 |
<joint name="joint0" type="revolute"> |
旋转关节,必须要加上限制约束,因为该关节有限制条件。
continuous 关节
1 |
<joint name="joint0" type="continuous"> |
旋转关节,没有限制约束,无限旋转
prismatic 关节
平移关节,必须加限制约束。
总结
如果需要多自由度,可以加入多关节,必须说6自由度,可以加3个旋转和3个平移,分别对应x、y、z三个不同的方向即可。
launch 启动文件
1 |
<launch> |
arg
:大致相当于设置变量find
:查找package