本文的内容参考官方wiki
我在利用Solidworks的插件导出URDF文件时, 面对revolute类型的关节总是有一些无能为力. 上下限的角度自己不是很愿意手动去计算, 在导出时操作Solidworks也不是很方便, 所以决定先导出成continuous类型, 到了urdf模型当中再对之进行修改, 所以今天就研究了一下官方文档, 决定对joint标签的内容进行一个归纳总结.
我们可以先看一下我直接导出的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>
当然其中还有许多内容并没有提到, 我们现在来详细地说一说.
joint其中主要表达了两个内容, 一个是name后面这个关节的名字, 还有一个就是type后面这个关节的类型. 名字随便你怎么取, 关节一共有如下六个类型:
这是一个可选的参数, 并不必须.
它反应了从parent link到child link之间的一个变换. 关节落在child link的原点. 也就是说, 我在确认了parent link和child link自己的坐标系之后, 还没有确认他们之间的关系. 为了描述这个关系, 我们以parent link的坐标系为一个基础, 在上面描述出child link的坐标系原点的位置.
那么这个当中包含了两个属性:
指定了这个关节的parent link, 没什么好多说的.
指定了这个关节的child link, 也没什么好多说的.
相对于child link也就是joint link的坐标系:
用于校准关节的参考位置:
rising: 当关节沿正方向移动, 将除法上升沿.
falling: 反之.
反映了这个关节的一些物理参数, 比如阻尼值或者静摩擦力等:
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.
其中包含如下几个属性:
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(必须): 设定了关节运动的最大速度.
这个标签用于明确定义的关节和其他关节之间的关系. 其中包括multiplier和offset. 比如齿轮传动之类的?
这个元素可以包含一下属性:
soft_lower_limit(可选, 默认为0)
soft_upper_limit(可选, 默认为0)
k_position(可选, 默认为0)
k_velocity(必须)
详细内容可以访问以前2.2.7中提到的wiki词条.