模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真

        之前的博客都是讲的理论,现在以一个实际控制例子进行仿真分析。弹簧质量阻尼系统是最典型的二阶系统,本文就用MPC算法来控制弹簧质量阻尼系统。首先建立弹簧质量阻尼系统的模型,然后将连续时间模型转换成离散模型,推倒预测和优化方程,将控制问题转化成标准二次型问题,分别使用解析法和数值法两种优化求解方式,最后用Matlab进行了单位阶跃响应MPC控制仿真。文末给出了仿真源码的地址。

一、弹簧质量阻尼系统

1.1 数学模型

        弹簧质量阻尼系统如下图所示:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第1张图片

图1 弹簧质量阻尼系统

1.1.1 连续状态方程

        系统动力学方程为:

m\ddot{x}+b\dot{x}+kx=f

        取状态向量为:x=\begin{bmatrix} x\\ \dot{x} \end{bmatrix},控制量为:u=f,系统输出量为:y=x,则动力学方程可以写为:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第2张图片

        其中,令

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第3张图片

        则连续状态方程可以写成如下形式:

1.1.2 离散状态方程

        将连续状态方程转换成离散方程,最简单的就是通过matlab函数c2dm。例如在上述模型中,假设m=1,k=10,b=10,离散采样时间为\Delta t=0.01,则连续状态方程的矩阵分别为:

         通过c2dm函数得到的离散模型如下:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第4张图片

        也可以手动推导出离散方程。采用前向法,以上状态方程可以写成:

 模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第5张图片

        则离散状态方程矩阵为:

         在弹簧质量阻尼系统中,则是:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第6张图片

         将参数代进去计算,与c2dm函数结果基本相同,只有一些微小的数值误差。

二、预测控制

        MPC的基本思路就是将控制问题转化成标准二次型优化问题:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第7张图片

         (这种表示方式来自matlab quadprog函数的help文件)

        理解了这个思想,接下来就剩两个问题:

        1、怎么将控制问题表示成二次型问题?

        2、怎么求解二次型问题?

        关于第2点很容易解决,数值解法和解析解法都有,而且很多开源函数库,专门求解二次型问题。这个专栏里第一到七篇都是讲的如何通过解析解的方式构造并求解MPC控制的优化问题,从第八篇开始,逐渐转到数值解的求法。解析求法推导过程复杂,而且对于有些约束条件情况下无法求解,但是运算量不大,适合部署在小型实时内核中。数值解法优势更明显,可以增加更多约束条件,进行更多状态变量的控制,推导过程也更加清晰,许多开源函数库可以求解二次型优化问题,但是要求硬件平台有一定的计算能力。

2.1 数值法

2.1.1 转化成优化问题

        基于k时刻状态变量对未来N_{p}个周期内的状态进行预测,结果表示为:

        N_{c}个未来的控制变量序列表示为:

         这个序列也是需要通过优化求解得到的控制序列。将上述两个序列代入离散模型中得到:

 模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第8张图片

         写成矩阵形式:

        其中

 模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第9张图片

         预测未来N_{p}个周期内的状态需要知道N_{p}个周期的参考输入,参考输入序列为:

 

         定义代价函数为:

 

         代价函数的第一项反映了输入信号与预测的输出信号之间的误差,第二项则是为了限制控制量U,避免控制量太大。其中Q和W都是对角矩阵Q=r_{q}I_{N_{p}\times N_{p}}(r_{q}\geqslant 0)W=r_{w}I_{N_{c}\times N_{c}}(r_{w}\geq 0),Q控制误差的权值,W是控制量的权值。

        将代价函数化简,并去掉对优化没影响的常数项得到:

        其中E=Fx(k)-R_{k},对比一下标准二次型的表达式,可以看出:

 

         至此,就可以调用二次规划求解函数quadprog进行优化求解。

2.1.2 matlab仿真

        控制周期0.01s,仿真时间5s,系统模型参数跟上一节相同m=1,k=10,b=10,为了简单起见,避免考虑各种矩阵的维度,假设控制时域和预测时域相等N_{c}=N_{p}=60,控制量权值r_{w}=0.1,误差量权值r_{q}=0.1,仿真得到的输出量和控制量如下图所示。

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第10张图片

图2 数值法MPC阶跃响应输出

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第11张图片

图3 解析法MPC控制量

        仿真控制的主循环用时25.26s。

2.2 解析法

        具体推导过程参考专栏的一到七篇,这里只给出结论性公式。

2.2.1 增广模型

        首先将离散模型变换到增广模型:

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第12张图片

        A_{m},B_{m},C_{m}分别对应离散模型中的A_{d},B_{d},C_{d}。这里的A,B,C就表示增广模型的矩阵。这一步可以用matlab实现,源代码在第一篇博客中。

2.2.2 计算F,\Phi

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第13张图片

 2.2.3 代价函数

         定义代价函数为:

         代价函数的第一项反映了输入信号与预测的输出信号之间的误差,第二项则是为了限制控制量△U,避免控制量太大。其中\bar{R}是对角矩阵\bar{R}=r_{w}I_{N_{c}\times N_{c}}(r_{w}\geq 0 ),是控制输出的权值。如果r_{w}=0,则说明不用考虑控制变量△U有多大,只考虑控制误差越小越好。如果r_{w}取值比较大,则表示需要仔细考虑△U的大小。

2.2.4 优化求解

        要求上述代价函数的最小值,最简单粗暴的方法就是求一阶导:

         当J的一阶导为零时,可以求得控制变量的最优解:

         这就是最优的控制量(增量式的)序列,将其改写成:

        这就是最优的控制量,其中包含了N_{c}个控制序列,只使用这一序列中的第一个变量对系统进行控制,忽略这一序列中的其余变量。当下一可采样周期到来时,使用新观测的状态变量,重复以上优化过程,计算出新的控制变量序列,从而使优化窗口不断向前推进,每一采样时刻都进行实时预测与优化。一个优化控制过程的源代码在第二篇博客中。

2.2.5 matlab仿真

        控制周期0.01s,仿真时间5s,系统模型参数跟上一节相同m=1,k=10,b=10,控制时域N_{c}=1,预测时域N_{p}=60,控制量权值r_{w}=0.1,仿真得到的输出量和控制量如下图所示。

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第14张图片 

图4 解析法MPC阶跃响应输出

模型预测控制(MPC)(九):弹簧质量阻尼的MPC仿真_第15张图片

图5 解析法MPC控制量

         仿真控制的主循环用时0.006s。

 三、总结

  1. 上述数值解法优化求解得到的控制量直接用于系统控制,相当于是绝对式控制;而上述解析法求解得到的控制量是控制量的增量,相当于是增量式控制。
  2. 两种解法仿真结果相似,都能达到控制要求,但是所需的控制参数不一样,这主要跟绝对式和相对式控制方式的差异有关。
  3. 在仿真时长相同的情况下,解析式解法比数值式解法快很多,这也是符合实际的。

四、参考文献

        [1] Liuping Wang. Model Predictive Control System Design and Implementation Using MATLAB.

        源代码包里面包括两种仿真方法的m文件:

 

  1. 数值法仿真源码;
  2. 解析法仿真源码;

        源码连接如下:

弹簧质量阻尼系统的MPC控制算法仿真m文件源码-机器学习文档类资源-CSDN下载用MPC算法来控制弹簧质量阻尼系统。首先建立弹簧质量阻尼系统的模型,然后将连续时间模型转换成离散模型更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u014170067/85038612

你可能感兴趣的:(模型预测控制(MPC),自动驾驶,动态规划,模型预测控制,二次型优化算法)