文章目录
- 参考资料
- 1. 全状态反馈控制系统
- 2. LQR控制器
- 2.1 连续时间
- 2.1.1 Q、R矩阵的选取
- 2.1.2推导过程
- 2.1.3 连续时间下的LQR算法步骤
- 2.2 离散时间
- 2.2.1 推导
- 2.2.2 离散时间下的LQR算法步骤
- 3. MPC与LQR比较
参考资料
- https://www.bilibili.com/video/BV1RW411q7FD?spm_id_from=333.999.0.0
- LQR控制器_simulink
- https://jonathan-hui.medium.com/rl-lqr-ilqr-linear-quadratic-regulator-a5de5104c750
- LQR控制算法推导以及简单分析
- Riccati 黎卡提 system
- LQR-离散时间有限边界
1. 全状态反馈控制系统
假设有一个线性系统用状态向量表示:
{
x
˙
=
A
x
+
B
u
y
=
C
x
+
D
u
(1)
\tag{1} \left\{\begin{array}{l} \dot{x}=A x+B u \\ y=C x+D u \end{array}\right.
{x˙=Ax+Buy=Cx+Du(1)
其中,
x
(
t
)
∈
R
n
,
u
(
t
)
∈
R
m
x(t) \in R^{n} , u(t) \in R^{m}
x(t)∈Rn,u(t)∈Rm 。
设计状态反馈控制器
u
=
−
K
x
(2)
\tag{2} u=-K x
u=−Kx(2)
将式(2)带入系统状态方程(1)中,有
x
˙
=
(
A
−
B
K
)
x
=
A
c
x
(3)
\tag{3} \dot{x}=(A-B K) x=A_{c} x
x˙=(A−BK)x=Acx(3)
设定系统中的各个状态量都可知,式(1)所示的开环系统,传递函数的极点就是系统矩阵A的特征值。 式(2)所示的闭环形式,通过配置反馈矩阵
K
K
K ,可以使得闭环系统达到所期望的系统状态。
接下来讲解如何使用LQR设计控制量
u
u
u。
2. LQR控制器
最优控制理论主要探讨的是让动力系统以最小成本来运作,若系统动态可以用一组线性微分方程表示,而其成本为二次泛函,这类的问题称为线性二次(LQ)问题。此类问题的解即为线性二次调节器,简称LQR。
LQR(Linear quadratic regulator,线性二次型调节器),它假设模型是locally linear
和 time-varied
的。
2.1 连续时间
LQR的目标就是找到一组控制量
u
0
,
u
1
,
.
.
.
u_0,u_1,...
u0,u1,...,使得同时有
x
0
,
x
1
,
.
.
.
x_0,x_1,...
x0,x1,...能够快速、稳定地趋近于零,并保持平衡(系统达到稳定状态),
u
0
,
u
1
,
.
.
.
u_0,u_1,...
u0,u1,...尽可能小(控制量尽量小的变化)。
这是一个典型的多目标优化最优控制问题,选取代价函数(目标函数)为
J
=
1
2
∫
0
∞
x
T
Q
x
+
u
T
R
u
d
t
(4)
\tag{4} J=\frac{1}{2} \int_{0}^{\infty} x^{T} Q x+u^{T} R u d t
J=21∫0∞xTQx+uTRudt(4)
其中,Q、R分别是需要设计的半正定矩阵和正定矩阵。
代价函数
J
J
J需要达到最小值,那么在
t
t
t趋近于无穷时,状态向量
x
(
t
)
x(t)
x(t)肯定趋近于0,即是达到了系统稳态;同理,
t
t
t趋近于无穷时,控制向量
u
(
t
)
u(t)
u(t)也会趋近于0,意味着,随着时间的推移,需要对系统施加的控制量会越来越小,意味着使用最小的控制量使得系统达到了最终控制目标,反映的是控制能量的损耗优化。
2.1.1 Q、R矩阵的选取
Q
Q
Q为半正定的状态加权矩阵,
R
R
R为正定的控制加权矩阵,两者通常取为对角阵。
Q
Q
Q矩阵元素变大意味着希望状态量能够快速趋近于零;
R
R
R 矩阵元素变大意味着希望控制输入能够尽可能小,它意味着系统的状态衰减将变慢。比如,
Q
11
Q_{11}
Q11选取较大的值,会让
x
1
x_1
x1很快的衰减到0;所以,
Q
、
R
Q、R
Q、R的选取,要综合看具体的实际应用场景来调节。
2.1.2推导过程
- 将
u
=
−
K
x
u=-K x
u=−Kx 代入代价函数后,有
J
=
1
2
∫
0
∞
x
T
(
Q
+
K
T
R
K
)
x
d
t
(5)
\tag{5} J=\frac{1}{2} \int_{0}^{\infty} x^{T}\left(Q+K^{T} R K\right) x d t
J=21∫0∞xT(Q+KTRK)xdt(5) - 假设存在一个常量矩阵
P
P
P 使得,
d
d
t
(
x
T
P
x
)
=
−
x
T
(
Q
+
K
T
R
K
)
x
(6)
\tag{6} \frac{d}{d t}\left(x^{T} P x\right)=-x^{T}\left(Q+K^{T} R K\right) x
dtd(xTPx)=−xT(Q+KTRK)x(6) - 把式(6)代入(5)后,有
J
=
−
1
2
∫
0
∞
d
d
t
x
T
(
P
)
x
d
t
=
−
1
2
x
T
P
x
∣
0
∞
=
1
2
x
T
(
0
)
P
x
(
0
)
(7)
\tag{7} J=-\frac{1}{2} \int_{0}^{\infty} \frac{d}{d t} x^{T}(P) x dt=-\frac{1}{2} x^{T}P x\bigg|^{\infty}_{0}=\frac{1}{2} x^{T}(0) P x(0)
J=−21∫0∞dtdxT(P)xdt=−21xTPx∣∣∣∣0∞=21xT(0)Px(0)(7)
式(7)的意思就是,t趋近于无穷时,系统状态向量
x
(
t
)
x(t)
x(t) 趋近于 0 ,这样就直接计算出了积分方程。 - 把式(6)左边微分展开,并且将右边移到左边后有
x
˙
T
P
x
+
x
T
P
x
˙
+
x
T
Q
x
+
x
T
K
T
R
K
x
=
0
(8)
\tag{8} \dot{x}^{T} P x+x^{T} P \dot{x}+x^{T} Q x+x^{T} K^{T} R K x=0
x˙TPx+xTPx˙+xTQx+xTKTRKx=0(8)
x
˙
\dot x
x˙用式(3)表示,代入式(8)
x
T
A
c
T
P
x
+
x
T
P
A
c
x
+
x
T
Q
x
+
x
T
K
T
R
K
x
=
0
(9)
\tag{9} x^{T} A_{c}^{T} P x+x^{T} P A_{c} x+x^{T} Q x+x^{T} K^{T} R K x=0
xTAcTPx+xTPAcx+xTQx+xTKTRKx=0(9)
整理后,有
x
T
(
A
c
T
P
+
P
A
c
+
Q
+
K
T
R
K
)
x
=
0
(10)
\tag{10} x^{T}\left(A_{c}^{T} P+P A_{c}+Q+K^{T} R K\right) x=0
xT(AcTP+PAc+Q+KTRK)x=0(10)
如果式(10)要有解,那么括号里面的部分必须等于0.
A
c
T
P
+
P
A
c
+
Q
+
K
T
R
K
=
0
(11)
\tag{11} A_{c}^{T} P+P A_{c}+Q+K^{T} R K=0
AcTP+PAc+Q+KTRK=0(11)
把
A
c
=
A
−
B
K
A_{c}=A-B K
Ac=A−BK 代入式(11)
(
A
−
B
K
)
T
P
+
P
(
A
−
B
K
)
+
Q
+
K
T
R
K
=
0
(12)
\tag{12} (A-B K)^{T} P+P(A-B K)+Q+K^{T} R K=0
(A−BK)TP+P(A−BK)+Q+KTRK=0(12)
即
A
T
P
+
P
A
+
Q
+
K
T
R
K
−
K
T
B
T
P
−
P
B
K
=
0
(13)
\tag{13} A^{T} P+P A+Q+K^{T} R K-K^{T} B^{T} P-P B K=0
ATP+PA+Q+KTRK−KTBTP−PBK=0(13) - 令
K
=
R
−
1
B
T
P
K=R^{-1} B^{T} P
K=R−1BTP ,式(13)化为
A
T
P
+
P
A
+
Q
+
K
T
R
(
R
−
1
B
T
P
)
−
K
T
B
T
P
−
P
B
(
R
−
1
B
T
P
)
=
0
(14)
\tag{14} A^{T} P+P A+Q+K^{T} R\left(R^{-1} B^{T} P\right)-K^{T} B^{T} P-P B\left(R^{-1} B^{T} P\right)=0
ATP+PA+Q+KTR(R−1BTP)−KTBTP−PB(R−1BTP)=0(14)
化简后得
A
T
P
+
P
A
−
P
B
R
−
1
B
T
P
+
Q
=
0
(15)
\tag{15} A^{T} P+P A-P B R^{-1} B^{T} P+Q=0
ATP+PA−PBR−1BTP+Q=0(15)
式(15)中,
A
,
B
,
Q
,
R
A, B, Q, R
A,B,Q,R 都是已知量,那么通过式(15)可以求解出
P
P
P(
n
×
n
n \times n
n×n维) ,式(15)就是著名的连续时间代数Riccati方程(CARE)。
2.1.3 连续时间下的LQR算法步骤
LQR的算法步骤如下:
- 选择参数矩阵Q,R(分别满足半正定和正定)
- 根据公式(15)求解Riccati方程得到矩阵P
A
T
P
+
P
A
−
P
B
R
−
1
B
T
P
+
Q
=
0
A^{T} P+P A-P B R^{-1} B^{T} P+Q=0
ATP+PA−PBR−1BTP+Q=0 - 根据P计算增益
K
=
R
−
1
B
T
P
K=R^{-1}B^{T}P
K=R−1BTP
- 计算控制量
u
∗
=
−
K
x
u^*=-Kx
u∗=−Kx
2.2 离散时间
2.2.1 推导
假设一个离散的系统表示为
X
(
k
+
1
)
=
A
X
(
k
)
+
B
u
(
k
)
(16)
\tag{16} \mathbf{X}(k+1) = A \mathbf{X}(k)+B \mathbf{u}(k)
X(k+1)=AX(k)+Bu(k)(16)
离散得LQR的目标函数如下:
J
=
∑
k
=
1
N
(
X
T
Q
X
+
u
T
R
u
)
(17)
\tag{17} J=\sum_{k=1}^{N}\left(\mathbf{X}^{T} Q \mathbf{X}+\mathbf{u}^{T} R \mathbf{u}\right)
J=k=1∑N(XTQX+uTRu)(17)
其中
X
\mathbf{X}
X 是
n
×
1
n \times 1
n×1 的状态向量,
u
\mathbf{u}
u 是
k
×
1
k \times 1
k×1 的控制变数向量,
A
A
A 是
n
×
n
n \times n
n×n 的状态递移矩阵,
B
B
B 是
n
×
k
n \times k
n×k 的控制系数矩阵,
Q
Q
Q 是
n
×
n
n \times n
n×n的半正定状态损失函数矩阵,
R
R
R 是
k
×
k
k \times k
k×k的正定控制损失函数矩阵。
求解LQR的方法,有最小二乘法和动态规划算法。详情请参考博客
这里直接给出结果:从后往前推导可以找到每一个时间的最优控制律:
K
t
=
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
u
t
∗
=
−
K
t
X
t
(18)
\tag{18} \begin{aligned} K_{t}&=\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t+1} A\\ u_{t}^{*}&=-K_{t} X_{t} \end{aligned}
Ktut∗=(R+BTPt+1B)−1BTPt+1A=−KtXt(18)
其中矩阵
P
P
P 会依据下式并且配合初始值
P
N
=
Q
P_{N}=Q
PN=Q 进行迭代求解
P
t
−
1
=
Q
+
A
T
P
t
A
−
A
T
P
t
B
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
A
(19)
\tag{19} P_{t-1}=Q+A^{T} P_{t} A-A^{T} P_{t} B\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t} A
Pt−1=Q+ATPtA−ATPtB(R+BTPt+1B)−1BTPtA(19)
这个就是离散时间的代数 Riccati 方程(DARE)。
P
P
P 的稳态解和和
N
N
N 趋近无限大时的无限时间问题有关,可以将方程(19)反复迭代直到收敛,来求得
P
P
P 的稳态解。
2.2.2 离散时间下的LQR算法步骤
综上,采用LQR算法进行控制率求解的步骤概括为:
- 确定迭代范围
N
N
N
- 设置迭代初始值
P
N
=
Q
f
P_{N}=Q_{f}
PN=Qf,其中
Q
f
=
Q
Q_f=Q
Qf=Q
- 循环迭代, 从后往前
t
=
N
,
…
,
1
t=N, \ldots, 1
t=N,…,1
P
t
−
1
=
Q
+
A
T
P
t
A
−
A
T
P
t
B
(
R
+
B
T
P
t
B
)
−
1
B
T
P
t
A
P_{t-1}=Q+A^{T} P_{t} A-A^{T} P_{t} B\left(R+B^{T} P_{t} B\right)^{-1} B^{T} P_{t} A
Pt−1=Q+ATPtA−ATPtB(R+BTPtB)−1BTPtA - 从
t
=
0
,
…
,
N
−
1
t=0, \ldots, N-1
t=0,…,N−1,循环计算反馈系数
K
t
=
(
R
+
B
T
P
t
+
1
B
)
−
1
B
T
P
t
+
1
A
K_{t}=\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t+1} A
Kt=(R+BTPt+1B)−1BTPt+1A
- 最终得优化的控制量
u
t
∗
=
−
K
t
X
t
u_{t}^{*}=-K_{t} X_{t}
ut∗=−KtXt
3. MPC与LQR比较
MPC和LQR两种控制方式有很多的相似之处,但是也有很多不相同的地方,
- 首先,LQR的研究对象是现代控制理论中的状态空间方程给出的线性系统,而MPC的研究对象可以是线性系统,也可以是非线性系统。不过现在很多的做法都是将非线性系统线性化,然后进行相关计算,具体要根据自己的工程情况来确定哪种方式比较好。
- 其次,既然是优化问题,那就离不开目标函数的设计,LQR的目标函数在上面已经有描述,MPC的目标函数,多数都是多个优化目标乘以不同权重然后求和的方式。虽然方式不同,不过都是对达到控制目标的代价累计。
- 最后,工作时域上的不同,LQR的计算针对同一工作时域,在一个控制周期内,LQR只计算一次,并将此次计算出的最优解下发给控制器即可;而MPC是滚动优化的,计算未来一段时间内,每个采样周期都会经过计算,得出一组控制序列,但是只将第一个控制值下发给控制器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)