4. 模型参考自适应控制(MRAC):MIT规则、李雅普诺夫稳定性设计、机器人应用案例

模型参考自适应控制,简称MRAC,是我在机器人项目中用得最多的一种自适应方法。说白了,就是给系统找个“榜样”——一个理想的参考模型,然后让实际系统去模仿它。你想想看,这就像带徒弟,你先做一遍标准动作,让他跟着学,学得不对就调整。

核心思想:设计一个参考模型,描述我们期望的系统行为。然后通过自适应律,实时调整控制器参数,让实际系统输出尽可能接近参考模型的输出。

4.1 MRAC的基本结构

我个人习惯把MRAC拆成三块来看:

  • 参考模型:你想要系统变成的样子,通常是低阶、稳定的线性系统
  • 控制器:带可调参数的反馈控制器
  • 自适应律:根据误差信号调整控制器参数的规则

我在项目中遇到过一个问题:参考模型选得太复杂,结果自适应律收敛极慢,机器人抖得跟筛子似的。后来我学乖了,参考模型尽量用一阶或二阶系统,够用就行。

参考模型 控制器 被控对象 自适应律 误差 e(t) 参数调整 输出 y(t) 输入 r(t)

4.2 MIT规则

MIT规则是MRAC里最经典的自适应律设计方法。它源自MIT的一个研究团队,名字就这么来的。核心思路是用梯度下降法,让误差的平方最小化。

数学表达:

dθ/dt = −γ · e · ∂e/∂θ

其中:
θ — 可调参数
γ — 自适应增益(学习率)
e — 输出误差(y − y_m)
∂e/∂θ — 灵敏度导数

我的经验:MIT规则实现简单,但有个坑——自适应增益γ不能太大。我曾经调一个机械臂的MRAC,γ设大了,系统直接发散,手臂甩得差点砸到人。嗯,安全第一,γ从小往大慢慢试。

MIT规则的优缺点:

优点 缺点
实现简单,计算量小 不能保证全局稳定性
物理意义直观 对参考输入信号敏感
适合嵌入式实时系统 增益选取依赖经验

4.3 李雅普诺夫稳定性设计

MIT规则虽然好用,但稳定性没保障。李雅普诺夫方法就是来解决这个问题的。说白了,就是构造一个“能量函数”,只要证明这个函数一直在减小,系统就是稳定的。

设计步骤:

  1. 定义误差状态:e = y − y_m
  2. 构造李雅普诺夫函数:V = ½e² + ½θ̃²/γ(θ̃是参数误差)
  3. 求导并设计自适应律,让V̇ ≤ 0
// 李雅普诺夫自适应律示例
// 针对一阶系统:dy/dt = −ay + bu
// 参考模型:dy_m/dt = −a_m·y_m + b_m·r

// 自适应律
da/dt = γ_a · e · y
db/dt = γ_b · e · r

// 其中 e = y − y_m
// γ_a, γ_b 为正的自适应增益

注意:李雅普诺夫方法虽然保证了稳定性,但收敛速度可能很慢。我在一个焊接机器人项目里就遇到过,参数调了半小时才稳定下来。后来加了持续激励信号,才把收敛时间压到10秒以内。

4.4 机器人应用案例

讲个我实际做过的案例——六自由度机械臂的末端力控制。

问题描述:机械臂在打磨工件时,末端接触力需要保持恒定。但工件表面不平,加上臂本身有柔性,固定增益PID根本搞不定。

MRAC方案:

  • 参考模型:二阶系统,阻尼比0.7,自然频率5 rad/s
  • 控制器:力反馈PID,比例增益可调
  • 自适应律:李雅普诺夫方法设计

实现效果:

指标 固定PID MRAC
力误差稳态值 ±3.5 N ±0.8 N
调节时间 2.1 s 0.6 s
超调量 28% 8%

关键代码片段(简化版):

// MRAC力控制主循环
void mrac_force_control() {
    // 1. 读取力传感器
    float f_actual = read_force_sensor();
    
    // 2. 计算误差
    float e = f_actual - f_desired;
    
    // 3. 参考模型输出
    f_ref = 0.8 * f_ref_prev + 0.2 * f_desired;
    
    // 4. 自适应律(李雅普诺夫)
    float de = e - e_prev;
    kp += gamma * e * de;  // 比例增益调整
    
    // 5. 控制输出
    float u = kp * e + kd * de;
    set_motor_current(u);
    
    // 6. 更新状态
    e_prev = e;
    f_ref_prev = f_ref;
}

避坑指南:我曾经在调试时发现,力传感器噪声会导致自适应律误调整。解决办法是在误差信号上加一个低通滤波器,截止频率设在10Hz左右。另外,自适应增益要设置上下限,防止参数漂移。

MRAC在机器人领域的应用远不止力控制。我见过用在移动机器人轨迹跟踪上的,也有用在无人机姿态控制上的。核心就一句话:找个好榜样,然后跟着学。但别忘了,参考模型别选太复杂,自适应增益别调太大,传感器噪声要处理好。做到这三点,你的MRAC基本就稳了。

专注资料整理