当前位置:   article > 正文

模型预测控制MPC详解(附带案例实现)_mpc控制

mpc控制

模型预测控制MPC详解(附带案例实现)

写在前面本文是记录学习B站博主Dr.can的学习笔记,如有侵权请联系笔者删除此文。

1. 最优控制问题

最优控制问题就是研究在约束条件下达到最优的系统表现,通常系统的表现是综合分析的结果。比如考虑一个单输入单输出的系统(SISO),状态变量 x x x,输出为 y y y,要求其输出能跟踪预设的参考值 r r r,误差可以表示为 e = y − r e=y-r e=yr,那么最优控制的目标是

min ⁡ ∫ 0 t e 2 d t \min \int_0^t e^2 dt min0te2dt

如果同时希望输入量 u u u也能越小越好(一般的目的是减少能耗),那最优控制的目标可以是

min ⁡ ∫ 0 t q × e 2 d t + r × u 2 d t \min \int_0^t q\times e^2 dt + r\times u^2 dt min0tq×e2dt+r×u2dt

其中 q , r q,r q,r分别是权重参数,用于调节两个目标的重要性。

考虑一个多输入多输出的系统(MIMO),系统的模型为:

d X d t = A X + B U Y = C X

dXdt=AX+BUY=CX
dtdXY=AX+BU=CX

那么可以将上述的最优化目标改写为:

J = ∫ 0 t E T Q E + U T R U d t J = \int^t_0 E^T Q E + U^T R U dt J=0tETQE+UTRUdt

举一个实际的例子,系统的模型如下所示:

d d t [ x 1 x 2 ] = A [ x 1 x 2 ] + B [ u 1 u 2 ] [ y 1 y 2 ] = [ x 1 x 2 ]

ddt[x1x2]=A[x1x2]+B[u1u2][y1y2]=[x1x2]
dtd[x1x2][y1y2]=A[x1x2]+B[u1u2]=[x1x2]

设置的参考值 R R R为:

R = [ r 1 r 2 ] = [ 0 0 ] R =

[r1r2]
=
[00]
R=[r1r2]=[00]

那么可以推导出误差 E E E为:

E = [ e 1 e 2 ] = [ y 1 − r 1 y 2 − r 2 ] = [ x 1 x 2 ] E =

[e1e2]
=
[y1r1y2r2]
=
[x1x2]
E=[e1e2]=[y1r1y2r2]=[x1x2]

那么上述最优控制的目标函数可以写成:

E T Q E = [ x 1 x 2 ] T [ q 1 0 0 q 2 ] [ x 1 x 2 ] = q 1 x 1 2 + q 2 x 2 2 U T R U = [ u 1 u 2 ] T [ r 1 0 0 r 2 ] [ u 1 u 2 ] = r 1 u 1 2 + r 2 u 2 2 J = ∫ 0 t q 1 x 1 2 + q 2 x 2 2 + r 1 u 1 2 + r 2 u 2 2

ETQE=[x1x2]T[q100q2][x1x2]=q1x12+q2x22UTRU=[u1u2]T[r100r2][u1u2]=r1u12+r2u22J=0tq1x12+q2x22+r1u12+r2u22
ETQEUTRUJ=[x1x2]T[q100q2][x1x2]=q1x12+q2x22=[u1u2]T[r100r2][u1u2]=r1u12+r2u22=0tq1x12+q2x22+r1u12+r2u22

2. 什么是MPC

MPC(Model Predictive Control,模型预测控制)的基本思想是通过建立一个系统的动态模型,并在每一个控制时刻使用这个模型来预测系统未来的行为。基于这些预测,它可以生成一个优化控制序列,然后通过执行第一个控制动作来调整系统状态,接着在下一个时刻重新计算和执行。这个过程反复进行,以使系统能够在未来的一段时间内优化一个特定的性能指标。

通常来说,MPC包括以下四个基本步骤:

  • 系统模型化:建立描述系统动态行为的数学模型,通常是差分方程或微分方程。

  • 预测:在当前时刻基于系统状态和控制输入,使用模型预测未来一段时间内的系统响应。

  • 优化:基于预测的系统响应,通过求解一个优化问题来计算最优的控制输入序列,以最大化或最小化一个性能指标(如系统响应时间、能耗等)。

  • 执行:根据优化得到的控制输入序列中的第一个值,执行这个控制动作,并将实际的系统状态反馈到下一个控制周期中

在具体实施的过程中MPC主要分为下列的三个步骤:

