之前的博客都是讲的理论,现在以一个实际控制例子进行仿真分析。弹簧质量阻尼系统是最典型的二阶系统,本文就用MPC算法来控制弹簧质量阻尼系统。首先建立弹簧质量阻尼系统的模型,然后将连续时间模型转换成离散模型,推倒预测和优化方程,将控制问题转化成标准二次型问题,分别使用解析法和数值法两种优化求解方式,最后用Matlab进行了单位阶跃响应MPC控制仿真。文末给出了仿真源码的地址。
弹簧质量阻尼系统如下图所示:
图1 弹簧质量阻尼系统
系统动力学方程为:
取状态向量为:,控制量为:
,系统输出量为:
,则动力学方程可以写为:
其中,令
则连续状态方程可以写成如下形式:
将连续状态方程转换成离散方程,最简单的就是通过matlab函数c2dm。例如在上述模型中,假设,离散采样时间为
,则连续状态方程的矩阵分别为:
通过c2dm函数得到的离散模型如下:
也可以手动推导出离散方程。采用前向法,以上状态方程可以写成:
则离散状态方程矩阵为:
在弹簧质量阻尼系统中,则是:
将参数代进去计算,与c2dm函数结果基本相同,只有一些微小的数值误差。
MPC的基本思路就是将控制问题转化成标准二次型优化问题:
(这种表示方式来自matlab quadprog函数的help文件)
理解了这个思想,接下来就剩两个问题:
1、怎么将控制问题表示成二次型问题?
2、怎么求解二次型问题?
关于第2点很容易解决,数值解法和解析解法都有,而且很多开源函数库,专门求解二次型问题。这个专栏里第一到七篇都是讲的如何通过解析解的方式构造并求解MPC控制的优化问题,从第八篇开始,逐渐转到数值解的求法。解析求法推导过程复杂,而且对于有些约束条件情况下无法求解,但是运算量不大,适合部署在小型实时内核中。数值解法优势更明显,可以增加更多约束条件,进行更多状态变量的控制,推导过程也更加清晰,许多开源函数库可以求解二次型优化问题,但是要求硬件平台有一定的计算能力。
基于k时刻状态变量对未来个周期内的状态进行预测,结果表示为:
个未来的控制变量序列表示为:
这个序列也是需要通过优化求解得到的控制序列。将上述两个序列代入离散模型中得到:
写成矩阵形式:
其中
预测未来个周期内的状态需要知道
个周期的参考输入,参考输入序列为:
定义代价函数为:
代价函数的第一项反映了输入信号与预测的输出信号之间的误差,第二项则是为了限制控制量U,避免控制量太大。其中Q和W都是对角矩阵,
,Q控制误差的权值,W是控制量的权值。
将代价函数化简,并去掉对优化没影响的常数项得到:
其中,对比一下标准二次型的表达式,可以看出:
至此,就可以调用二次规划求解函数quadprog进行优化求解。
控制周期0.01s,仿真时间5s,系统模型参数跟上一节相同,为了简单起见,避免考虑各种矩阵的维度,假设控制时域和预测时域相等
,控制量权值
,误差量权值
,仿真得到的输出量和控制量如下图所示。
图2 数值法MPC阶跃响应输出
图3 解析法MPC控制量
仿真控制的主循环用时25.26s。
具体推导过程参考专栏的一到七篇,这里只给出结论性公式。
首先将离散模型变换到增广模型:
分别对应离散模型中的
。这里的
就表示增广模型的矩阵。这一步可以用matlab实现,源代码在第一篇博客中。
定义代价函数为:
代价函数的第一项反映了输入信号与预测的输出信号之间的误差,第二项则是为了限制控制量△U,避免控制量太大。其中是对角矩阵
,是控制输出的权值。如果
,则说明不用考虑控制变量△U有多大,只考虑控制误差越小越好。如果
取值比较大,则表示需要仔细考虑△U的大小。
要求上述代价函数的最小值,最简单粗暴的方法就是求一阶导:
当J的一阶导为零时,可以求得控制变量的最优解:
这就是最优的控制量(增量式的)序列,将其改写成:
这就是最优的控制量,其中包含了个控制序列,只使用这一序列中的第一个变量对系统进行控制,忽略这一序列中的其余变量。当下一可采样周期到来时,使用新观测的状态变量,重复以上优化过程,计算出新的控制变量序列,从而使优化窗口不断向前推进,每一采样时刻都进行实时预测与优化。一个优化控制过程的源代码在第二篇博客中。
控制周期0.01s,仿真时间5s,系统模型参数跟上一节相同,控制时域
,预测时域
,控制量权值
,仿真得到的输出量和控制量如下图所示。
图4 解析法MPC阶跃响应输出
图5 解析法MPC控制量
仿真控制的主循环用时0.006s。
[1] Liuping Wang. Model Predictive Control System Design and Implementation Using MATLAB.
源代码包里面包括两种仿真方法的m文件:
源码连接如下:
弹簧质量阻尼系统的MPC控制算法仿真m文件源码-机器学习文档类资源-CSDN下载用MPC算法来控制弹簧质量阻尼系统。首先建立弹簧质量阻尼系统的模型,然后将连续时间模型转换成离散模型更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u014170067/85038612