推导倒立摆模型并使用LQR进行位置跟踪控制

推导倒立摆模型采用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} FNb1x˙=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} Pmg=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} PlsinθNlcosθb2θ˙=Iθ¨

5. 牛顿第三定律定律:

N 车 = N 杆 P 车 = P 杆 \begin{align} & N_{车} = N_{杆}\\ & P_{车} = P_{杆} \end{align} N=NP=P

三 方程求解

1. 联立方程(1)、(2)、(5),消去 N 杆 、 N 车 N_{杆}、N_{车} NN:

( 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_{杆} PN:

( 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)(Fb1x˙)+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)g04M+m3mg1(4M+m)ml23(M+m)b20(4M+m)l3b200000(4M+m)l3b114M+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[(XRef)TQ(XRef)+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+PAPBR1BTP+Q=0
得出 K = R − 1 B T P K =R^{-1} B^T P K=R1BTP
最终得出使得代价 J J J最小的控制律为:
u = − K ( X − R e f ) u = -K(X-Ref) u=K(XRef)
在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.613303.26891000000000.410.2667 ,B= 01.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.901559.473162.272193.39]
simulink中搭建控制仿真模型如下:

simulink模型

输入计算出的反馈增益 K K K仿真结果如下:
仿真结果

MATLAB代码和simulink模型点击这里

欢迎大家一起交流!!!

Reference:

  1. LQR控制算法推导-连续与离散形式:https://blog.csdn.net/zjh2883/article/details/136167154
  2. MATLAB LQR函数:https://ww2.mathworks.cn/help/control/ref/lti.lqr.html
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有头发的垃圾猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值