自适应控制 MRAC Simple模拟器 工具列表
交互式模拟器

自适应控制 MRAC Simple模拟器

实时绘制对象输出 y(t) 追踪参考模型 y_m(t)、追踪误差 e 缩小、适应增益 θ(t) 收敛的过程。适应增益 γ 越大收敛越快,过大则发散。

参数输入
预设
对象时间常数 τ_p
s

被控对象响应速度。

参考模型时间常数 τ_m
s

期望参考模型速度。

适应增益 γ
-

参数更新强度。越大收敛越快,过大则发散。

外扰强度
%

负载变化或未建模外扰。

实时数值
0.0
时刻 t [s]
0.00
对象 y
0.00
参考模型 y_m
0.000
追踪误差 e
0.00 / 0.00
θ_r / θ_y
适应中…
输出追踪 y(t) 与参考模型 y_m(t)
对象 y(t) 参考模型 y_m(t) 指令 r(t)
追踪误差 e = y − y_m
适应增益 θ_r(t), θ_y(t)
θ_r (前馈) θ_y (反馈) 理想值 θ*
计算结果
稳态追踪误差 (RMS)
适应整定时间
振荡倾向
适应进展
理论与主要公式

使一阶对象跟随一阶参考模型:

$$\dot y=-\tfrac{1}{\tau_p}y+\tfrac{1}{\tau_p}u+d,\qquad \dot y_m=-\tfrac{1}{\tau_m}y_m+\tfrac{1}{\tau_m}r$$

控制律与 MIT 规则(自适应律):

$$u=\theta_r\,r-\theta_y\,y,\qquad e=y-y_m,\qquad \dot\theta_r=-\gamma\,e\,r,\quad \dot\theta_y=\gamma\,e\,y$$

理想匹配增益(增益曲线的收敛目标):

$$\theta_r^{*}=\frac{\tau_p}{\tau_m},\qquad \theta_y^{*}=\frac{\tau_p}{\tau_m}-1$$

$\gamma$ 越大收敛越快,但过大时 $\theta$ 会剧烈振荡甚至失控。有外扰时 $e$ 无法完全归零,增益持续漂移(参数漂移)。验证:$\tau_p=2.5,\ \tau_m=1.2$ → 收敛至 $\theta_r^{*}\approx2.08,\ \theta_y^{*}\approx1.08$。

什么是 MRAC(模型参考自适应控制)

MRAC(Model Reference Adaptive Control,模型参考自适应控制)是一种经典的自适应控制方法。即使被控对象(plant)的精确参数未知,或在运行中发生变化,它也能在线自动调节控制器增益,使输出与所选参考模型的响应保持一致。

本模拟器使一阶对象 $\dot y=-y/\tau_p+u/\tau_p+d$ 跟随期望的一阶参考模型 $\dot y_m=-y_m/\tau_m+r/\tau_m$。控制器具有前馈增益 $\theta_r$ 和反馈增益 $\theta_y$,并使用追踪误差 $e=y-y_m$ 通过 MIT 规则更新增益。

如何解读本模拟器

输出追踪图:蓝线是对象输出 y(t),橙色虚线是参考模型输出 y_m(t)。开始时蓝线偏离,随时间推移逐渐重合。重合即表示适应完成。

追踪误差图:e=y−y_m 的历史。指令切换瞬间误差会跳变,但随适应推进峰值变小并贴近零线。若误差始终不缩小,说明 γ 过小或过大。

适应增益图:θ_r(绿)和 θ_y(红)向白色虚线所示的理想匹配增益 θ* 移动。增益变平表示适应稳定;持续抖动则表示 γ 过大(振荡、失控)。

通过对话理解 MRAC 参考模型追踪

🙋
动画里蓝色的对象曲线逐渐与橙色参考模型曲线重合,这是在做什么?
🎓
简单说,控制器发现自己的增益还不对,就在运行中实时修正。它盯着追踪误差 e=y−y_m,朝误差相反的方向一点点调整增益,这就是 MIT 规则 dθ/dt=−γ e φ。重合的瞬间就是适应完成。
🙋
原来如此。那把适应增益 γ 调大,就能更快重合,岂不是更好?
🎓
到一定程度为止是这样。按下"快速收敛"预设,γ 较大,几秒内误差就消失。但按"振荡"预设看看:γ 极大时一次更新就过冲,增益 θ 剧烈抖动,有外扰时误差持续摆动合不上。就像方向盘打得太猛而蛇行的车。
🙋
增益图里绿线和红线逐渐靠近白色虚线,那条虚线是什么?
🎓
那是理想匹配增益 θ*。对一阶系统可以算出来:θ_r*=τ_p/τ_m,θ_y*=τ_p/τ_m−1。MRAC 不知道这个值,仅凭误差就能到达那里。曲线恰好落在虚线上,意味着它自行找到了正确的增益——在对象时间常数未知的真实设备上,这一点很关键。
🙋
把外扰滑块调大后,即使重合了曲线也一直在轻微抖动,这有问题吗?
🎓
观察得很好。有外扰时误差无法完全归零,于是 MRAC 认为"还有误差"而持续移动增益,这叫参数漂移。放任不管,增益可能慢慢失控。实务中会加入误差很小时停止适应的死区,或用 σ 修正/e 修正把增益约束住。
🙋
那么在本工具里定好 γ 后,可以直接用到真实设备上吗?
🎓
请把它当作初步研究。这个简化模型只有一阶对象加一阶参考模型。真实对象有纯滞后和高阶振荡模态,直接用 MIT 规则容易失稳。最终判断要结合标准、实测值、详细分析和厂家条件,并配合基于李雅普诺夫设计的自适应律与输入限幅。

