本文主要介绍LQR的直观推导,说明LQR目标函数J选择的直观含义以及简单介绍矩阵Q,R的选取,最后总结LQR控制器的设计步奏,并将其应用在一个简单的倒立摆例子上。

假设有一个线性系统能用状态向量的形式表示成:

                     ( 1 )

其中 ,初始条件是. 并且假设这个系统的所有状态变量都是可测量到的。

在介绍LQR前,先简单回顾一下现代控制理论中最基本的控制器--全状态反馈控制。

全状态反馈控制系统图形如下:

我们要设计一个状态反馈控制器

使得闭环系统能够满足我们期望的性能。我们把这种控制代入之前的系统状态方程得到

                   ( 2 )

对于(1)式的开环系统,由现代控制理论我们知道开环传递函数的极点就是系统矩阵A的特征值。(传递函数的分母是|sI -A|,|·|表示行列式)

现在变成了(2)的闭环形式,状态变换矩阵A变成了(A-BK)。因此通过配置反馈矩阵K,可以使得闭环系统的极点达到我们期望的状态。注意,这种控制器的设计与输出矩阵C,D没有关系。

那么,什么样的极点会使得系统性能很棒呢?并且,当系统变量很多的时候,即使设计好了极点,矩阵K也不好计算。

于是,LQR为我们设计最优控制器提供了一种思路。

在设计LQR控制器前,我们得设计一个能量函数,最优的控制轨迹应该使得该能量函数最小。一般选取如下形式的能量函数。

,其中Q是你自己设计的半正定矩阵,R为正定矩阵。

可是,为什么能量函数(或称系统的目标函数)得设计成这个样子呢?

首先假设状态向量x(t)是1维的,那么其实就是一个平方项 Qx^2 >= 0,同理. 能量函数J要最小,那么状态向量x(t),u(t)都得小。J最小,那肯定是个有界的函数,我们能推断当t趋于无穷时,状态向量x(t)将趋于0,这也保证了闭环系统的稳定性。那输入u(t)要小是什么意思呢?它意味着我们用最小的控制代价得到最优的控制。譬如控制电机,输入PWM小,将节省能量。

再来看看矩阵Q,R的选取,一般来说,Q值选得大意味着,要使得J小,那x(t)需要更小,也就是意味着闭环系统的矩阵(A-BK)的特征值处于S平面左边更远的地方,这样状态x(t)就以更快的速度衰减到0。另一方面,大的R表示更加关注输入变量u(t),u(t)的减小,意味着状态衰减将变慢。同时,Q为半正定矩阵意味着他的特征值非负,R为正定矩阵意味着它的特征值为正数。如果你选择Q,R都是对角矩阵的话,那么Q的对角元素为正数,允许出现几个0.R的对角元素只能是正数。

注意LQR调节器是将状态调节到0,这与轨迹跟踪不同,轨迹跟踪是使得系统误差为0.

知道了背景后,那如何设计反馈矩阵K使得能量函数J最小呢?很多地方都是从最大值原理,Hamilton函数推导出来。这里用另外一种更容易接受的方式推导。

将u = -Kx 代入之前的能量函数得到:

           ( 3 )

为了找到K,我们先不防假设存在一个常量矩阵P使得:

      (4)

代入(3)式得:

     (5)

注意,我们已经假设闭环系统是稳定的,也就是t趋于无穷时,x(t)趋于0.

现在把(4)式左边的微分展开,并把状态变量x的微分用(2)式替代得到:

这个式子要始终成立的话,括号里的项必须恒等于0.

这是一个关于K的二次型等式,当然这个二次型是我们不愿看到的,因为计算复杂。现在只要这个等式成立,我们何必不选择K使得两个二次项正好约掉了呢?这样既符合了要求,又简化了计算。

取    代入上式得:

(6)

K的二次项没有了,可K的取值和P有关,而P是我们假设的一个量,P只要使得的(6)式成立就行了。而(6)式在现代控制理论中极其重要,它就是有名的Riccati 方程。

现在回过头总结下LQR控制器是怎么计算反馈矩阵K的:

1.选择参数矩阵Q,R

2.求解Riccati 方程得到矩阵P

3.计算

再看看LQR的结构图:

关于它的应用呢,比较典型的就是倒立摆控制器的设计。

倒立摆的状态变量为,其中p(t)是小车位置,θ是倒立摆的角度。系统结构如程序所示:

A = [0 1 0 00 0 -1 00 0 0 10 0 9 0];
B = [0;0.1;0;-0.1];
C = [0 0 1 0];   %观测角度
D = 0;Q = [1 0 0 00 1 0 00 0 10 00 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);

最后看到角度回到0,即平衡位置,控制器起到了作用,你可以选择不同的Q,R进行对比。

文章为总结性文章,有纰漏,请指出,谢谢。

reference:

1.F.L. Lewis .<< Linear Quadratic Regulator (LQR) State Feedback Design >>

2.http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&section=ControlStateSpace

3.http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&section=ControlStateSpace

