最优控制的思想
在我的理解中,学习一门控制算法的第一件事,就是要理解这门控制算法的思想。而这篇博客想要讨论的线性二次型调节器(简称LQR算法),就是最优控制算法中的代表之一。
在最优控制中,如何评价最优,这就需要一个标准,来衡量当前的输出是不是最优最好的。有时候我们希望系统能够快速收敛,则标准应该是以时间的长短来定;有时候我们希望系统的损耗尽可能的低,则标准应该是以输出的损耗来定;有时候我们希望某个系统状态参数达到我们的预期,则标准应该是以这个系统状态参数和我们预期的差值来定。
当然,说是最优了,就说明这个标准应该是最高标准,在这个最高标准下达到的控制才能是最优的
根据具体的需求,来确定具体的衡量标准,基于这些标准找到符合实际情况的最佳控制输出,就是最优控制的核心思想。
LQR简述——Linaer Quadratic Regulator
LQR算法是建立在状态空间表达式的基础上进行描述的,假设一个线性系统的状态空间表达式为
x
′
⃗
=
A
x
⃗
+
B
u
⃗
y
⃗
=
C
x
⃗
\vec{x^{'}}=A\vec{x}+B\vec{u} \\ \vec{y}=C\vec{x}
x′=Ax+Buy=Cx
定义一个代价函数
J
J
J来评价控制输入
u
⃗
\vec{u}
u对于控制目标的效果,代价函数的表达式为
J
=
x
⃗
(
t
f
)
T
F
x
⃗
(
t
f
)
+
1
2
∫
t
0
t
f
(
x
⃗
T
Q
x
⃗
+
u
⃗
T
R
u
⃗
)
d
t
J = \vec{x}(t_f)^{T}F\vec{x}(t_f)+\frac{1}{2}\int_{t_0}^{t_f}{(\vec{x}^{T}Q\vec{x} + \vec{u}^{T}R\vec{u})dt}
J=x(tf)TFx(tf)+21∫t0tf(xTQx+uTRu)dt
回想一开始接触到LQR时,一度以为LQR这个名字是因为代价函数中有Q和R两个字母(狗头.jpg)
其中,
- x ⃗ ( t f ) T F x ⃗ ( t f ) \vec{x}(t_f)^{T}F\vec{x}(t_f) x(tf)TFx(tf)是末端项,代表末端时刻系统状态的调节权重,即如果你希望末端时刻的系统状态尽可能的收敛于0,就将末端项的权重矩阵 F F F权值提高。
-
(
x
⃗
T
Q
x
⃗
+
u
⃗
T
R
u
⃗
)
(\vec{x}^{T}Q\vec{x} + \vec{u}^{T}R\vec{u})
(xTQx+uTRu)是执行项,即系统运行过程中的累计代价,即如果你希望执行过程中的系统状态或系统输入尽可能的小或低损耗,就可以适当的调节对应的权重矩阵
Q
Q
Q和
R
R
R中的权重系数;
这里面的二分之一是方便计算才加进去的(课本的原话)
- 明确了代价函数的组成形式之后,现在要讨论如何根据这个标准来找到最优的控制律(即系统输入的时间序列)。
最优控制律公式推导
在推导公式之前,需要做几个假设前提来简化计算过程。
假设末端时间为无穷大,末端状态收敛为0,即满足以下关系
t
f
→
∞
x
⃗
(
∞
)
=
0
t
0
=
0
t_f \rightarrow \infty \\ \vec{x}(\infty) = 0 \\ t_0 = 0
tf→∞x(∞)=0t0=0
代入以上式子到代价函数
J
J
J,可以得到
J
=
1
2
∫
0
∞
(
x
⃗
T
Q
x
⃗
+
u
⃗
T
R
u
⃗
)
d
t
J = \frac{1}{2}\int_{0}^{\infty}{(\vec{x}^{T}Q\vec{x} + \vec{u}^{T}R\vec{u})dt}
J=21∫0∞(xTQx+uTRu)dt
经过简化,将代价函数推导成一个关于系统状态向量 x ⃗ \vec{x} x和系统输入 u ⃗ \vec{u} u的泛函。因此最优控制问题本质上是求泛函的最小值的问题。个人的理解里,泛函的极小值问题取决于系统输入 u ⃗ \vec{u} u的形式,即系统要以什么样的控制律来实现最优控制。
对于LQR算法而言,采用的控制律形式为全状态反馈,即令
u
⃗
=
−
K
x
⃗
\vec{u} = -K\vec{x}
u=−Kx
当然,这是一个值得思考的问题,是否还有其他的控制律形式,也能够实现预期的最优控制效果,以及它们各自所具有的优缺点,适用于什么样的场景。
将全状态反馈控制律代入到状态空间表达式以及代价函数
J
J
J中,得到
x
′
⃗
=
(
A
−
B
K
)
x
⃗
y
⃗
=
C
x
⃗
J
=
1
2
∫
0
∞
x
⃗
T
(
Q
+
K
T
R
K
)
x
⃗
d
t
\vec{x^{'}}=(A-BK)\vec{x} \\ \vec{y}=C\vec{x} \\ J = \frac{1}{2}\int_{0}^{\infty}{\vec{x}^{T}(Q+K^{T}RK)\vec{x} dt}
x′=(A−BK)xy=CxJ=21∫0∞xT(Q+KTRK)xdt
构造辅助表达式,令
d
d
t
x
⃗
T
P
x
⃗
=
−
x
⃗
T
(
Q
+
K
T
R
K
)
x
⃗
\frac{d}{dt}\vec{x}^{T}P\vec{x}=-\vec{x}^{T}(Q+K^{T}RK)\vec{x}
dtdxTPx=−xT(Q+KTRK)x
代入代价函数可以得到
J
=
1
2
∫
0
∞
−
d
d
t
x
⃗
T
P
x
⃗
d
t
=
−
1
2
[
x
⃗
T
P
x
⃗
∣
t
=
∞
−
x
⃗
T
P
x
⃗
∣
t
=
0
]
=
−
1
2
[
0
−
x
⃗
T
(
0
)
P
x
⃗
(
0
)
]
=
1
2
x
⃗
T
(
0
)
P
x
⃗
(
0
)
J=\frac{1}{2}\int_{0}^{\infty}-\frac{d}{dt}\vec{x}^{T}P\vec{x} dt \\ =-\frac{1}{2}[\vec{x}^{T}P\vec{x}|_{t=\infty} - \vec{x}^{T}P\vec{x}|_{t=0} ]\\ =-\frac{1}{2}[0 - \vec{x}^{T}(0)P\vec{x}(0)] \\ =\frac{1}{2} \vec{x}^{T}(0)P\vec{x}(0)
J=21∫0∞−dtdxTPxdt=−21[xTPx∣t=∞−xTPx∣t=0]=−21[0−xT(0)Px(0)]=21xT(0)Px(0)
又有辅助表达式可以得到
x
⃗
′
T
P
x
⃗
+
x
⃗
T
P
x
′
⃗
+
x
⃗
T
(
Q
+
K
T
R
K
)
x
⃗
=
0
\vec{x}'^{T}P\vec{x}+\vec{x}^{T}P\vec{x'}+\vec{x}^{T}(Q+K^{T}RK)\vec{x}=0
x′TPx+xTPx′+xT(Q+KTRK)x=0
将状态空间表达式中的状态转移方程继续往里代入,可以得到
(
(
A
−
B
K
)
x
⃗
)
T
P
x
⃗
+
x
⃗
T
P
(
A
−
B
K
)
x
⃗
+
x
⃗
T
(
Q
+
K
T
R
K
)
x
⃗
=
0
((A-BK)\vec{x})^{T}P\vec{x} +\vec{x}^{T}P(A-BK)\vec{x}+\vec{x}^{T}(Q+K^{T}RK)\vec{x}=0
((A−BK)x)TPx+xTP(A−BK)x+xT(Q+KTRK)x=0
整理后得到
x
⃗
T
(
A
T
P
−
K
T
B
T
P
+
P
A
−
P
B
K
+
Q
+
K
T
R
K
)
x
⃗
=
0
\vec{x}^{T}(A^{T}P-K^{T}B^{T}P+PA-PBK+Q+K^{T}RK)\vec{x}=0
xT(ATP−KTBTP+PA−PBK+Q+KTRK)x=0
ok,fine!推导到这一步就很明显了,为了使等号两边恒成立,则只需要中间括号里恒等于0,即
A
T
P
−
K
T
B
T
P
+
P
A
−
P
B
K
+
Q
+
K
T
R
K
=
0
A^{T}P-K^{T}B^{T}P+PA-PBK+Q+K^{T}RK=0
ATP−KTBTP+PA−PBK+Q+KTRK=0
后面的内容就是纯粹的数学问题了,如何将上面的等式求解得到反馈增益矩阵
K
K
K,就可以得到最优的控制律
u
u
u
对于这一类数学问题,不进行赘述直接给结论,感兴趣的看官自行了解。
令
K
=
R
−
1
B
T
P
K = R^{-1}B^{T}P
K=R−1BTP,代入上述方程中,得到
A
T
P
+
P
A
+
Q
−
P
B
R
−
1
B
T
P
=
0
A^{T}P+PA+Q-PBR^{-1}B^{T}P=0
ATP+PA+Q−PBR−1BTP=0
上面的方程为黎卡提方程(Riccati Equation),wiki链接自取。
在黎卡提方程中,只有辅助矩阵
P
P
P是未知的,也是求解的对象。通过求解黎卡提方程得到矩阵
P
P
P,我们就可以得到状态反馈增益矩阵
K
K
K,进而得到最优控制律
u
u
u的表达式。即完成了整个
L
Q
R
LQR
LQR算法的设计流程。
关于如何求解黎卡提方程的内容,可能后续出一篇也可能不出。第一篇关于LQR的博客主要是浅谈LQR的思想以及基本推导,作为新手入门的参考。同时也是个人记录学习内容的方式。若博客中存在错误,欢迎指正!