实际应用

伺服/运动控制:负载惯量在运行中变化的多轴 NC 机床和机器人手臂伺服,固定增益会导致追踪性能下降。

航空航天:随燃料消耗质量大幅变化的飞机、导弹飞行控制(MRAC 历史上的发源领域之一)。

过程/工程机械:动特性随温度或材料改变的化工过程,以及液压执行器的负载变化补偿。

常见误解与注意事项

"γ 越大越好"是错误的:γ 是收敛速度与稳定性的折衷。请用"振荡"预设观察过大的 γ 如何让增益剧烈摆动、失控。

"误差为 0 = 增益正确"并不一定成立:缺少持续激励(PE 条件)的指令下,即使误差为 0,增益也可能不收敛到理想值。指令必须充分"变化"。

外扰和未建模动态会引起漂移:原始 MIT 规则对外扰脆弱,实务中必须配合鲁棒修正(σ 修正、死区、归一化)。

常见问题

先看追踪误差 e=y−y_m 是否随时间趋近 0。动画中对象输出 y(t)(蓝)与参考模型输出 y_m(t)(橙色虚线)重合,即表示适应在推进。接着看适应增益 θ_r、θ_y 是否稳定到水平线。增益变平且误差消失的瞬间即为"适应完成"。
MIT 规则 dθ/dt=−γ e φ 中 γ 越大,增益更新越快。γ 过大时单步更新量过大,在误差符号反转前就过冲,导致增益剧烈振荡甚至失控。本模拟器的"振荡"预设会显示 θ(t) 抖动而误差持续摆动。实务中应从较小值起逐步增大 γ,并保持在误差单调下降的范围内。
一阶对象的理想匹配增益为 θ_r*=τ_p/τ_m、θ_y*=τ_p/τ_m−1。希望参考模型越快(τ_m 越小),所需的前馈 θ_r 和反馈 θ_y 越大。动画中的增益曲线会收敛到这些理想值(虚线)。比值过大时控制输入容易饱和,真实设备上需考虑输入限幅。
有外扰时追踪误差无法完全归零,增益持续轻微抖动(参数漂移),因为 MRAC 把外扰当作误差而不断移动增益。对策包括在误差很小处停止适应的死区,以及用 σ 修正/e 修正防止增益失控。外扰滑块可让你观察这种抖动的大小。
本工具是最基本的 MRAC:一阶对象加一阶参考模型。在具有高阶系统、纯滞后、非最小相位或较大未建模动态的真实设备上,原始 MIT 规则可能失稳。实现中会结合基于李雅普诺夫的自适应律、归一化、鲁棒修正(σ/e/死区)和输入限幅。最终判断仍需结合标准、实测值、详细分析和厂家条件。

使用指南

  1. 设置对象时间常数 τ_p(秒)和参考模型时间常数 τ_m(秒)。当慢对象(τ_p 大)跟随快模型(τ_m 小)时,适应效果最明显
  2. 设置适应增益 γ,在动画播放时观察蓝色对象曲线与橙色参考模型曲线重合的速度,以及增益曲线收敛到理想值(虚线)的过程
  3. 用"快速收敛""慢速收敛""振荡"预设比较行为,并调大外扰滑块观察适应完成后的抖动(参数漂移)

具体计算示例

要让伺服电机(对象时间常数 τ_p=2.5 s)跟随更快的参考模型(τ_m=1.2 s),理想匹配增益为 θ_r*=τ_p/τ_m=2.08、θ_y*=τ_p/τ_m−1=1.08。以 γ=3 播放时,MRAC 在不知道这些值的情况下,仅凭误差在几秒内收敛到 θ_r→2.08、θ_y→1.08,对象输出几乎与参考模型重合。γ=0.2 时收敛慢且残留误差;γ 极大时单步更新过大导致增益剧烈摆动、失控。该思想被应用于多轴 NC 机床的轴补偿,以及随燃料消耗质量变化的飞行器控制。

实务注意事项