LQR——从公式到建模
1、选用经典的倒立摆模型(闭环控制)
Goal: ϕ = 0 \phi = 0 ϕ=0
小球 X X X 方向位移:
X = L s i n ϕ + δ X = Lsin\phi + \delta X=Lsinϕ+δ
线性化: ϕ → 0 s i n ϕ = ϕ \phi\rightarrow0\ \ \ sin \phi=\ \phi ϕ→0 sinϕ= ϕ
X = L ϕ + δ X = L\phi + \delta X=Lϕ+δ
X方向力:
F x = m x ¨ F_x = m\ddot{x} Fx=mx¨
对 F 进行受力分析
F x = F s i n ϕ = F ϕ F_x = Fsin\phi = F\phi Fx=Fsinϕ=Fϕ
F y = F c o s ϕ = F F_y = Fcos\phi = F Fy=Fcosϕ=F
F ϕ = m L ϕ ¨ + m δ ¨ F\phi = mL\ddot{\phi} + m\ddot{\delta} Fϕ=mLϕ¨+mδ¨ — 1
Y方向力:
F y = m g F_y=mg Fy=mg
F = m g F=mg F=mg — 2
联立1、2式: m g ϕ = m L ϕ ¨ + m δ ¨ mg\phi=mL\ddot{\phi}+m\ddot{\delta} mgϕ=mLϕ¨+mδ¨
把 m m m消掉得系统的动态方程:
ϕ ¨ − g L ϕ + 1 L δ ¨ = 0 \ddot{\phi}-\frac{g}{L}\phi+\frac{1}{L}\ddot{\delta}=0 ϕ¨−Lgϕ+L1δ¨=0
x 1 = ϕ x_1=\phi x1=ϕ ⇒ \Rightarrow ⇒ x 1 ˙ = ϕ ˙ = x 2 \dot{x_1}=\dot{\phi}=x_2 x1˙=ϕ˙=x2
x 2 = ϕ ˙ x_2=\dot{\phi} x2=ϕ˙ ⇒ \Rightarrow ⇒ x 2 ˙ = ϕ ¨ = g L ϕ − 1 L δ ¨ = g L x 1 − u \dot{x_2}=\ddot{\phi}=\frac{g}{L}\phi-\frac{1}{L}\ddot{\delta}=\frac{g}{L}x_1-u x2˙=ϕ¨=Lgϕ−L1δ¨=Lgx1−u
令 u = 1 L δ ¨ u=\frac{1}{L}\ddot{\delta} u=L1δ¨
状态空间方程:
[ x 1 ˙ x 2 ˙ ] = [ 0 1 g L 0 ] [ x 1 x 2 ] + [ 0 − 1 ] u \left[\begin{matrix}\dot{x_1}\\\dot{x_2}\\\end{matrix}\right]=\left[\begin{matrix}0&1\\\frac{g}{L}&0\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]+\left[\begin{matrix}0\\-1\\\end{matrix}\right]u [x1˙x2˙]=[0Lg10][x1x2]+[0−1]u
A = [ 0 1 g L 0 ] A\ =\ \left[\begin{matrix}0&1\\\frac{g}{L}&0\\\end{matrix}\right] A = [0Lg10]
∣ λ I − A ∣ = 0 ⇒ ∣ λ − 1 − g L λ ∣ = λ 2 − g L ⇒ λ = ± g L \ \ \left|\lambda I-A\right|=0\ \Rightarrow\ \left|\begin{matrix}\lambda&-1\\-\frac{g}{L}&\lambda\\\end{matrix}\right|\ =\ \lambda^2-\frac{g}{L}\Rightarrow\lambda=\pm\sqrt{\frac{g}{L}} ∣λI−A∣=0 ⇒ λ−Lg−1λ = λ2−Lg⇒λ=±Lg
λ \lambda λ有大于0的成分,不稳定!
C o = [ B A B ] = [ 0 − 1 − 1 0 ] C_o=\left[\begin{matrix}B&AB\\\end{matrix}\right]=\left[\begin{matrix}0&-1\\-1&0\\\end{matrix}\right] Co=[BAB]=[0−1−10] R a n k ( C o ) = 2 ⇒ 可控 Rank\left(C_o\right)=2\ \ \Rightarrow\ \ 可控 Rank(Co)=2 ⇒ 可控
-
Let u = − [ k 1 k 2 ] [ x 1 x 2 ] u=-\left[\begin{matrix}k_1&k_2\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right] u=−[k1k2][x1x2] 使得 λ 1 = λ 2 = − 1 \lambda_1=\lambda_2=-1 λ1=λ2=−1
[ x 1 ˙ x 2 ˙ ] = [ 0 1 g L 0 ] [ x 1 x 2 ] + [ 0 − 1 ] [ − k 1 − k 2 ] [ x 1 x 2 ] = [ 0 1 g L + k 1 k 2 ] [ x 1 x 2 ] \left[\begin{matrix}\dot{x_1}\\\dot{x_2}\\\end{matrix}\right]=\left[\begin{matrix}0&1\\\frac{g}{L}&0\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]+\left[\begin{matrix}0\\-1\\\end{matrix}\right]\left[\begin{matrix}-k_1&-k_2\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]=\left[\begin{matrix}0&1\\\frac{g}{L}+k_1&k_2\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right] [x1˙x2˙]=[0Lg10][x1x2]+[0−1][−k1−k2][x1x2]=[0Lg+k11k2][x1x2]
即 A C L = [ 0 1 g L + k 1 k 2 ] A_{CL}=\left[\begin{matrix}0&1\\\frac{g}{L}+k_1&k_2\\\end{matrix}\right] ACL=[0Lg+k11k2]
求 A C L A_{CL} ACL特征值,令 ∣ λ I − A C L ∣ = 0 \left|\lambda I-A_{CL}\right|=0 ∣λI−ACL∣=0
得: k 1 = − 1 − g L k_1=-1-\frac{g}{L} k1=−1−Lg k 2 = − 2 k_2=-2 k2=−2
因此,输入 u = − [ − 1 − g L − 2 ] [ x 1 x 2 ] u=-\left[\begin{matrix}-1-\frac{g}{L}&-2\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right] u=−[−1−Lg−2][x1x2]
= [ 1 + g L 2 ] [ ϕ ϕ ˙ ] =\left[\begin{matrix}1+\frac{g}{L}&2\\\end{matrix}\right]\left[\begin{matrix}\phi\\\dot{\phi}\\\end{matrix}\right] =[1+Lg2][ϕϕ˙]
2、引入LQR
**Goal:**选取不同的特征值 λ \lambda λ,来决定系统是如何靠近这个状态的
上面为了简便,所以将 λ 1 = λ 2 = − 1 \lambda_1=\lambda_2=-1 λ1=λ2=−1,即保持系统稳定即可
引入Cost Function(目标函数,能量函数)
m i n J = ∫ 0 ∞ ( X T Q X + U T R U ) d t minJ=\int_{0}^{\infty}{\left(X^TQX+U^TRU\right)\ dt} minJ=∫0∞(XTQX+UTRU) dt
X T Q X X^TQX XTQX为正(二次型),展开为 a x 1 2 + b x 2 2 + c x 3 2 ⋯ ⋯ a{x_1}^2+b{x_2}^2+c{x_3}^2\cdots\cdots ax12+bx22+cx32⋯⋯,表达了Penalty的概念:当 x ≠ 0 x\neq0 x=0时,J会根据ABC大小有不同的反应
U T R U U^TRU UTRU代表了整个输入对Cost Function的影响。R越大U对J的影响越大
LQR的意思是在同时满足系统稳定性的同时,去寻找Cost Function的最小值
3、Simulink仿真
状态空间方程:
x
˙
1
=
x
2
{\dot{x}}_1=x_2
x˙1=x2
x ˙ 2 = 10 x 1 − u {\dot{x}}_2=10x_1-u x˙2=10x1−u
u = − k 1 x 1 − k 2 x 2 u=-k_1x_1-k_2x_2 u=−k1x1−k2x2
令 L = 1 , g = 10 L=1,g=10 L=1,g=10,可得 x 1 ˙ 和 x 2 ˙ \dot{x_1}和\dot{x_2} x1˙和x2˙
在Simulink中可搭建如下仿真:
先令 k 1 = k 2 = 0 k_1=k_2=0 k1=k2=0,构成开环系统
运行后点击Scope,可看出系统无法收敛(系统输出为无穷而非震荡是因为把 s i n ϕ = ϕ sin\phi=\phi sinϕ=ϕ了)
在Matlab命令行中输入
clear all
A=[0 1;10 0]
B=[0;-1]
Q=[100 0;0 1]
R=0.01;
K=lqr(A,B,Q,R)
希望系统有快速的反应,因此Q中 x 1 x_1 x1的系数为100,但并不关心速度,因此 x 2 x_2 x2系数为1
同时并不关心输入大小为多少,因此R为0.01
代码可输出:
K = -110.4988 -17.9164
将上一个系统作为Q较大的子系统,现在再创建一个R较大的子系统
clear all
A=[0 1;10 0]
B=[0;-1]
Q=[1 0;0 1]
R=100;
K=lqr(A,B,Q,R)
不再关心收敛速度,因此Q的 x 1 x_1 x1系数为1
更关心输入,希望很小的输入就能完成收敛,因此 R = 100 R=100 R=100
代码可输出:
K = -20.0005 -6.3254
- 结果讨论
黄线为Q较大的情况,红线为R较大的情况