zoukankan      html  css  js  c++  java
  • LQR要点

    新的“A”变成着了这样:Ac = A - KB 

    基于对象:状态空间形式的系统

    能量函数J:也称之为目标函数

    Q:半正定矩阵,对角阵(允许对角元素出现0)

    R:正定矩阵,QR其实就是权重

    下面这段话可能会加深对LQR的理解:

    当x是一维的,J就变成

    我们的目的是使能量函数J最小,那么Qx^2和Ru^2都要最小,则t趋近无穷时,x要趋近0,要保证Qx^2为一个最小定值那么Q要很大,Q越大x衰减速度也就越快;同理增大R,u就会变小,对系统的控制变弱,x衰减速度将会变慢

    如何选取QR?

    无一般规律可寻,一般取决设计者的经验,在这提供几个选择的原则:

    1 Q、R都是对称矩阵,Q为正半定矩阵,R为正定矩阵

    2 通常选取Q、R为对角矩阵,实际应用,通常将R值固定,通过改变Q的值来调制最优,当控制量只有一个,R就变成一个标量,一般取值1

    为了更好的选取Q/R,我进行了一些尝试,发现如下:

    假设我们的状态量是x1,x2,现在改变系数,观察对x1的影响

    关于Q与R的

    1 同时Q=>kQ,R=>kr,对x1无影响;

    2 单取Q=>kQ或R=>R/k,产生的影响相同;

    3 增大Q,对x1的控制力加强;

    关于Q内部的

    1 增大x1的系数,对x1的控制力加强;

    2 增大x2的系数,x1基本不变;

    3 减小x2的系数,对x1控制力减弱,以至到达目标状态的时间变长;(试验中对x1的第一步控制较强,但之后控制力明显减弱,可能是由于我给的初始量不太符合客观现实)

    计算反馈矩阵K的步骤

    1 选择QR矩阵

    2 求解Riccati方程的P(P是公式推导过程中设的矩阵,目的就是方便求K,在这求出P就能求出K)

    3 计算(在matlab中给定A,B,Q,R用lqr函数可直接计算出K)

    (实际控制中我们无法调用lqr函数,求解K本质上属于求解Riccati方程,详见我的随笔:Riccati方程迭代法求解)

    u(k)=-K*x(k),u(k)控制完将会得到一个新的x(k+1),周而复始可不断求出u

    调节目标:将状态调节到零,而不是系统误差为零

    下面有一个倒立摆控制器的例子

    其状态变量是[p p' Θ Θ‘],p是小车位移。Θ是倒立摆角度

     

    A = [0 1 0 0  

         0 0 -1 0  

         0 0 0 1  

         0 0 9 0];

    B = [0;0.1;0;-0.1];  

    C = [0 0 1 0];   %观测角度

    D = 0;  

    Q = [1 0 0 0  

            0 1 0 0  

            0 0 10 0  

            0 0 0 10   ];  

    R = 0.1;  

    %由上面这个系统,可以计算出K  

    K = lqr(A,B,Q,R);  

    Ac = A - B*K;

    %对系统进行模拟  

    x0 = [0.1;0;0.1;0]; %初始状态  

    t = 0:0.05:20;  

    u = zeros(size(t));  

    [y,x]=lsim(Ac,B,C,D,u,t,x0);   

    plot(t,y); 

     

     

    系统的控制效果与系统状态空间的准确度、QR的选取有极大关系!!!

    也可采用u(k+1) = -K_lqr * x(k)和x(k+1) = A * x(k) + B * u的方式尝试跑自己的例子

  • 相关阅读:
    Jenkins系列——使用SonarQube进行代码质量检查
    HTTP1.0工作原理
    Jenkins系列——使用checkstyle进行代码规范检查
    Jenkins系列——定时构建
    Hadoop环境搭建
    eclipse3.4+对的处理插件(附SVN插件安装实例)
    MD5
    RedHat6.5更新软件源
    ubuntu软件推荐
    disconf系列【2】——解决zk部署情况为空的问题
  • 原文地址:https://www.cnblogs.com/niulang/p/9066759.html
Copyright © 2011-2022 走看看