一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现

2024-06-04 7632阅读

系列文章目录

最优控制介绍

一级倒立摆控制 —— 系统建模(传递函数模型与状态空间方程表示)

一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现

一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现


文章目录

  • 系列文章目录
    • 一、一阶倒立摆系统的动力学方程
      • 1.1 系统变量表:
      • 1.2 一阶倒立摆系统的动力学方程
      • 二、LQR控制
        • 2.1 确定系统开环极点
        • 2.2 设计 LQR 控制器
          • 2.2.1 确定系统可控性
          • 2.2.2 设计 LQR 控制器
          • 2.2.3 改变矩阵 Q Q Q 改进 LQR 控制器
          • 2.2.4 增加预补偿环节改进 LQR 控制器
          • 2.2.5 基于状态观测器的 LQR 控制器设计

            一、一阶倒立摆系统的动力学方程

            一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现 第1张

            1.1 系统变量表:

            参数符号数值
            小车质量 M M M0.5 kg
            摆杆质量 m m m0.2 kg
            小车摩擦系数 b b b0.1 N/m/sec
            摆杆转动轴心到杆质心的长度 l l l0.3 m
            摆杆转动惯量 I I I0.006 kg*m^2
            施加在小车上的力 F F F
            小车位置坐标 x x x
            摆杆偏离竖直方向的角度 θ \theta θ

            1.2 一阶倒立摆系统的动力学方程

            一阶倒立摆系统的动力学方程用状态空间表示为

            [ x ˙ x ¨ ϕ ˙ ϕ ¨ ] = [ 0 1 0 0 0 − ( I + m l 2 ) b I ( M + m ) + M m l 2 m 2 g l 2 I ( M + m ) + M m l 2 0 0 0 0 1 0 − m l b I ( M + m ) + M m l 2 m g l ( M + m ) I ( M + m ) + M m l 2 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 I + m l 2 I ( M + m ) + M m l 2 0 m l I ( M + m ) + M m l 2 ] u \begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}= \begin{bmatrix} 0 &1& 0& 0 \\ 0&\dfrac{-(I+ml^2)b}{I(M+m)+Mml^2} &\dfrac{m^2gl^2}{I(M+m)+Mml^2} &0 \\ 0&0&0&1 \\ 0&\dfrac{-mlb}{I(M+m)+Mml^2}&\dfrac{mgl(M+m)}{I(M+m)+Mml^2}&0 \end{bmatrix} \begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+ \begin{bmatrix}0 \\ \dfrac{I+ml^2}{I(M+m)+Mml^2} \\ 0 \\ \dfrac{ml}{I(M+m)+Mml^2} \end{bmatrix}u ​x˙x¨ϕ˙​ϕ¨​​ ​= ​0000​1I(M+m)+Mml2−(I+ml2)b​0I(M+m)+Mml2−mlb​​0I(M+m)+Mml2m2gl2​0I(M+m)+Mml2mgl(M+m)​​0010​ ​ ​xx˙ϕϕ˙​​ ​+ ​0I(M+m)+Mml2I+ml2​0I(M+m)+Mml2ml​​ ​u

            y = [ 1 0 0 0 0 0 1 0 ] [ x ˙ x ¨ ϕ ˙ ϕ ¨ ] + [ 0 0 ] u \bm{y}=\begin{bmatrix}1&0&0&0 \\ 0&0&1&0 \end{bmatrix}\begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}+\begin{bmatrix}0 \\ 0 \end{bmatrix}u y=[10​00​01​00​] ​x˙x¨ϕ˙​ϕ¨​​ ​+[00​]u

            将上述表格系统值代入得状态空间方程为

            [ x ˙ x ¨ ϕ ˙ ϕ ¨ ] = [ 0 1 0 0 0 − 0.1818 2.6727 0 0 0 0 1 0 − 0.4545 31.1818 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 1.8182 0 4.5455 ] u \begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}= \begin{bmatrix} 0 &1& 0& 0 \\ 0&-0.1818 &2.6727 &0 \\ 0&0&0&1 \\ 0&-0.4545&31.1818&0 \end{bmatrix} \begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+ \begin{bmatrix}0 \\ 1.8182 \\ 0 \\ 4.5455 \end{bmatrix}u ​x˙x¨ϕ˙​ϕ¨​​ ​= ​0000​1−0.18180−0.4545​02.6727031.1818​0010​ ​ ​xx˙ϕϕ˙​​ ​+ ​01.818204.5455​ ​u

            y = [ 1 0 0 0 0 0 1 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 0 ] u \bm{y}=\begin{bmatrix}1&0&0&0 \\ 0&0&1&0 \end{bmatrix}\begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+\begin{bmatrix}0 \\ 0 \end{bmatrix}u y=[10​00​01​00​] ​xx˙ϕϕ˙​​ ​+[00​]u


            二、LQR控制

            系统中输出为小车的位置 x x x 和摆杆与竖直方向的角度 ϕ \phi ϕ,小车在 x x x 方向上移动 0.2 m,设计要求如下:

            1. 位移 x x x 和摆角 ϕ \phi ϕ 的稳定时间小于 5s
            2. 位移 x x x 的上升时间小于 0.5s
            3. 摆角 ϕ \phi ϕ 不超过 20°
            4. 位移 x x x 和摆角 ϕ \phi ϕ 的稳态误差小于 2%

            LQR 控制非常适用于多输入多输出变量控制,因此控制要求中保证摆角范围的同时,还要求位移大小。

            采用全状态反馈控制,控制框图如下

            一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现 第2张

            2.1 确定系统开环极点

            在一阶倒立摆系统中, r r r 表示小车位置的阶跃指令,4 个状态变量为小车的位置 x x x 和速度 x ˙ \dot{x} x˙,摆杆的角度 ϕ \phi ϕ 和角速度 ϕ ˙ \dot{\phi} ϕ˙​,输出为为小车的位置 x x x 和摆杆角度 ϕ \phi ϕ。

            参数符号
            位置阶跃指令 r r r
            小车位移 x x x
            小车速度 x ˙ \dot{x} x˙
            摆杆角度 ϕ \phi ϕ
            摆杆角速度 ϕ ˙ \dot{\phi} ϕ˙​

            目标为设计一个控制器,当给系统一个阶跃参考值时,摆杆摆动但最终保持竖直状态,小车则移动到指定的位置。

            确定系统的开环极点,代码如下

            M = 0.5;
            m = 0.2;
            b = 0.1;
            I = 0.006;
            g = 9.8;
            l = 0.3;
            p = I*(M+m)+M*m*l^2; %denominator for the A and B matrices
            A = [0      1              0           0;
                 0 -(I+m*l^2)*b/p  (m^2*g*l^2)/p   0;
                 0      0              0           1;
                 0 -(m*l*b)/p       m*g*l*(M+m)/p  0];
            B = [     0;
                 (I+m*l^2)/p;
                      0;
                    m*l/p];
            C = [1 0 0 0;
                 0 0 1 0];
            D = [0;
                 0];
            states = {'x' 'x_dot' 'phi' 'phi_dot'};
            inputs = {'u'};
            outputs = {'x'; 'phi'};
            sys_ss = ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs);
            poles = eig(A)
            

            输出为

            poles =
                     0
               -0.1428
               -5.6041
                5.5651
            

            可以看到,系统只有一个右极点,开环系统是不稳定的。

            2.2 设计 LQR 控制器

            根据控制框图,需要确定状态反馈矩阵(向量)K,使用状态反馈矩阵的前提是状态变量是可测的。

            下面使用 MATLAB 的 lqr() 命令,该命令可以返回最佳状态反馈控制器增益矩阵,该前提是假设系统为线性,代价函数为二次型,

            2.2.1 确定系统可控性

            在设计 LQR 控制器之前,需要验证系统的可控性。系统可控意味着可以在有限时间内(在系统的物理约束条件下)将系统的状态驱动至任意位置。如果系统是可控的,可控性矩阵的秩为 n。

            MATLAB 代码如下

            co = ctrb(sys_ss);
            controllability = rank(co)
            

            输出为

            controllability =
                 4
            
            2.2.2 设计 LQR 控制器

            用线性二次型控制方法来确定状态反馈增益矩阵 K K K, R R R 和 Q Q Q 分别表示在最优化的代价函数中控制输入和误差的相对权重。最简单的情况是令 R = 1 , Q = C ′ C R=1,Q=C'C R=1,Q=C′C,这表示代价函数中对控制输入和对状态变量有相同权重。通过调节控制器中矩阵 Q Q Q 中的非零元素得到合适的响应。

            观察矩阵 Q Q Q ,MATLAB 代码如下

            Q = C'*C
            

            输出为

            Q =
                 1     0     0     0
                 0     0     0     0
                 0     0     1     0
                 0     0     0     0
            

            矩阵 Q Q Q 中(1,1)位置的元素表示小车位移的权重,(3,3)位置的元素表示摆杆角度的权重。

            权重 R R R 保持为 1,最终起作用的是 Q Q Q 和 R R R 的相对值,而不是绝对值。

            根据 Q Q Q 和 R R R 设计 LQR 控制器。MATLAB 代码如下

            Q = C'*C;
            R = 1;
            K = lqr(A,B,Q,R)
            Ac = [(A-B*K)];
            Bc = [B];
            Cc = [C];
            Dc = [D];
            states = {'x' 'x_dot' 'phi' 'phi_dot'};
            inputs = {'r'};
            outputs = {'x'; 'phi'};
            sys_cl = ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);
            t = 0:0.01:5;
            r =0.2*ones(size(t));
            [y,t,x]=lsim(sys_cl,r,t);
            [AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
            set(get(AX(1),'Ylabel'),'String','cart position (m)')
            set(get(AX(2),'Ylabel'),'String','pendulum angle (radians)')
            title('Step Response with LQR Control')
            

            输出为

            K =
               -1.0000   -1.6567   18.6854    3.4594
            

            一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现 第3张

            橙色表示摆杆角度变化曲线,蓝色表示小车位移变化曲线。

            回顾控制器的设计要求

            1. 位移 x x x 和摆角 ϕ \phi ϕ 的稳定时间小于 5s
            2. 位移 x x x 的上升时间小于 0.5s
            3. 摆角 ϕ \phi ϕ 不超过 20°
            4. 位移 x x x 和摆角 ϕ \phi ϕ 的稳态误差小于 2%

            摆杆和小车的超调量满足要求,稳定时间需要调整,小车位移 x x x 的上升时间需要减小,小车位移误差需要调整。

            2.2.3 改变矩阵 Q Q Q 改进 LQR 控制器

            对于小车和摆杆状态变量的稳定时间和上升时间,调整矩阵 Q Q Q 发现,增大矩阵 Q Q Q 中(1,1)和(3,3)位置的元素可以使稳定时间和上升时间下降,减小摆杆移动的角度。这是以增加控制为代价减小误差,即减小稳定时间和上升时间。但是更多的控制意味着需要更大的能量输入。

            MATLAB代码如下

            Q = C'*C;
            Q(1,1) = 5000;
            Q(3,3) = 100
            R = 1;
            K = lqr(A,B,Q,R)
            Ac = [(A-B*K)];
            Bc = [B];
            Cc = [C];
            Dc = [D];
            states = {'x' 'x_dot' 'phi' 'phi_dot'};
            inputs = {'r'};
            outputs = {'x'; 'phi'};
            sys_cl = ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);
            t = 0:0.01:5;
            r =0.2*ones(size(t));
            [y,t,x]=lsim(sys_cl,r,t);
            [AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
            set(get(AX(1),'Ylabel'),'String','cart position (m)')
            set(get(AX(2),'Ylabel'),'String','pendulum angle (radians)')
            title('Step Response with LQR Control')
            

            输出为

            Q =
                    5000           0           0           0
                       0           0           0           0
                       0           0         100           0
                       0           0           0           0
            K =
              -70.7107  -37.8345  105.5298   20.9238
            

            一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现 第4张

            2.2.4 增加预补偿环节改进 LQR 控制器

            一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现 第5张

            如上框图所示,通过增加预补偿环节 N ‾ \overline{N} N 实现稳态误差最小。预补偿环节 N ‾ \overline{N} N 可以通过函数 rscale.m 实现,rscale.m 文件内容如下

                     function[Nbar]=rscale(a,b,c,d,k)
                     % Given the single-input linear system:
                     %       .
                     %       x = Ax + Bu
                     %       y = Cx + Du
                     % and the feedback matrix K,
                     %
                     % the function rscale(sys,K) or rscale(A,B,C,D,K)
                     % finds the scale factor N which will
                     % eliminate the steady-state error to a step reference
                     % for a continuous-time, single-input system
                     % with full-state feedback using the schematic below:
                     %
                     %                         /---------\
                     %      R         +     u  | .       |
                     %      ---> N --->() ---->| X=Ax+Bu |--> y=Cx ---> y
                     %                -|       \---------/
                     %                 |             |
                     %                 |

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]