首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MIT模式中的惯性项求解

MIT模式中的惯性项求解

作者头像
索旭东
发布2026-09-15 21:11:37
发布2026-09-15 21:11:37
840
举报
文章被收录于专栏:具身小站具身小站

一、τff项解释

τff 在 MIT 模式中只是一个控制输入端口,驱动器不关心往里填了什么。它收到一个数值,就把它作为力矩前馈加到 PD 输出上,在工程实现上,τff的内容是一个函数:

针对低速清洁任务:

  • τ_gravity:必须做
  • τ_friction:强烈建议做(低速时摩擦占比大)。
  • τ_inertia:可以不做(设0),PD控制器会自然产生加速力矩。

累加的实现方式,比如每个控制周期(如 2ms)执行:

代码语言:javascript
复制
tau_ff = (
    gravity_compensation(q_actual)          # 只依赖角度
    + friction_compensation(dq_actual)       # 只依赖速度
    + inertia_compensation(q_actual, ddq_des) # 只依赖加速度(可选)
)
send_mit_command(q_des, dq_des, tau_ff)

三个函数是独立计算、然后累加,它们的输入不同、整定方式不同、触发条件也不同:

分量

形式

依赖

何时显著

整定方式

重力项

τg(q)

关节角度

始终存在(J3、J5、J6)

多姿态悬浮标定

摩擦项

τf(q˙)

关节速度

有速度时存在,低速时主导

匀速运动实验辨识

惯性项

τi(q,q¨)

关节角加速度

仅加速/减速瞬间显著

CAD模型或动态辨识


二、重力项和摩擦项的获取

前面介绍了通过实验获得了这两项:

  • 重力项:在不同角度实测悬浮力矩 → 得到 τg(q) 的查表或插值函数。
  • 摩擦项:在不同恒定速度实测平均力矩 → 线性拟合得到 fc 和 fv。

使用方式

代码语言:javascript
复制
def gravity_compensation(q):
    # 使用查表+线性插值,或多项式拟合
    return interp(q, q_table, tau_g_table)  # 或 polyval(g_coeffs, q)

def friction_compensation(dq):
    # 平滑sign函数避免零速跳变
    return fc * tanh(dq / eps) + fv * dq

三、惯性项获取

3.1 惯性项

当关节加速时,连杆的惯量会产生一个抵抗加速的力矩:

其中 Jeff(q)是关节的有效转动惯量,随关节角度变化(因为质心到关节轴的距离变化)。

3.2 什么时候需要

工况

惯性项重要性

是否需要补偿

低速清洁(加速度 < 0.1 rad/s²)

可忽略

不需要

中速运动(加速度 1~10 rad/s²)

开始显现

可选

快速启停(加速度 > 10 rad/s²)

显著

建议补偿

对于清洁场景,运动速度低、加速度小,惯性项可以暂时不补偿,PD控制器本身的 Kp就能产生足够的加速力矩。

3.3 获取惯性项

有三种方法,按推荐度排序:

方法A:从CAD模型计算(最方便)

如果模型可用,直接从CAD读取连杆质量 m、质心位置、惯性张量,通过正运动学计算任意姿态下的有效惯量 Jeff(q),然后用以下公式:

其中 q¨从上位机的轨迹规划器获得(不是从编码器差分,因为差分噪声大)。

方法B:动态辨识实验(无需CAD)

原理:在已知加速度下测力矩,反解有效惯量。

步骤

  1. 补偿好重力和摩擦(保证静止悬浮)。
  2. 让关节做已知的正弦加速运动,比如 q=Asin⁡(ωt),其中 ω 选在 1~5 Hz。
  3. 记录运动中的力矩输出 τcmd。
  4. 由于

,减去已知的重力和摩擦补偿,剩下的部分就是 τ_inertia。

  1. 计算加速度 
  1. 用最小二乘拟合:

优点:完全实测,不需要CAD。

缺点:加速度信号如果来自编码器差分,噪声大,需要良好滤波。在慢速清洁场景中,惯性项小,辨识精度有限。

方法C:经验公式近似

对于纯旋转关节,如果把连杆简化为一个集中质量 m 位于质心距离 d 处:

可以从重力补偿标定中反向估算出 m⋅d(因为 τg=mgdcos⁡(q)),进而得到:

这种方法精度不高,但对于判断惯性项是否可以忽略非常有用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、τff项解释
    • 累加的实现方式,比如每个控制周期(如 2ms)执行:
    • 三个函数是独立计算、然后累加,它们的输入不同、整定方式不同、触发条件也不同:
  • 二、重力项和摩擦项的获取
  • 三、惯性项获取
    • 3.1 惯性项
    • 3.2 什么时候需要
    • 3.3 获取惯性项
      • 方法A:从CAD模型计算(最方便)
      • 方法B:动态辨识实验(无需CAD)
      • 方法C:经验公式近似
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档