LQR 的直观推导及简单应用相关推荐

  1. 2020-12-18 Matlab LQR 推导及简单应用

    Matlab LQR 推导及简单应用 本文主要介绍LQR的直观推导,说明LQR目标函数J选择的直观含义以及简单介绍矩阵Q,R的选取,最后总结LQR控制器的设计步奏,并将其应用在一个简单的倒立摆例子上. ...

  2. Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab)

    Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab) 起初只是知道Kalman滤波的核心公式和会用,没有仔细研究,最近老师让讲Kalman算法,所以系统的学习了该算法,并结合匀速直线 ...

  3. 1²+2²+3²+.....+n²的平方和的最直观推导

    助记公式有很多,但是如何推导呢,这里用了大学的离散求和知识 具体的推导过程请看我的视频: http://平方累加求和公式,最直观的推导方法-哔哩哔哩] https://b23.tv/0o5cjJE

  4. 矩阵和矢量的点乘推导及其简单应用

    推导 矩阵点乘 点乘的矩阵形式 实际应用 //求目标在主角的前方还是后方//先求出来目标相对于主角的偏移矢量 v = target.position - transform.position; //计 ...

  5. 【机器学习】GMM模型的直观推导(含中间步骤)

    概率论和数理统计是一对兄弟:概率论负责在已知分布函数的情况下研究样本:数理统计负责在已知样本的情况下,反推分布函数的特性.假设我们获取了样本数据,同时知道分布函数的大概形式,只是不知道分布函数的参数, ...

  6. Android -- 贝塞尔曲线公式的推导和简单使用

    1,最近看了几个不错的自定义view,发现里面都会涉及到贝塞尔曲线知识,深刻的了解到贝塞尔曲线是进阶自定义view的一座大山,so,今天先和大家来了解了解. 2,贝塞尔曲线作用十分广泛,简单举几个的栗 ...

  7. 矩阵和矢量的叉乘推导和简单实用

    手写了一份叉乘的推导 矩阵的叉乘 叉乘的矩阵形式,a向量变成A*  然后乘b向量 二维矩阵 假设a(a1,a2) b(b1,b2) aXb = a1b2 - a2b1  几何意义就是 aXb是a b组 ...

  8. 用半周积分算法求电压,电流有效值的c语言程序,半波整流电压有效值与功率的直观推导...

    二极管半波整流电路(图1)的用途很广.经滤波后,可用于一些对电源波形要求不高的直流电路.在家电中,还可用来降低输出功率.如在厨房.卫生间的白炽灯照明灯电路中,串联一只二极管,可延长该白炽灯的使用寿命: ...

  9. 一些理论算法的学习资源推荐

    学习一些经典的算法和理论毫无疑问是非常重要的,但又往往容易被忽视.其学习过程本就比较艰难,把所学整理成文章更是一件费心费力的事儿.这里记录一些自己在学习过程中遇到的好资源. 光流算法 文章:<光 ...

  10. 如何用简单方法推导正弦函数的和角公式: sin(α+β)=sinαcosβ+cosαsinβ ?

    问题:看2014年湖北省高考理科数学题,选择题第6题: 这道题目答案是C,①③组是正交函数,②组不是正交函数.可以用数形结合方式,快速做出判断.详细解析如下 分析:要判断第一组函数是否是正交函数,要用 ...

最新文章

  1. windows phone (26) ApplicationBar应用程序栏
  2. 你认识的世界与客观世界间差了N光年
  3. mysql附件卸载_彻底卸载mysql
  4. Kali Linux Aircrack-ng简单破解WEP加密方式网络
  5. 4路组相连cache设计_Cache组织方式
  6. linux下本地的源的格式,[Linux]CentOS7搭建/配置:YUM仓库/源[本地源/HTTP源/自建源仓库...
  7. ewebeditor遍历路径漏洞
  8. 通过分区在Kafka中实现订单保证人
  9. 自动/持续部署Docker 的tomcat web项目(二)
  10. 营销、销售和运营的区别?
  11. java 上文件传示例_Java解压缩文件示例
  12. OpenLayers之官网实例
  13. 不能使用泛型的形参创建对象_泛型就这么简单
  14. STM32固件库包的下载与安装
  15. 激光雷达RPLIDAR A1使用教程
  16. 【供应链架构day12】电商仓储WMS的业务UseCase
  17. CwRsync安装配置
  18. 知识关联视角下金融证券知识图谱构建与相关股票发现
  19. 100000以内的水仙花数C语言,找出1000000内的水仙花数
  20. SpringBoot的幕后推手,五年Java开发者小米、阿里面经

热门文章

  1. java form action_Java下Struts框架中的ActionForm类详解
  2. 高通CAMERA 调试
  3. 聚类分析在SPSS上的实现及分析
  4. 物理学的过去、现在与未来
  5. java自行车e2_摩托罗拉E2 JAVA应用程序安装指南
  6. 如何用计算机ip连接打印机共享,ip共享打印机怎么设置
  7. linux更新字体库失败,wps for linux 字体库缺失问题的解决办法
  8. Unity EasyAR图像跟踪
  9. 用Java实现24点游戏
  10. 对Kalman(卡尔曼)滤波器的理解