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(t∣t),使得代价函数最小,这里建立得代价函数为:
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=0∑N−1(xiTQxi+uiTRui)+xNTQfxNs.t.xi+1=Axi+Buiumin≤ui≤umaxxmin≤xi≤xmax(1)
式中,
x
i
=
x
(
t
+
i
∣
t
)
x_i = x(t+i|t)
xi=x(t+i∣t)表示在
t
t
t时刻时往前预测
i
i
i步的系统状态;
u
i
=
u
(
t
+
i
∣
t
)
u_i = u(t+i|t)
ui=u(t+i∣t)表示在
t
t
t时刻时往前第i步的控制输入;
x
N
=
x
(
t
+
N
∣
t
)
x_N = x(t+N|t)
xN=x(t+N∣t)表示终端时刻
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.Gx≤h(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,...,uN−1T](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ˉ=
Q00⋮00Q0⋮000Q⋮0⋯⋯⋯⋱⋯000⋮Qf
((N+1)×nx,(N+1)×nx),Rˉ=
R00⋮00R0⋮000R⋮0⋯⋯⋯⋱⋯000⋮R
(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(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)=A2x(t∣t)+ABu(t∣t)+Bu(t+1∣t)x(t+3∣t)=Ax(t+2∣t)+Bu(t+2∣t)=A3x(t∣t)+A2Bu(t∣t)+ABu(t+1∣t)+Bu(t+2∣t)x(t+N∣t)=Ax(t+N−1∣t)+Bu(tN−1∣t)=ANx(t∣t)+AN−1Bu(t+1∣t)+...+Bu(t+N−1∣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(t∣t)x(t+1∣t)x(t+2∣t)⋮x(t+N∣t)
=
IAA2⋮AN
x(t∣t)+
0BAB⋮AN−1B00B⋮AN−2B00Q⋮AN−3⋯⋯⋯⋱⋯000⋮B
u(t∣t)u(t+1∣t)u(t+2∣t)⋮u(t+N−1∣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=
IAA2⋮AN
,C=
0BAB⋮AN−1B00B⋮AN−2B00Q⋮AN−3⋯⋯⋯⋱⋯000⋮B
那么上面的式子可以写为:
X
(
t
)
=
M
x
(
t
∣
t
)
+
C
U
(
t
)
(4)
X(t) = Mx(t|t) + CU(t) \tag{4}
X(t)=Mx(t∣t)+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
Gx≤h的形式,以
−
1
≤
u
i
≤
1
-1 \leq u_i \leq 1
−1≤ui≤1为例:
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,...,uN−1T](N×nu,1)TG=[I(N×nu)00−I(N×nu)]h=
11⋮1
(2N×nu)
至此已经将MPC问题转换为QP问题,然后只需要调用QP求解器进行优化即可。
确定矩阵后,优化输入为当前 t t t时刻的系统状态 x 0 = x ( t ∣ t ) x_0 = x(t|t) x0=x(t∣t),优化输出为控制序列 U ( t ) U(t) U(t),由于理论构建的模型与系统真实模型存在偏差,优化所得的未来控制量对系统控制的价值很低,因此MPC仅执行输出序列 U ( t ) U(t) U(t)中的第一个控制输出。
应用demo
MPC实现轨迹跟踪的demo可以参考这篇博客。