k时刻:

  • step1:估计/测量/读取当前的系统状态;
  • step2:基于 u k , u k + 1 , ⋯   , u k + N \bold{u}_k, \bold{u}_{k+1}, \cdots, \bold{u}_{k+N} uk,uk+1,,uk+N来进行最优化
    J = ∑ k N − 1 E k T Q E k + U k T R U k + E N T F E N ⏟ Terminal Cost J = \sum_k^{N-1} E_k^TQE_k + U_k^T R U_k + \underbrace{E_N^TFE_N}_{\text{Terminal Cost}} J=kN1EkTQEk+UkTRUk+Terminal Cost ENTFEN
    其中Terminal Cost代表了模型滑动窗口的末端的控制误差。
  • step3:只取 u k \bold{u}_k uk,进行滚动优化控制。

3. 二次规划Quadratic Programming

为了能求解MPC问题,我们需要将其转换成二次规划(Quadratic Programming)的形式,对于二次规划已经有很多成熟的求解器了,我们只需要使用这些求解器就能顺利求解。

二次规划一般具有如下的形式:

min ⁡ x x T H x + f T x subject to . . .

min\boldx\boldxTH\boldx+fT\boldxsubject to...
xminxTHx+fTxsubject to...

其中 H H H是正定的对称矩阵, f f f x \bold{x} x是向量。

4. MPC为什么可以转换成QP问题(推导过程)

考虑一个离散的线性系统

x ( k + 1 ) = A n × n x ( k ) + B n × p u ( k ) x n × 1 = [ x 1 x 2 ⋮ x n ] , u p × 1 = [ u 1 u 2 ⋮ u p ] \bold{x}(k+1) = A_{n\times n}\bold{x}(k) + B_{n\times p}\bold{u}(k) \\ \bold{x}_{n\times 1} =

[x1x2xn]
, \bold{u}_{p\times1} =
[u1u2up]
x(k+1)=An×nx(k)+Bn×pu(k)xn×1= x1x2xn ,up×1= u1u2up

假设滚动的窗口大小(预测区间,Predictive Horizon)为 N N N,在 k k k时刻,预测 k k k时刻的输入为 u ( k ∣ k ) \bold{u}(k|k) u(kk),预测 k + 1 k+1 k+1时刻的输入为 u ( k + 1 ∣ k ) \bold{u}(k+1|k) u(k+1∣k),以此类推预测,预测区间的最后一个时刻的输入为 u ( k + N − 1 ∣ k ) \bold{u}(k+N-1|k) u(k+N1∣k),将这些预测输入整合成一个向量

U k = [ u ( k ∣ k ) u ( k + 1 ∣ k ) ⋮ u ( k + i ∣ k ) u ( k + N − 1 ∣ k ) ] \bold{U}_k =

[\boldu(k|k)\boldu(k+1|k)\boldu(k+i|k)\boldu(k+N1|k)]
Uk= u(kk)u(k+1∣k)u(k+ik)u(k+N1∣k)

k k k时刻,系统的状态为 x ( k ∣ k ) \bold{x}(k|k) x(kk) k + 1 k+1 k+1系统的状态为 x ( k + 1 ∣ k ) \bold{x}(k+1|k) x(k+1∣k),以此类推预测,预测区间的最后一个时刻的系统的状态为 x ( k + N − 1 ∣ k ) \bold{x}(k+N-1|k) x(k+N1∣k),然后再加上区间结束后的第一个状态 x ( k + N ∣ k ) \bold{x}(k+N|k) x(k+Nk),将这些系统的状态整合成一个向量

X k = [ x ( k ∣ k ) x ( k + 1 ∣ k ) ⋮ x ( k + i ∣ k ) x ( k + N ∣ k ) ] \bold{X}_k =

[\boldx(k|k)\boldx(k+1|k)\boldx(k+i|k)\boldx(k+N|k)]
Xk= x(kk)x(k+1∣k)x(k+ik)x(k+Nk)

假设系统的输出 y = x \bold{y}=\bold{x} y=x,设定的参考值 r = 0 \bold{r}=0 r=0,那么系统的误差为 e = y − r = x − 0 = x \bold{e}=\bold{y}-\bold{r}=\bold{x}-0 = \bold{x} e=yr=x0=x,为了最优化误差和最优化输入,我们可以这样表示代价函数(Cost Function)

min ⁡ u J = ∑ i = 0 N − 1 ( x ( k + i ∣ k ) T Q x ( k + i ∣ k ) + u ( k + i ∣ k ) T R u ( k + i ∣ k ) ) + x ( k + N ) T F x ( k + N ) ⏟ Terminal Cost \min_\bold{u} J = \sum^{N-1}_{i=0} \Big(\bold{x}(k+i|k)^TQ \bold{x}(k+i|k) + \bold{u}(k+i|k)^TR \bold{u}(k+i|k) \Big) + \underbrace{\bold{x}(k+N)^T F \bold{x}(k+N)}_{\text{Terminal Cost}} uminJ=i=0N1(x(k+ik)TQx(k+ik)+u(k+ik)TRu(k+ik))+Terminal Cost x(k+N)TFx(k+N)

