MPC理论推导

MPC理论推导

MPC是工程中常用到的控制器,其核心思想是以优化的方法求解最优控制器,其中优化方法大多时候采用二次规划QP(Quadratic Programming)求解。MPC与LQR的区别是LQR需要线性模型,MPC可以是线性或者非线性的模型。

问题描述

首先建立系统状态空间模型:
x ( k + 1 ) = A x ( k ) + B u ( k ) x(k+1) = Ax(k) + Bu(k) x(k+1)=Ax(k)+Bu(k)

MPC的思想是,在 t t t时刻建立一个有限时域 N N N内的代价函数 J J J(LQR建立的是无线时域的代价函数),找某个控制律 u ( t ∣ t ) u(t|t) u(tt),使得代价函数最小,这里建立得代价函数为:
J = ∑ i = 0 N − 1 ( x i T Q x i + u i T R u i ) + x N T Q f x N s . t . x i + 1 = A x i + B u i u m i n ≤ u i ≤ u m a x x m i n ≤ x i ≤ x m a x (1) \begin{aligned} &J = \sum\limits_{i=0}^{N-1}(x_i^TQx_i + u_i^TRu_i) + x_N^TQ_fx_N\\ &\begin{aligned} s.t. \quad &x_{i+1} = Ax_{i} + Bu_{i}\\ &u_{min} \leq u_i \leq u_{max}\\ &x_{min} \leq x_i \leq x_{max} \end{aligned} \end{aligned} \tag{1} J=i=0N1(xiTQxi+uiTRui)+xNTQfxNs.t.xi+1=Axi+Buiuminuiumaxxminxixmax(1)
式中, x i = x ( t + i ∣ t ) x_i = x(t+i|t) xi=x(t+it)表示在 t t t时刻时往前预测 i i i步的系统状态; u i = u ( t + i ∣ t ) u_i = u(t+i|t) ui=u(t+it)表示在 t t t时刻时往前第i步的控制输入; x N = x ( t + N ∣ t ) x_N = x(t+N|t) xN=x(t+Nt)表示终端时刻 N N N的系统状态,这里单独给x_N设置一个代价项,是为了理论的完备性,这样能够从理论上证明MPC控制方法是收敛的; Q Q Q R R R Q f Q_f Qf分别表示系统状态、系统输入和终端状态的代价矩阵。

一般求解上面的代价函数用二次规划(QP)求解器,QP问题的标准形式为:
J = 1 2 x T P x + f T x s . t . G x ≤ h (2) \begin{aligned} &J = \frac{1}{2}x^T P x + f^T x\\ &\begin{aligned} s.t. \quad &Gx \leq h \end{aligned} \end{aligned} \tag{2} J=21xTPx+fTxs.t.Gxh(2)
我们要做的就是把MPC代价函数(式(1))转换为QP问题代价函数(式(2)),然后调用QP求解器进行求解。(注意这里的 x x x与上面系统状态的 x i x_i xi不是同一个意思,这里的 x x x只是待优化决策变量的一个通用表示符号)

MPC问题转换为QP问题

目标函数转换

将预测窗口 N N N内的系统状态 x i x_i xi和系统状态 u i u_i ui组成大的向量的形式:
X ( t ) = [ x 0 T , x 1 T , . . . , x N T ] ( N + 1 × n x , 1 ) T U ( t ) = [ u 0 T , u 1 T , . . . , u N − 1 T ] ( N × n u , 1 ) T \begin{aligned} &X(t) = [x_0^T, x_1^T, ..., x_N^T]^T_{(N+1 \times n_x, 1)}\\ &U(t) = [u_0^T, u_1^T, ..., u_{N-1}^T]^T_{(N \times n_u, 1)} \end{aligned} X(t)=[x0T,x1T,...,xNT](N+1×nx,1)TU(t)=[u0T,u1T,...,uN1T](N×nu,1)T
其中, n x , n u n_x, n_u nx,nu分别表示系统状态和控制输入的维度。

