目录
本文的内容参考官方wiki
ROS中URDF模型的joint标签详解
我在利用Solidworks的插件导出URDF文件时, 面对revolute类型的关节总是有一些无能为力. 上下限的角度自己不是很愿意手动去计算, 在导出时操作Solidworks也不是很方便, 所以决定先导出成continuous类型, 到了urdf模型当中再对之进行修改, 所以今天就研究了一下官方文档, 决定对joint标签的内容进行一个归纳总结.
1. 概览
我们可以先看一下我直接导出的urdf文件中, 某一个关节的内容:
<joint
name="joint_1"
type="continuous">
<origin
xyz="0 0 0.05"
rpy="1.5708 1.5708 0" />
<parent
link="base_link" />
<child
link="link_1" />
<axis
xyz="-1 0 0" />
</joint>
当然其中还有许多内容并没有提到, 我们现在来详细地说一说.
2. 详解
2.1 joint中的属性
joint其中主要表达了两个内容, 一个是name后面这个关节的名字, 还有一个就是type后面这个关节的类型. 名字随便你怎么取, 关节一共有如下六个类型:
- continuous: 一个不受限制的, 绕着一根轴的转动副.
- revolute: 一个转动角度受到限制的, 绕着一根轴的转动副.
- prismatic: 一个沿着一根轴的滑动副, 并且有限位.
- fixed: 固定关节.
- floating: 这个关节允许六个自由度的运动, 浮动关节.
- planar: wiki上的原话是: This joint allows motion in a plane perpendicular to the axis. 我理解是, 这个关节允许再垂直于轴的一个平面内进行运动, 参考"ROS机器人开发实践"第115页上的内容. 这里的运动应该即包括平移, 也包括旋转.
2.2 joint中的元素
2.2.1 <origin>(可选, 默认为0)
这是一个可选的参数, 并不必须.
它反应了从parent link到child link之间的一个变换. 关节落在child link的原点. 也就是说, 我在确认了parent link和child link自己的坐标系之后, 还没有确认他们之间的关系. 为了描述这个关系, 我们以parent link的坐标系为一个基础, 在上面描述出child link的坐标系原点的位置.
那么这个当中包含了两个属性:
- xyz(可选的: 默认为一个零向量): 这其实反映了两个坐标系之间的平移关系.
- rpy(可选的: 默认也是一个零向量): 这反映了两个坐标系之间旋转的一个关系, r代表了roll, 是绕着x轴旋转, p代表了pitch, 是绕着y轴旋转, y代表了yaw, 是绕着z轴旋转.
我觉得这个参数其实问题不是很大, Solidworks里自己指定好坐标系之后插件都会帮你搞定的.
2.2.2 <parent>(必须)
指定了这个关节的parent link, 没什么好多说的.
2.2.3 <child>(必须)
指定了这个关节的child link, 也没什么好多说的.
2.2.4 <axis>(可选, 默认为(1, 0, 0))
相对于child link也就是joint link的坐标系:
- 对于continuous或者revolute关节, 反映了绕着哪一根轴旋转,
- 对于prismatic关节, 反映了沿着哪一根轴移动.
- 对于planar关节, 反映了沿着哪个平面(由法向量体现)移动.
2.2.5 <calibration>(可选, 非必须)
用于校准关节的参考位置:
rising: 当关节沿正方向移动, 将除法上升沿.
falling: 反之.
2.2.6 <dynamics>(可选, 非必须, 默认为0)
反映了这个关节的一些物理参数, 比如阻尼值或者静摩擦力等:
damping代表了阻尼, 单位为
N
⋅
s
m
N\cdot s\over m
mN⋅s或者
N
⋅
m
⋅
s
r
a
d
N\cdot m \cdot s\over rad
radN⋅m⋅s
friction代表了静摩擦力. 单位为
N
N
N或者
N
⋅
m
N\cdot m
N⋅m.
2.2.7 <limit>(仅仅在prismatic和revolute的关节时需要设置)
其中包含如下几个属性:
lower和upper(可选, 默认为0): 反映了关节移动的最小值或者最大值. 如果关节是continuous类型的话, 就会被自动忽略. 如果不填的话全部默认为0.
effort(必须存在): 才疏学浅, 不知道怎么翻译比较好, 不过来自wiki另外一个词条的内容可以参考一下, 帮助理解:
The effort limit is an attribute of the limit tag. In this case, a controller cannot command an effort of more than 30 N (N-m for revolute) nor less than -30 N (N-m for revolute) on the joint. If the controller tries to command an effort beyond the effort limit, the magnitude of the effort is truncated.
velocity(必须): 设定了关节运动的最大速度.
2.2.8 <mimic>(可选)
这个标签用于明确定义的关节和其他关节之间的关系. 其中包括multiplier和offset. 比如齿轮传动之类的?
2.2.9 <safety_controller>(可选)
这个元素可以包含一下属性:
soft_lower_limit(可选, 默认为0)
soft_upper_limit(可选, 默认为0)
k_position(可选, 默认为0)
k_velocity(必须)
详细内容可以访问以前2.2.7中提到的wiki词条.