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

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

一 参数设定

倒立摆示意图如下:
倒立摆示意图

其中各个符号如下:

符号 含义 符号 含义
\(M\) 小车质量 \(m\) 摆杆质量
\(b_1\) 小车移动阻尼 \(b_2\) 摆杆转动阻尼
\(x\) 小车位置(水平向右为正) \(\theta\) 摆杆摆动的角度(顺时针转动为正)
- - \(l\) 转动关节到摆杆质心的长度
\(F\) 作用到小车的外力(水平向右为正) \(I\) 摆杆绕质心的转动惯量
\(N_{车}\) 摆杆对小车的力水平分量 \(P_{杆}\) 小车对摆杆的力竖直分量
\(N_{杆}\) 小车对摆杆的力水平分量 \(P_{车}\) 摆杆对小车的力竖直分量

二 受力分析

1. 小车水平方向:

\[\begin{align} F-N_{车}-b_1\dot{x}=M\ddot{x} \end{align} \]

2. 摆杆水平方向:

\[\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} \]

3. 摆杆竖直方向:

\[\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} \]

4. 摆杆转动方向(对质心求矩):

\[\begin{align} P_{杆}l\sin{\theta}-N_{杆}l\cos{\theta}-b_2\dot{\theta}=I\ddot{\theta} \end{align} \]

5. 牛顿第三定律定律:

\[\begin{align} & N_{车} = N_{杆}\\ & P_{车} = P_{杆} \end{align} \]

三 方程求解

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

\[\begin{align} (M+m)\ddot{x}+b_1\dot{x}+m(\ddot{\theta}l\cos{\theta}-\dot{\theta}^2l\sin{\theta})=F \end{align} \]

2. 联立方程(2)、(3)、(4),消去\(P_{杆}、N_{杆}\):

\[\begin{align} (I+ml^2)\ddot{\theta}+b_2\dot{\theta}+ml\ddot{x}\cos{\theta}=mgl\sin{\theta} \end{align} \]

3. 联立方程(7)、(8),整理得:

\[\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} \]

\[\bf{注意:上述方程均采用MATLAB进行推导,正确与否还有待验证!!!} \]

四 模型线性化

三 方程求解 的方程结果可知,倒立摆系统是一个的非线性系统

为了便于实现后续的控制,可在工作点(\(\theta = 0\))附近,进行线性化,具体过程如下:

\(\theta \approx 0\)处,有:

\[\begin{align} \left\{ \begin{aligned} \cos{\theta}& = 0\\ \sin{\theta}& = \theta\\ \dot{\theta}^2& = 0\\ \end{aligned} \right. \end{align} \]

带入(10)到三 方程求解 中的非线性模型(9)中,简单整理可得:

\[\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} \]

其中\(I = \frac{ml^2}{3}\)

\(X=[\theta \quad \dot{\theta} \quad x \quad \dot{x}]^T\)为状态变量,倒立摆状态空间模型如下:

\[ \begin{align} \left\{ \begin{aligned} &\dot{X} = AX+Bu\\ &Y = CX \end{aligned} \right. \end{align} \]

其中:

\[ 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} , C = \begin{bmatrix} 1 & 0 & 0 &0 \\ 0 & 1 & 0 &0 \\ 0 & 0 & 1 &0 \\ 0 & 0 & 0 &1 \\ \end{bmatrix} \]

五 采用LQR方法进行全状态反馈控制

1. LQR(Linear Quadratic Regulator)方法

针对线性系统,定义状态误差加权和控制输入加权为代价函数\(J\)

\[J = \int_{0}^{\infty} (E^TQE+u^TRu) dt = \int_{0}^{\infty} [(X-Ref)^TQ(X-Ref)+u^TRu] dt \]

其中\(Q\)\(R\)为正定或者半正定矩阵,\(Ref\)为参考的状态

通过系列方法,最终求解黎卡提\(Riccati\)方程:

\[A^T P + PA - P B R^{-1} B^T P + Q = 0 \]

得出\(K =R^{-1} B^T P\)
最终得出使得代价\(J\)最小的控制律为:

\[u = -K(X-Ref) \]

在MATLAB中可使用函数lqr(lqr函数介绍)直接得出\(K\):
调用 lqr(A,B,Q,R) 即可求解\(K\)

关于lqr方法的推导过程可参考lqr推导过程

2. 倒立摆全状态反馈控制模型仿真

取模型中固有参数如下:

\[\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. \]

按照四 模型线性化中的模型得:

\[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} \]

设置Q,R如下:

\[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} \]

通过MATLAB中lqr函数计算出反馈增益\(K\):

\[K=[-7470.90\quad-1559.47\quad-3162.27\quad-2193.39] \]

simulink中搭建控制仿真模型如下:
simulink模型

输入计算出的反馈增益\(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
posted @ 2024-07-14 19:45  程序猿(菜鸟版)  阅读(875)  评论(0)    收藏  举报