MPC的代价函数(1)可以写为:
J = X ( t ) T Q ˉ X ( t ) + U ( t ) T R ˉ U ( t ) (3) J = X(t)^T\bar{Q}X(t) + U(t)^T\bar{R}U(t) \tag{3} J=X(t)TQˉX(t)+U(t)TRˉU(t)(3)
其中 Q ˉ \bar{Q} Qˉ R ˉ \bar{R} Rˉ矩阵及其维度分别为:
Q ˉ = [ Q 0 0 ⋯ 0 0 Q 0 ⋯ 0 0 0 Q ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ Q f ] ( ( N + 1 ) × n x , ( N + 1 ) × n x ) , R ˉ = [ R 0 0 ⋯ 0 0 R 0 ⋯ 0 0 0 R ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ R ] ( N × n u , N × n u ) \bar{Q} = \begin{bmatrix} Q & 0 & 0 & \cdots & 0 \\ 0 & Q & 0 & \cdots & 0 \\ 0 & 0 & Q & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & Q_f \\ \end{bmatrix}_{((N+1) \times n_x, (N+1) \times n_x)}, \bar{R} = \begin{bmatrix} R & 0 & 0 & \cdots & 0 \\ 0 & R & 0 & \cdots & 0 \\ 0 & 0 & R & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & R \\ \end{bmatrix}_{(N \times n_u, N \times n_u)} Qˉ= Q0000Q0000Q0000Qf ((N+1)×nx,(N+1)×nx),Rˉ= R0000R0000R0000R (N×nu,N×nu)
根据状态转移约束关系 x i + 1 = A x i + B u i x_{i+1} = Ax_i + Bu_i xi+1=Axi+Bui可以得到 X ( t ) X(t) X(t) U ( t ) U(t) U(t)之间的关系为:
x ( t ∣ t ) = x ( t ∣ t ) x ( t + 1 ∣ t ) = A x ( t ∣ t ) + B u ( t ∣ t ) x ( t + 2 ∣ t ) = A x ( t + 1 ∣ t ) + B u ( t + 1 ∣ t ) = A 2 x ( t ∣ t ) + A B u ( t ∣ t ) + B u ( t + 1 ∣ t ) x ( t + 3 ∣ t ) = A x ( t + 2 ∣ t ) + B u ( t + 2 ∣ t ) = A 3 x ( t ∣ t ) + A 2 B u ( t ∣ t ) + A B u ( t + 1 ∣ t ) + B u ( t + 2 ∣ t ) ⋮ x ( t + N ∣ t ) = A x ( t + N − 1 ∣ t ) + B u ( t N − 1 ∣ t ) = A N x ( t ∣ t ) + A N − 1 B u ( t + 1 ∣ t ) + . . . + B u ( t + N − 1 ∣ t ) \begin{aligned} &x(t|t) = x(t|t)\\ &x(t+1|t) = Ax(t|t) + Bu(t|t)\\ &x(t+2|t) = Ax(t+1|t) + Bu(t+1|t) = A^2 x(t|t) + ABu(t|t) + Bu(t+1|t)\\ &x(t+3|t) = Ax(t+2|t) + Bu(t+2|t) = A^3 x(t|t) + A^2Bu(t|t) + ABu(t+1|t) + Bu(t+2|t)\\ \vdots\\ &x(t+N|t) = Ax(t+N-1|t)+Bu(t_N-1|t) = A^Nx(t|t) + A^{N-1}Bu(t+1|t) + ... +Bu(t+N-1|t) \end{aligned} x(tt)=x(tt)x(t+1∣t)=Ax(tt)+Bu(tt)x(t+2∣t)=Ax(t+1∣t)+Bu(t+1∣t)=A2x(tt)+ABu(tt)+Bu(t+1∣t)x(t+3∣t)=Ax(t+2∣t)+Bu(t+2∣t)=A3x(tt)+A2Bu(tt)+ABu(t+1∣t)+Bu(t+2∣t)x(t+Nt)=Ax(t+N1∣t)+Bu(tN1∣t)=ANx(tt)+AN1Bu(t+1∣t)+...+Bu(t+N1∣t)
写成矩阵形式为:
X ( t ) = [ x ( t ∣ t ) x ( t + 1 ∣ t ) x ( t + 2 ∣ t ) ⋮ x ( t + N ∣ t ) ] = [ I A A 2 ⋮ A N ] x ( t ∣ t ) + [ 0 0 0 ⋯ 0 B 0 0 ⋯ 0 A B B Q ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A N − 2 B A N − 3 ⋯ B ] [ u ( t ∣ t ) u ( t + 1 ∣ t ) u ( t + 2 ∣ t ) ⋮ u ( t + N − 1 ∣ t ) ] X(t) = \begin{bmatrix} x(t|t)\\ x(t+1|t)\\ x(t+2|t)\\ \vdots\\ x(t+N|t) \end{bmatrix} = \begin{bmatrix} I\\ A\\ A^2\\ \vdots\\ A^N \end{bmatrix} x(t|t) + \begin{bmatrix} 0 & 0 & 0 & \cdots & 0 \\ B & 0 & 0 & \cdots & 0 \\ AB & B & Q & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ A^{N-1}B & A^{N-2}B & A^{N-3} & \cdots & B \\ \end{bmatrix} \begin{bmatrix} u(t|t)\\ u(t+1|t)\\ u(t+2|t)\\ \vdots\\ u(t+N-1|t) \end{bmatrix} X(t)= x(tt)x(t+1∣t)x(t+2∣t)x(t+Nt) = IAA2AN x(tt)+ 0BABAN1B00BAN2B00QAN3000B u(tt)u(t+1∣t)u(t+2∣t)u(t+N1∣t)
令:
M = [ I A A 2 ⋮ A N ] , C = [ 0 0 0 ⋯ 0 B 0 0 ⋯ 0 A B B Q ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A N − 2 B A N − 3 ⋯ B ] M = \begin{bmatrix} I\\ A\\ A^2\\ \vdots\\ A^N \end{bmatrix}, C = \begin{bmatrix} 0 & 0 & 0 & \cdots & 0 \\ B & 0 & 0 & \cdots & 0 \\ AB & B & Q & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ A^{N-1}B & A^{N-2}B & A^{N-3} & \cdots & B \\ \end{bmatrix} M= IAA2AN ,C= 0BABAN1B00BAN2B00QAN3000B
那么上面的式子可以写为:
X ( t ) = M x ( t ∣ t ) + C U ( t ) (4) X(t) = Mx(t|t) + CU(t) \tag{4} X(t)=Mx(tt)+CU(t)(4)
把式(4)代入到式(3)中可以得到MPC的代价函数为:
J = U T ( t ) ( C T Q ˉ C + R ˉ ) U ( t ) + 2 x 0 T M T Q ˉ C U ( t ) + x 0 T M T Q ˉ M x 0 J = U^T(t)(C^T\bar{Q}C + \bar{R})U(t) + 2x_0^TM^T\bar{Q}CU(t) + x_0^TM^T\bar{Q}Mx_0 J=UT(t)(CTQˉC+Rˉ)U(t)+2x0TMTQˉCU(t)+x0TMTQˉMx0
对比标准QP问题的代价函数形式: J = 1 2 x T P x + f T x J = \frac{1}{2}x^T P x + f^Tx J=21xTPx+fTx x 0 T M T Q ˉ M x 0 x_0^TM^T\bar{Q}Mx_0 x0TMTQˉMx0为常量,可以不考虑到优化问题中,那么令:
P = 2 C T Q ˉ C + R ˉ , f = 2 C T Q ˉ T M x 0 P = 2C^T\bar{Q}C + \bar{R}, f = 2C^T\bar{Q}^TMx_0 P=2CTQˉC+Rˉ,f=2CTQˉTMx0

