推导倒立摆模型采用LQR进行位置跟踪控制及其Simulink实现
一 参数设定
倒立摆示意图如下:
其中各个符号如下:
符号 | 含义 | 符号 | 含义 |
---|---|---|---|
M M M | 小车质量 | m m m | 摆杆质量 |
b 1 b_1 b1 | 小车移动阻尼 | b 2 b_2 b2 | 摆杆转动阻尼 |
x x x | 小车位置(水平向右为正) | θ \theta θ | 摆杆摆动的角度(顺时针转动为正) |
- | - | l l l | 转动关节到摆杆质心的长度 |
F F F | 作用到小车的外力(水平向右为正) | I I I | 摆杆绕质心的转动惯量 |
N 车 N_{车} N车 | 摆杆对小车的力水平分量 | P 杆 P_{杆} P杆 | 小车对摆杆的力竖直分量 |
N 杆 N_{杆} N杆 | 小车对摆杆的力水平分量 | P 车 P_{车} P车 | 摆杆对小车的力竖直分量 |
二 受力分析
1. 小车水平方向:
F − N 车 − b 1 x ˙ = M x ¨ \begin{align} F-N_{车}-b_1\dot{x}=M\ddot{x} \end{align} F−N车−b1x˙=Mx¨
2. 摆杆水平方向:
N 杆 = m d 2 ( x + l sin θ ) d t 2 = m ( x ¨ + θ ¨ l cos θ − θ ˙ 2 l sin θ ) \begin{align} N_{杆}=m\frac{d^2(x+l\sin{\theta})}{dt^2}=m(\ddot{x}+\ddot{\theta}l\cos{\theta}-\dot{\theta}^2l\sin{\theta}) \end{align} N杆=mdt2d2(x+lsinθ)=m(x¨+θ¨lcosθ−θ˙2lsinθ)
3. 摆杆竖直方向:
P 杆 − m g = m d 2 ( l cos θ ) d t 2 = − m ( θ ¨ l sin θ + θ ˙ 2 l cos θ ) \begin{align} P_{杆}-mg=m\frac{d^2(l\cos{\theta})}{dt^2}=-m(\ddot{\theta}l\sin{\theta}+\dot{\theta}^2l\cos{\theta}) \end{align} P杆−mg=mdt2d2(lcosθ)=−m(θ¨lsinθ+θ˙2lcosθ)
4. 摆杆转动方向(对质心求矩):
P 杆 l sin θ − N 杆 l cos θ − b 2 θ ˙ = I θ ¨ \begin{align} P_{杆}l\sin{\theta}-N_{杆}l\cos{\theta}-b_2\dot{\theta}=I\ddot{\theta} \end{align} P杆lsinθ−N杆lcosθ−b2θ˙=Iθ¨
5. 牛顿第三定律定律:
N 车 = N 杆 P 车 = P 杆 \begin{align} & N_{车} = N_{杆}\\ & P_{车} = P_{杆} \end{align} N车=N杆P车=P杆
三 方程求解
1. 联立方程(1)、(2)、(5),消去 N 杆 、 N 车 N_{杆}、N_{车} N杆、N车:
( M + m ) x ¨ + b 1 x ˙ + m ( θ ¨ l cos θ − θ ˙ 2 l sin θ ) = F \begin{align} (M+m)\ddot{x}+b_1\dot{x}+m(\ddot{\theta}l\cos{\theta}-\dot{\theta}^2l\sin{\theta})=F \end{align} (M+m)x¨+b1x˙+m(θ¨lcosθ−θ˙2lsinθ)=F
2. 联立方程(2)、(3)、(4),消去 P 杆 、 N 杆 P_{杆}、N_{杆} P杆、N杆:
( I + m l 2 ) θ ¨ + b 2 θ ˙ + m l x ¨ cos θ = m g l sin θ \begin{align} (I+ml^2)\ddot{\theta}+b_2\dot{\theta}+ml\ddot{x}\cos{\theta}=mgl\sin{\theta} \end{align} (I+ml2)θ¨+b2θ˙+mlx¨cosθ=mglsinθ
3. 联立方程(7)、(8),整理得:
{
θ
¨
=
(
M
+
m
)
b
2
θ
˙
+
m
l
[
(
F
+
m
l
θ
˙
2
sin
θ
−
b
1
x
˙
)
cos
θ
−
(
M
+
m
)
g
sin
(
θ
)
]
m
2
l
2
cos
2
θ
−
(
I
+
m
l
2
)
(
M
+
m
)
x
¨
=
(
I
+
m
l
2
)
(
F
−
b
1
x
˙
)
+
m
l
[
m
l
(
l
θ
˙
2
sin
θ
−
g
cos
θ
sin
θ
)
+
I
θ
˙
sin
θ
+
b
2
θ
˙
cos
θ
]
(
I
+
m
l
2
)
(
M
+
m
)
−
m
2
l
2
cos
2
θ
\begin{align} \left\{ \begin{aligned} &\ddot{\theta} = \frac{(M+m)b_2\dot{\theta}+ml[(F+ml\dot{\theta}^2\sin{\theta}-b_1\dot{x})\cos{\theta}-(M+m)g\sin(\theta)]}{m^2l^2\cos^2\theta-(I+ml^2)(M+m)}\\[5ex] &\ddot{x} = \frac{(I+ml^2)(F-b_1\dot{x})+ml[ml(l\dot{\theta}^2\sin{\theta}-g\cos{\theta}\sin{\theta})+I\dot{\theta}\sin{\theta}+b_2\dot{\theta}\cos{\theta}]}{(I+ml^2)(M+m)-m^2l^2\cos^2\theta} \end{aligned} \right. \end{align}
⎩
⎨
⎧θ¨=m2l2cos2θ−(I+ml2)(M+m)(M+m)b2θ˙+ml[(F+mlθ˙2sinθ−b1x˙)cosθ−(M+m)gsin(θ)]x¨=(I+ml2)(M+m)−m2l2cos2θ(I+ml2)(F−b1x˙)+ml[ml(lθ˙2sinθ−gcosθsinθ)+Iθ˙sinθ+b2θ˙cosθ]
注意:上述方程均采用
M
A
T
L
A
B
进行推导,正确与否还有待验证!!!
\bf{注意:上述方程均采用MATLAB进行推导,正确与否还有待验证!!!}
注意:上述方程均采用MATLAB进行推导,正确与否还有待验证!!!
四 模型线性化
由三 方程求解 的方程结果可知,倒立摆系统是一个的非线性系统。
为了便于实现后续的控制,可在工作点( θ = 0 \theta = 0 θ=0)附近,进行线性化,具体过程如下:
当
θ
≈
0
\theta \approx 0
θ≈0处,有:
{
cos
θ
=
0
sin
θ
=
θ
θ
˙
2
=
0
\begin{align} \left\{ \begin{aligned} \cos{\theta}& = 0\\ \sin{\theta}& = \theta\\ \dot{\theta}^2& = 0\\ \end{aligned} \right. \end{align}
⎩
⎨
⎧cosθsinθθ˙2=0=θ=0
带入(10)到三 方程求解 中的非线性模型(9)中,简单整理可得:
{
θ
¨
=
3
(
M
+
m
)
g
(
4
M
+
m
)
l
θ
−
3
(
M
+
m
)
b
2
(
4
M
+
m
)
m
l
2
θ
˙
+
3
b
1
(
4
M
+
m
)
l
x
˙
−
3
(
4
M
+
m
)
l
F
x
¨
=
−
3
m
g
4
M
+
m
θ
+
3
b
2
(
4
M
+
m
)
l
θ
˙
−
4
b
1
4
M
+
m
x
˙
+
4
4
M
+
m
F
\begin{align} \left\{ \begin{aligned} &\ddot{\theta} = \frac{3(M+m)g}{(4M+m)l}\theta-\frac{3(M+m)b_2}{(4M+m)ml^2}\dot{\theta}+\frac{3b_1}{(4M+m)l}\dot{x}-\frac{3}{(4M+m)l}F\\ &\ddot{x} = -\frac{3mg}{4M+m}\theta+\frac{3b_2}{(4M+m)l}\dot{\theta}-\frac{4b_1}{4M+m}\dot{x}+\frac{4}{4M+m}F\\ \end{aligned} \right. \end{align}
⎩
⎨
⎧θ¨=(4M+m)l3(M+m)gθ−(4M+m)ml23(M+m)b2θ˙+(4M+m)l3b1x˙−(4M+m)l3Fx¨=−4M+m3mgθ+(4M+m)l3b2θ˙−4M+m4b1x˙+4M+m4F
其中
I
=
m
l
2
3
I = \frac{ml^2}{3}
I=3ml2
取 X = [ θ θ ˙ x x ˙ ] T X=[\theta \quad \dot{\theta} \quad x \quad \dot{x}]^T X=[θθ˙xx˙]T为状态变量,倒立摆状态空间模型如下:
{
X
˙
=
A
X
+
B
u
Y
=
C
X
\begin{align} \left\{ \begin{aligned} &\dot{X} = AX+Bu\\ &Y = CX \end{aligned} \right. \end{align}
{X˙=AX+BuY=CX
其中:
A
=
[
0
1
0
0
3
(
M
+
m
)
g
(
4
M
+
m
)
l
−
3
(
M
+
m
)
b
2
(
4
M
+
m
)
m
l
2
0
3
b
1
(
4
M
+
m
)
l
0
0
0
1
−
3
m
g
4
M
+
m
3
b
2
(
4
M
+
m
)
l
0
−
4
b
1
4
M
+
m
]
,
B
=
[
0
−
3
(
4
M
+
m
)
l
0
4
4
M
+
m
]
C
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
]
A = \begin{bmatrix} 0 &1 &0 &0\\[1ex] \frac{3(M+m)g}{(4M+m)l} &-\frac{3(M+m)b_2}{(4M+m)ml^2} &0 &\frac{3b_1}{(4M+m)l}\\[1ex] 0 &0 &0 &1\\[1ex] -\frac{3mg}{4M+m} &\frac{3b_2}{(4M+m)l} &0 &-\frac{4b_1}{4M+m}\\[1ex] \end{bmatrix} , B = \begin{bmatrix} 0\\[1ex] -\frac{3}{(4M+m)l}\\[1ex] 0\\[1ex] \frac{4}{4M+m}\\[1ex] \end{bmatrix} \\[5ex] C = \begin{bmatrix} 1 & 0 & 0 &0 \\ 0 & 1 & 0 &0 \\ 0 & 0 & 1 &0 \\ 0 & 0 & 0 &1 \\ \end{bmatrix}
A=
0(4M+m)l3(M+m)g0−4M+m3mg1−(4M+m)ml23(M+m)b20(4M+m)l3b200000(4M+m)l3b11−4M+m4b1
,B=
0−(4M+m)l304M+m4
C=
1000010000100001
五 采用LQR方法进行全状态反馈控制
1. LQR(Linear Quadratic Regulator)方法
针对线性系统,定义状态误差加权和控制输入加权为代价函数
J
J
J:
J
=
∫
0
∞
(
E
T
Q
E
+
u
T
R
u
)
d
t
=
∫
0
∞
[
(
X
−
R
e
f
)
T
Q
(
X
−
R
e
f
)
+
u
T
R
u
]
d
t
J = \int_{0}^{\infty} (E^TQE+u^TRu) dt = \int_{0}^{\infty} [(X-Ref)^TQ(X-Ref)+u^TRu] dt
J=∫0∞(ETQE+uTRu)dt=∫0∞[(X−Ref)TQ(X−Ref)+uTRu]dt
其中
Q
Q
Q,
R
R
R为正定或者半正定矩阵,
R
e
f
Ref
Ref为参考的状态
通过系列方法,最终求解黎卡提
R
i
c
c
a
t
i
Riccati
Riccati方程:
A
T
P
+
P
A
−
P
B
R
−
1
B
T
P
+
Q
=
0
A^T P + PA - P B R^{-1} B^T P + Q = 0
ATP+PA−PBR−1BTP+Q=0
得出
K
=
R
−
1
B
T
P
K =R^{-1} B^T P
K=R−1BTP
最终得出使得代价
J
J
J最小的控制律为:
u
=
−
K
(
X
−
R
e
f
)
u = -K(X-Ref)
u=−K(X−Ref)
在MATLAB中可使用函数lqr(lqr函数介绍)直接得出
K
K
K:
调用 lqr(A,B,Q,R) 即可求解
K
K
K
关于lqr方法的推导过程可参考lqr推导过程
2. 倒立摆全状态反馈控制模型仿真
取模型中固有参数如下:
{
M
=
1.0
k
g
m
=
0.5
k
g
l
=
0.5
m
b
1
=
0.3
b
2
=
0.0
\left\{ \begin{aligned} M &= 1.0\hspace{0.5em}kg \\ m &= 0.5\hspace{0.5em}kg \\ l &= 0.5\hspace{0.5em}m \\ b_1 &= 0.3\hspace{0.5em} \\ b_2 &= 0.0\hspace{0.5em} \\ \end{aligned} \right.
⎩
⎨
⎧Mmlb1b2=1.0kg=0.5kg=0.5m=0.3=0.0
按照四 模型线性化中的模型得:
A
=
[
0
1
0
0
19.6133
0
0
0.4
0
0
0
1
−
3.2689
0
0
−
0.2667
]
,
B
=
[
0
−
1.3333
0
0.8889
]
,
C
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
]
A = \begin{bmatrix} 0 &1 &0 &0\\[1ex] 19.6133 &0 &0 &0.4\\[1ex] 0 &0 &0 &1\\[1ex] -3.2689 &0 &0 &-0.2667\\[1ex] \end{bmatrix} , B = \begin{bmatrix} 0\\[1ex] -1.3333\\[1ex] 0\\[1ex] 0.8889\\[1ex] \end{bmatrix} , C = \begin{bmatrix} 1 & 0 & 0 &0 \\ 0 & 1 & 0 &0 \\ 0 & 0 & 1 &0 \\ 0 & 0 & 0 &1 \\ \end{bmatrix}
A=
019.61330−3.26891000000000.41−0.2667
,B=
0−1.333300.8889
,C=
1000010000100001
设置Q,R如下:
Q
=
[
20000
0
0
0
0
1
0
0
0
0
10000
0
0
0
0
1
]
,
R
=
[
0.001
]
Q = \begin{bmatrix} 20000 &0 &0 &0\\[1ex] 0 &1 &0 &0\\[1ex] 0 &0 &10000 &0\\[1ex] 0 &0 &0 &1\\[1ex] \end{bmatrix} , R = \begin{bmatrix} 0.001 \\ \end{bmatrix}
Q=
200000000100001000000001
,R=[0.001]
通过MATLAB中lqr函数计算出反馈增益
K
K
K:
K
=
[
−
7470.90
−
1559.47
−
3162.27
−
2193.39
]
K=[-7470.90\quad-1559.47\quad-3162.27\quad-2193.39]
K=[−7470.90−1559.47−3162.27−2193.39]
在simulink中搭建控制仿真模型如下:
输入计算出的反馈增益
K
K
K仿真结果如下:
MATLAB代码和simulink模型点击这里
欢迎大家一起交流!!!
Reference:
- LQR控制算法推导-连续与离散形式:https://blog.csdn.net/zjh2883/article/details/136167154
- MATLAB LQR函数:https://ww2.mathworks.cn/help/control/ref/lti.lqr.html