ROS中URDF模型的joint标签详解

目录

  • ROS中URDF模型的joint标签详解
    • 1. 概览
    • 2. 详解
      • 2.1 joint中的属性
      • 2.2 joint中的元素
        • 2.2.1 \(可选, 默认为0)
        • 2.2.2 \(必须)
        • 2.2.3 \(必须)
        • 2.2.4 \(可选, 默认为(1, 0, 0))
        • 2.2.5 \(可选, 非必须)
        • 2.2.6 \(可选, 非必须, 默认为0)
        • 2.2.7 \(仅仅在prismatic和revolute的关节时需要设置)
        • 2.2.8 \(可选)
        • 2.2.9 \(可选)

本文的内容参考官方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 (可选, 默认为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 link, 没什么好多说的.

2.2.3 (必须)

指定了这个关节的child link, 也没什么好多说的.

2.2.4 (可选, 默认为(1, 0, 0))

相对于child link也就是joint link的坐标系:

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

2.2.5 (可选, 非必须)

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

2.2.6 (可选, 非必须, 默认为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 (仅仅在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 (可选)

这个标签用于明确定义的关节和其他关节之间的关系. 其中包括multiplier和offset. 比如齿轮传动之类的?

2.2.9 (可选)

这个元素可以包含一下属性:
soft_lower_limit(可选, 默认为0)
soft_upper_limit(可选, 默认为0)
k_position(可选, 默认为0)
k_velocity(必须)
详细内容可以访问以前2.2.7中提到的wiki词条.

你可能感兴趣的:(ROS)