基于模型参考自适应控制 (MRAC) 的 MATLAB 仿真系统
项目简介
本项目设计并实现了一个基于Lyapunov稳定性理论的模型参考自适应控制(Model Reference Adaptive Control, MRAC)仿真平台。该系统通过MATLAB脚本构建,旨在模拟和验证自适应控制器在面对受控对象参数不确定性及突变时的鲁棒性和跟踪性能。
核心算法采用了状态反馈结合前馈补偿的控制结构,利用Lyapunov方程导出自适应律,确保闭环系统的全局稳定性。仿真过程不仅展示了理想状况下的跟踪效果,还特别引入了物理参数突变场景,直观演示了控制器参数在线自动调节的过程。
主要功能特性
- 二阶系统建模:构建了标准的二阶SISO(单输入单输出)线性被控对象与理想参考模型。
- Lyapunov自适应律:通过求解Lyapunov方程 $A_m^T P + P A_m = -Q$ 设计参数更新算法,保证误差信号渐进收敛。
- 鲁棒性测试机制:内置参数突变逻辑,模拟系统运行中途发生的负载变化或部件老化(如刚度增加、控制增益衰减)。
- 混合参考信号激励:采用方波与正弦波组合的输入信号,验证系统对阶跃响应和频率响应的跟踪能力。
- 自适应增益可视化:提供了控制器内部参数(状态反馈增益 $K_x$ 和前馈增益 $K_r$)随时间演变的动态曲线。
- 全参数可配置:仿真步长、参考模型阻尼比/自然频率、学习率(Gamma)、Lyapunov权重矩阵等均可在脚本中调整。
系统要求
- 软件环境:MATLAB R2016a 或更高版本(需包含 Control System Toolbox 以支持
lyap 函数)。 - 硬件要求:标准PC即可,无需高性能计算资源。
使用方法
- 将项目代码保存为
main.m 文件。 - 在 MATLAB 命令窗口中输入
main 并回车,或直接点击运行按钮。 - 程序将自动执行仿真计算,并在控制台输出关键事件(如开始仿真、参数突变时刻、最终误差统计)。
- 运行结束后,系统会弹出一组包含6个子图的综合波形窗口,展示仿真结果。
核心代码逻辑与算法分析
本项目的逻辑完全封装在单一脚本中,按照以下流程执行:
1. 仿真环境与模型定义
- 时域设置:仿真总时长为50秒,采样步长为1毫秒 ($dt=0.001s$),确保了数值积分的高精度。
- 参考模型:定义了一个无超调的过阻尼二阶系统 ($zeta = 0.9, omega_n = 2.0$) 作为理想行为标准。
- 初始被控对象:设定了初始的被控对象参数 ($A_p, B_p$),其动力学特性与参考模型不同,且控制效能相对较低。
2. 自适应控制器设计 (Lyapunov方法)
- Lyapunov方程求解:代码利用 MATLAB 的
lyap 函数求解正定矩阵 $P$,其中权重矩阵 $Q$ 设为 $10 times I$。这是自适应律推导的核心,用于保证系统的能量函数随时间递减。 - 增益初始化:控制器的初始反馈增益 $K_x$ 和前馈增益 $K_r$ 被人为初始化为零,强制系统完全依赖自适应算法从零开始学习。
- 学习率配置:设定了较高的自适应增益矩阵 (
Gamma = 50),这决定了参数收敛的速度。
3. 参考信号生成
- 为了全面测试系统性能,参考输入信号 $r(t)$ 被设计为分段函数:
*
0-20秒:低频方波,用于测试系统的瞬态响应和阶跃跟踪能力。
*
20-50秒:正弦波,用于测试系统在动态变化输入下的稳态跟踪精度。
4. 主仿真循环与参数更新
- 误差计算:实时计算实际状态 $x_p$ 与参考模型状态 $x_m$ 之间的误差向量 $e$。
- 自适应律实现:
* 计算梯度项:基于 $e^T P B_{adjust}$ 计算适应度梯度。
* 利用欧拉积分法(Euler Integration)实时更新控制增益:$K_x(k+1) = K_x(k) + dK_x cdot dt$。
- 控制律计算:构建控制输入 $u = K_x^T x_p + K_r r$,并对其施加了幅值 $pm 20$ 的饱和限幅,以模拟真实物理执行器的限制。
- 状态更新:分别对参考模型和被控对象进行欧拉数值积分,推演下一时刻的状态。
5. 模拟参数突变 (Robustness Test)
- 代码中硬编码了一个事件:在 t = 25秒 时,被控对象的系统矩阵 $A_p$ 和输入矩阵 $B_p$ 发生瞬时改变。
- 模拟场景:系统刚度变大(由-1变为-2),且输入控制增益 $B_p$ 显著减小(由0.5变为0.2)。这意味着控制器必须输出更大的控制量才能维持同样的跟踪效果,以此验证算法的鲁棒性。
结果可视化说明
仿真结束后生成的图表包含以下六个部分:
- 系统输出跟踪性能:黑色虚线(参考模型)与红色实线(实际输出)的对比,直接展示跟踪效果。
- 输出跟踪误差:展示误差 $e(t)$ 随时间的收敛情况,特别是在25秒参数突变后的误差波动与再收敛过程。
- 控制器输出:显示控制信号 $u(t)$ 的变化,可以看到在参数突变后,控制量幅值明显增加以补偿系统增益的降低。
- 自适应状态反馈增益:展示 $K_{x1}$ 和 $K_{x2}$ 两个参数如何从零开始自动调节直至稳定。
- 自适应前馈增益:展示 $K_r$ 的自适应过程。
- 相平面图:在状态空间 ($x_1 - x_2$) 中对比实际轨迹与参考轨迹,验证系统状态的完整动态一致性。
统计结果
程序运行结束时,控制台会输出最终稳态误差 (RMS),通常表明在经历初始震荡和中途扰动后,系统依然能够达到极高的跟踪精度。