新的“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的方式尝试跑自己的例子

LQR要点的更多相关文章

  1. LQR算法如何跟随变化的期望状态

    开门见山,通过LQR的能量函数可以看出,LQR算法是将状态量控制到零(关于能量函数请看我的随笔:LQR要点),但实际控制中我们希望状态量能够跟随期望值 下面将会解决如何用LQR算法跟随变化的期望值: ...

  2. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  3. 《高性能javascript》一书要点和延伸(上)

    前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...

  4. [php]laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  5. 基础笔记(一):C#编程要点

    前言 来源于手中日常摘录的资料和书籍,算是对看过的东西的总结,部分注有阅读心得,也有部分只提出大纲或结论.(备注:本篇文章中大部分要点需要有实际的开发经验,有助于阅读理解.)     目录 const ...

  6. CORS基础要点:关于dataType、contentType、withCredentials

    事实上,面试时我喜欢问跨域,因为多数开发者都知道它并且常用,而我希望能从面试者的回答中知道他在这个问题的深入程度,进一步看看面试者研究问题的思维方式及钻研精神,然而确实难到了很多人,当然这也不是面试通 ...

  7. 漫谈C++:良好的编程习惯与编程要点

    以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯. ① Header(头文件)中的防卫式声明 complex.h: # ifndef ...

  8. 推荐Linux管理员不可不知十大PHP安全要点 - SCutePHP

    PHP是使用最广泛的脚本编程语言之一.市场份额颇能说明其主导地位.PHP 7已推出,这个事实让这种编程语言对当前的开发人员来说更具吸引力.尽管出现了一些变化,但是许多开发人员对PHP的未来持怀疑态度. ...

  9. PHPCMS与UCenter整合要点

    要点一: PHPCMS不能直接与UCenter整合,而是要经过 PHPSSO 适配,因此应用主URL应是 http://phpcms_url/phpsso_server 这种模式的. 要点二: 因为 ...

随机推荐

  1. js基本语法和数据类型

    三种引入方式: 使用JavaScript:前缀构建执行JavaScript代码 使用<script></script>标签来包含JavaScript代码 <body> ...

  2. (一)用less+gulp+requireJs 搭建项目(了解less)

    项目完结 做个总结: 公司网站重构,整站都需要重写,终于有机会接触下 less,gulp和requireJs,因为以前的工作就是写几个活动页,并没有机会用这些工具,废话不多说,先看下完成后的项目目录: ...

  3. Java实现 LeetCode 319 灯泡开关

    319. 灯泡开关 初始时有 n 个灯泡关闭. 第 1 轮,你打开所有的灯泡. 第 2 轮,每两个灯泡你关闭一次. 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭).第 i 轮,每 ...

  4. Java实现 LeetCode 95 不同的二叉搜索树 II(二)

    95. 不同的二叉搜索树 II 给定一个整数 n,生成所有由 1 - n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1, ...

  5. Java实现蓝桥杯勾股定理

    勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] 输入一 ...

  6. java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字

    Date date = new Date(0); System.out.println(date); 打印出来的结果: Thu Jan 01 08:00:00 CST 1970 也是1970 年 1 ...

  7. java实现排座位

    ** 排座位** 要安排:3个A国人,3个B国人,3个C国人坐成一排. 要求不能使连续的3个人是同一个国籍. 求所有不同方案的总数? 参考答案: 283824 public class Main1 { ...

  8. java实现第六届蓝桥杯牌型整数

    牌型整数 题目描述 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不 ...

  9. Linux 工作管理

    把进程放入后台 进程后加&,这时,进程在后台是运行的 tar -zcf etc.tar.gz /etc & 在执行程序时,快速按下ctrl+z快捷键,这时,进程在后台是停止的 查看后台 ...

  10. el-upload配合vue-cropper实现上传图片前裁剪

    需求背景 上传一个封面图,在上传之前需要对图片进行裁剪,上传裁剪之后的图片,类似微信的上传头像. 技术方案 上传肯定是用element的 el-upload 组件实现上传,非常方便,各种钩子函数. 裁 ...