但是乍一看这并不是二次规划的形式,我们可以通过化简将其转化为标准的二次规划形式。

k k k时刻,我们的系统状态可以表示为

x ( k ∣ k ) = x k x ( k + 1 ∣ k ) = A x ( k ∣ k ) + B u ( k ∣ k ) = A x k + B u ( k ∣ k ) x ( k + 2 ∣ k ) = A x ( k + 1 ∣ k ) + B u ( k ∣ k ) = A 2 x k + A B u ( k ∣ k ) + B u ( k + 1 ∣ k ) ⋮ x ( k + N ∣ k ) = A N x k + A N − 1 B u ( k ∣ k ) + ⋯ + B u ( k + N − 1 ∣ k )

\boldx(k|k)=\boldxk\boldx(k+1|k)=A\boldx(k|k)+B\boldu(k|k)=A\boldxk+B\boldu(k|k)\boldx(k+2|k)=A\boldx(k+1|k)+B\boldu(k|k)=A2\boldxk+AB\boldu(k|k)+B\boldu(k+1|k)\boldx(k+N|k)=AN\boldxk+AN1B\boldu(k|k)++B\boldu(k+N1|k)
x(kk)x(k+1∣k)x(k+2∣k)x(k+Nk)=xk=Ax(kk)+Bu(kk)=Axk+Bu(kk)=Ax(k+1∣k)+Bu(kk)=A2xk+ABu(kk)+Bu(k+1∣k)=ANxk+AN1Bu(kk)++Bu(k+N1∣k)

左边即为 X k \bold{X}_k Xk,然后将右边写成矩阵的形式

X k = [ I A A 2 ⋮ A N ] ⏟ M x k + [ 0 0 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 0 B 0 ⋯ 0 A B B ⋯ 0 ⋮ ⋮ ⋱ ⋮ A N − 1 B A N − 2 B ⋯ B ] ⏟ C U k X k = M x k + C U k

\boldXk=[IAA2AN]M\boldxk+[000000B00ABB0AN1BAN2BB]C\boldUk\boldXk=M\boldxk+C\boldUk
XkXk=M IAA2AN xk+C 00BABAN1B000BAN2B0000B Uk=Mxk+CUk

其中 M M M的前 n n n行都是 0 0 0。接下来,我们来将代价函数化成QP的形式

J = ∑ i = 0 N − 1 ( x ( k + i ∣ k ) T Q x ( k + i ∣ k ) + u ( k + i ∣ k ) T R u ( k + i ∣ k ) ) + x ( k + N ) T F x ( k + N ) = x ( k ∣ k ) T Q x ( k ∣ k ) + x ( k + 1 ∣ k ) T Q x ( k + 1 ∣ k ) + ⋯ + x ( k + N − 1 ∣ k ) T Q x ( k + N − 1 ∣ k ) + x ( k + N ∣ k ) T Q x ( k + N ∣ k ) + ∑ i = 0 N − 1 u ( k + i ∣ k ) T R u ( k + i ∣ k ) = [ x ( k ∣ k ) x ( k + 1 ∣ k ) ⋮ x ( k + i ∣ k ) x ( k + N ∣ k ) ] T [ Q Q Q ⋱ F ] ⏟ Q ˉ [ x ( k ∣ k ) x ( k + 1 ∣ k ) ⋮ x ( k + i ∣ k ) x ( k + N ∣ k ) ] + [ u ( k ∣ k ) u ( k + 1 ∣ k ) ⋮ u ( k + i ∣ k ) u ( k + N − 1 ∣ k ) ] T [ R R R ⋱ R ] ⏟ R ˉ [ u ( k ∣ k ) u ( k + 1 ∣ k ) ⋮ u ( k + i ∣ k ) u ( k + N − 1 ∣ k ) ] = X k T Q ˉ X k + U k R ˉ U k

