参数受限MPC与Matlab/Simulink/C++实现
写在前面
预测时域长度Np应包含对象的主要动态部分,越小越快速,不稳定,越大,实时性降低,响应越慢。
控制时域长度Nc越小越慢,鲁棒性越好,越大机动性越强,稳定性降低。
控制量变化权重rw越小闭环响应越快,越大说明控制量变化在优化函数占权重越大。
目录
1.建模
控制对象为二阶惯性时滞系统,传递函数为
2.离散化
采样时间间隔Δt=0.06,使用近似离散化得离散化状态空间模型
3.建立增广矩阵
4.预测
预测时域长度为Np,控制时域长度为Nc
5.优化
5.1 定义二次型优化函数
定义设定值和预测输出之间的误差函数J(cost function)为
5.2 变量含约束
5.3 优化求解
求解方法是使用Hildreth’s QP程序(约束梯度最小化算法,OPhild.m)。
6.滚动
7.Matlab仿真
7.1仿真结果
采样时间Δt=0.06s,预测时域长度Np=100,控制时域长度为Nc=7,控制量变化权重rw=0.001,参考信号r=0.1。
7.1.1 仅改变Np
Np=50,越小越快速,不稳定
7.1.2 仅改变rw
rw=0.1,控制量变化减小了,但是稳定性降低了
7.1.3 仅改变Nc
Nc=50,越大机动性越强,稳定性降低
8.Simulink仿真
8.1 仿真模型.slx文件
8.2 仿真结果
9.附不含约束和含约束的结果
控制变量不含约束时
控制变量含约束时
还有一个Np=70,Nc=2的结果
10.C++实现
函数都写完了,和simulink联合通信,bug出现在Xf的最后一行并不是y...这个bug暂时不知道咋调,明天再说吧。