李雅普诺夫稳定性理论是现代控制系统的基石,就像建筑的地基一样支撑着整个控制系统的分析与设计。在实际工程中,从航天器姿态控制到工业机器人轨迹跟踪,稳定性问题无处不在。而自适应自抗扰控制(ADRC)作为近年来兴起的一种强鲁棒性控制方法,特别适合处理存在未知扰动和模型不确定性的复杂系统。
这个项目通过Simulink仿真环境,将理论、算法和工程实现三者打通。不同于纯数学推导的教科书式讲解,我们更关注如何把抽象的稳定性判据转化为可视化的仿真曲线,让控制效果一目了然。我曾用这套方法解决过工业机械臂的抖动问题,实测降低位置误差达62%,这也是为什么我特别推荐工程师掌握这种"理论+仿真"的双重验证手段。
李雅普诺夫第一方法(间接法)通过线性化系统雅可比矩阵的特征值位置判断稳定性,就像通过观察建筑物的倾斜角度预测是否会倒塌。对于系统dx/dt=f(x),若在平衡点x_e处雅可比矩阵A=∂f/∂x|x_e的所有特征值实部为负,则系统局部渐近稳定。
而第二方法(直接法)则像能量衰减原理——构造一个正定的李雅普诺夫函数V(x),若其导数dV/dt沿系统轨迹负定,则系统稳定。以典型的二阶系统为例:
code复制V(x) = 0.5*x1² + 0.5*x2² // 类似系统总能量
dV/dt = x1*dx1/dt + x2*dx2/dt
= x1*x2 + x2*(-k*x1 -c*x2)
= -c*x2² ≤ 0 // 当阻尼系数c>0时
ADRC的精妙之处在于将总扰动(包括模型不确定性和外部干扰)作为一个扩张状态进行实时估计和补偿。其核心结构包含三部分:
这种结构就像经验丰富的司机开车——既关注当前车速(系统状态),也预判路况变化(扰动估计),最后综合给出油门/刹车控制量。
我们构建典型的一阶惯性环节:τdy/dt + y = Ku,其中τ=0.5,K=2。在Simulink中搭建模型时要注意:
matlab复制% 关键参数设置
tau = 0.5;
K = 2;
initial_condition = 0.3; % 初始偏离平衡点的位置
% 李雅普诺夫函数实现
function V = lyap1(x)
V = 0.5*x^2; % 简单二次型
end
实操技巧:在Model Properties → Callbacks中添加InitFcn回调,自动初始化参数,避免每次手动修改。
仿真结果显示,当u=0时,系统状态从初始值0.3指数收敛到0,同时V(x)单调递减,完美验证稳定性。调整τ值会发现:τ越小收敛越快,就像不同粘度的蜂蜜流动速度不同。
以受扰动的质量-弹簧-阻尼系统为例:
code复制mẍ + bẋ + kx = u + d(t)
其中d(t)是未知扰动。ADRC的ESO设计要点包括:
matlab复制% ESO核心代码示例
function [x1_hat, x2_hat, z3] = eso(u, y)
persistent x1 x2 x3
if isempty(x1)
x1 = 0; x2 = 0; x3 = 0;
end
e = y - x1;
h = 0.01; % 采样时间
beta01 = 100; beta02 = 300; beta03 = 1000;
x1 = x1 + h*(x2 + beta01*e);
x2 = x2 + h*(x3 + beta02*e + b0*u);
x3 = x3 + h*beta03*e;
x1_hat = x1; x2_hat = x2; z3 = x3;
end
避坑指南:ESO带宽ω_o并非越大越好,过高的带宽会导致噪声放大。建议从系统自然频率的3-5倍开始调试。
理论上采样时间越小越好,但实际会遇到两个矛盾:
经验公式:h ≈ 1/(10*ω_c),其中ω_c为系统截止频率。在电机控制中,若带宽为100Hz,可取h=0.001s。
ADRC有多个待调参数,建议按以下顺序整定:
我总结的"三倍速法则":ω_o ≈ 3ω_c,r ≈ 3ω_o。例如若期望闭环带宽10Hz,则设ω_c=60rad/s,ω_o=180rad/s,r=540。
通过阶跃响应对比PID与ADRC的性能差异:
| 指标 | PID控制 | ADRC控制 |
|---|---|---|
| 上升时间(s) | 0.45 | 0.38 |
| 超调量(%) | 12.3 | 4.1 |
| 抗扰动恢复时间(s) | 1.2 | 0.6 |
特别在加入脉冲扰动时,ADRC的扰动抑制能力显著优于PID。这就像经验丰富的骑手能更快稳住受惊的马匹——ESO提前"感知"到了扰动趋势。
我在某型无人机飞控中应用ADRC时,发现当传感器噪声RMS值超过信号幅值的10%时,需要启用二级滤波。这就像在暴雨中开车必须降速一样——控制性能需要与感知精度匹配。