J=i=0N1(\boldx(k+i|k)TQ\boldx(k+i|k)+\boldu(k+i|k)TR\boldu(k+i|k))+\boldx(k+N)TF\boldx(k+N)=\boldx(k|k)TQ\boldx(k|k)+\boldx(k+1|k)TQ\boldx(k+1|k)++\boldx(k+N1|k)TQ\boldx(k+N1|k)+\boldx(k+N|k)TQ\boldx(k+N|k)+i=0N1\boldu(k+i|k)TR\boldu(k+i|k)=[\boldx(k|k)\boldx(k+1|k)\boldx(k+i|k)\boldx(k+N|k)]T[QQQF]Q¯[\boldx(k|k)\boldx(k+1|k)\boldx(k+i|k)\boldx(k+N|k)]+[\boldu(k|k)\boldu(k+1|k)\boldu(k+i|k)\boldu(k+N1|k)]T[RRRR]R¯[\boldu(k|k)\boldu(k+1|k)\boldu(k+i|k)\boldu(k+N1|k)]=\boldXkTQ¯\boldXk+\boldUkR¯\boldUk
J=i=0N1(x(k+ik)TQx(k+ik)+u(k+ik)TRu(k+ik))+x(k+N)TFx(k+N)=x(kk)TQx(kk)+x(k+1∣k)TQx(k+1∣k)++x(k+N1∣k)TQx(k+N1∣k)+x(k+Nk)TQx(k+Nk)+i=0N1u(k+ik)TRu(k+ik)= x(kk)x(k+1∣k)x(k+ik)x(k+Nk) TQˉ QQQF x(kk)x(k+1∣k)x(k+ik)x(k+Nk) + u(kk)u(k+1∣k)u(k+ik)u(k+N1∣k) TRˉ RRRR u(kk)u(k+1∣k)u(k+ik)u(k+N1∣k) =XkTQˉXk+UkRˉUk

然后再将前面推导的条件带入

J = X k T Q ˉ X k + U k R ˉ U k = ( M x k + C U k ) T Q ˉ ( M x k + C U k ) + U k R ˉ U k = x k T M T Q ˉ M x k + U k T C T Q ˉ M x k + x k T M T Q ˉ C ⏟ 2 x T C T Q ˉ M U k U k + U k T C T Q ˉ C U k + U k R ˉ U k = x k T M T Q ˉ M x k + 2 x T C T Q ˉ M U k U k + U k T C T Q ˉ C U k + U k R ˉ U k

J=\boldXkTQ¯\boldXk+\boldUkR¯\boldUk=(M\boldxk+C\boldUk)TQ¯(M\boldxk+C\boldUk)+\boldUkR¯\boldUk=\boldxkTMTQ¯M\boldxk+\boldUkTCTQ¯M\boldxk+\boldxkTMTQ¯C2\boldxTCTQ¯M\boldUk\boldUk+\boldUkTCTQ¯C\boldUk+\boldUkR¯\boldUk=\boldxkTMTQ¯M\boldxk+2\boldxTCTQ¯M\boldUk\boldUk+\boldUkTCTQ¯C\boldUk+\boldUkR¯\boldUk
J=XkTQˉXk+UkRˉUk=(Mxk+CUk)TQˉ(Mxk+CUk)+UkRˉUk=xkTMTQˉMxk+2xTCTQˉMUk UkTCTQˉMxk+xkTMTQˉCUk+UkTCTQˉCUk+UkRˉUk=xkTMTQˉMxk+2xTCTQˉMUkUk+UkTCTQˉCUk+UkRˉUk

其中 G = M T Q ˉ M G=M^T\bar{Q}M G=MTQˉM E = C T Q ˉ M E=C^T\bar{Q}M E=CTQˉM H = C T R ˉ C + R ˉ H=C^T\bar{R}C+\bar{R} H=CTRˉC+Rˉ,那么 J J J可以化简为:

J = x k T G x k + 2 U k T E x k + U k T H U k J = \bold{x}_k^T G \bold{x}_k + 2\bold{U}_k^T E \bold{x}_k + \bold{U}_k^T H \bold{U}_k J=xkTGxk+2UkTExk+UkTHUk

其中 x k T G x k \bold{x}_k^T G \bold{x}_k xkTGxk是初始状态,是一个常量,在优化的过程中可以忽略。最终的代价函数可以表示为

min ⁡ U J = U k T E x k + 0.5 × U k T H U k G = M T Q ˉ M E = C T Q ˉ M H = C T R ˉ C + R ˉ Q ˉ = [ Q ⋯ ⋮ Q ⋮ ⋯ F ] , R ˉ = [ R ⋯ ⋮ ⋱ ⋮ ⋯ R ] \min_\bold{U} J = \bold{U}_k^T E \bold{x}_k + 0.5 \times\bold{U}_k^T H \bold{U}_k \\ G=M^T\bar{Q}M \\ E=C^T\bar{Q}M \\ H=C^T\bar{R}C+\bar{R} \\ \bar{Q} =

[QQF]
, \bar{R} =
[RR]
UminJ=UkTExk+0.5×UkTHUkG=MTQˉME=CTQˉMH=CTRˉC+RˉQˉ= QQF ,Rˉ= RR

这就是一个标准的QP问题。

5. MPC总结

5.1 MPC的优势劣势

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签