约束转换

MPC问题中的等式约束已经通过式(4)转换到了目标函数中,因此只需要考虑不等式约束转换为 G x ≤ h Gx \leq h Gxh的形式,以 − 1 ≤ u i ≤ 1 -1 \leq u_i \leq 1 1ui1为例:
U ( t ) = [ u 0 T , u 1 T , . . . , u N − 1 T ] ( N × n u , 1 ) T G = [ I ( N × n u ) 0 0 − I ( N × n u ) ] h = [ 1 1 ⋮ 1 ] ( 2 N × n u ) \begin{aligned} &U(t) = [u_0^T, u_1^T, ..., u_{N-1}^T]^T_{(N \times n_u, 1)}\\ &G = \begin{bmatrix} I_{(N \times n_u)} & 0\\ 0 & -I_{(N \times n_u)} \end{bmatrix}\\ &h = \begin{bmatrix} 1\\1\\ \vdots \\1 \end{bmatrix}_{(2N \times n_u)} \end{aligned} U(t)=[u0T,u1T,...,uN1T](N×nu,1)TG=[I(N×nu)00I(N×nu)]h= 111 (2N×nu)

至此已经将MPC问题转换为QP问题,然后只需要调用QP求解器进行优化即可。

确定矩阵后,优化输入为当前 t t t时刻的系统状态 x 0 = x ( t ∣ t ) x_0 = x(t|t) x0=x(tt),优化输出为控制序列 U ( t ) U(t) U(t),由于理论构建的模型与系统真实模型存在偏差,优化所得的未来控制量对系统控制的价值很低,因此MPC仅执行输出序列 U ( t ) U(t) U(t)中的第一个控制输出

应用demo

MPC实现轨迹跟踪的demo可以参考这篇博客

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值