ROS中URDF模型的joint标签详解

本文的内容参考官方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后面这个关节的类型. 名字随便你怎么取, 关节一共有如下六个类型:

  1. continuous: 一个不受限制的, 绕着一根轴的转动副.
  2. revolute: 一个转动角度受到限制的, 绕着一根轴的转动副.
  3. prismatic: 一个沿着一根轴的滑动副, 并且有限位.
  4. fixed: 固定关节.
  5. floating: 这个关节允许六个自由度的运动, 浮动关节.
  6. 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的坐标系原点的位置.
那么这个当中包含了两个属性:

  1. xyz(可选的: 默认为一个零向量): 这其实反映了两个坐标系之间的平移关系.
  2. 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的坐标系:

  1. 对于continuous或者revolute关节, 反映了绕着哪一根轴旋转,
  2. 对于prismatic关节, 反映了沿着哪一根轴移动.
  3. 对于planar关节, 反映了沿着哪个平面(由法向量体现)移动.
2.2.5 <calibration>(可选, 非必须)

用于校准关节的参考位置:
rising: 当关节沿正方向移动, 将除法上升沿.
falling: 反之.

2.2.6 <dynamics>(可选, 非必须, 默认为0)

反映了这个关节的一些物理参数, 比如阻尼值或者静摩擦力等:

damping代表了阻尼, 单位为 N ⋅ s m N\cdot s\over m mNs或者 N ⋅ m ⋅ s r a d N\cdot m \cdot s\over rad radNms
friction代表了静摩擦力. 单位为 N N N或者 N ⋅ m N\cdot m Nm.

2.2.7 <limit>(仅仅在prismatic和revolute的关节时需要设置)

其中包含如下几个属性:
lowerupper(可选, 默认为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词条.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值