草庐IT

线性二次型调节器(LQR)原理详解

Simon Kenneth 2023-04-11 原文

文章目录

前言

LQR(Linaer Quadratic Regulator),即线性二次型调节器,是一种现代控制理论中设计状态反馈控制器(State Variable Feedback,SVFB)的方法。

算法解释

对于一个系统 x ˙ = A x + B u \dot{x}=Ax+Bu x˙=Ax+Bu,假设我们要设计一个线性反馈控制器 u = − K x u=-Kx u=Kx,则此时状态方程可以写为
x ˙ = A x − B K x = ( A − B K ) ⏟ A c l x (1) \dot{x}=Ax-BKx=\underbrace{(A-BK)}_{A_{cl}}x \tag{1} x˙=AxBKx=Acl (ABK)x(1)
由于让系统稳定的条件是矩阵 A c l A_{cl} Acl的特征值的实部均为负数,因此我们可以手动选择几个满足上述条件的特征值,然后反解出 K K K,从而得到控制器。

那么问题来了,我们该如何选择特征值,才能让控制器的控制效果最好呢?

现在我们定义一种代价函数(cost function) J J J
J = ∫ 0 ∞ x T Q x + u T R u   d t (2) J=\int_0^\infty {x^TQx+u^TRu}\ \mathrm{d}t \tag{2} J=0xTQx+uTRu dt(2)
其中, Q Q Q R R R是两个对角参数矩阵,分别决定了状态向量 x x x和输入向量 u u u的重要性。显然,J是一个二次型函数,这也是LQR中“Q”的由来。

线性代数中定义形如 x T A x x^TAx xTAx的形式为二次型。具体可参考矩阵的二次型,矩阵的迹、正定矩阵、Hessian矩阵、实对称_kking_edc的博客-CSDN博客_矩阵二次型

我们希望的是在满足系统稳定的前提下,通过设计合适的 K K K,让代价函数 J J J最小

下面我们来分析代价函数的意义。

代价函数的意义

考虑一个双变量系统,即 x = [ x 1 x 2 ] x=\begin{bmatrix}x_1\\x_2\end{bmatrix} x=[x1x2],我们希望设计的控制器可以表示为 u = − [ k 1   k 2 ] [ x 1 x 2 ] = − k 1 x 1 − k 2 x 2 u=-[k_1\ k_2]\begin{bmatrix}x_1\\x_2\end{bmatrix}=-k_1x_1-k_2x_2 u=[k1 k2][x1x2]=k1x1k2x2

此时代价函数可以写为:
J = ∫ 0 ∞ [ x 1   x 2 ] Q [ x 1 x 2 ] + ( − [ k 1   k 2 ] [ x 1 x 2 ] ) T R ( − [ k 1   k 2 ] [ x 1 x 2 ] )   d t (3) J=\int_0^\infty [x_1\ x_2]Q \begin{bmatrix}x_1\\x_2\end{bmatrix} + \left(-[k_1\ k_2]\begin{bmatrix}x_1\\x_2\end{bmatrix}\right)^TR\left(-[k_1\ k_2]\begin{bmatrix}x_1\\x_2\end{bmatrix}\right)\ \mathrm{d}t \tag{3} J=0[x1 x2]Q[x1x2]+([k1 k2][x1x2])TR([k1 k2][x1x2]) dt(3)
Q Q Q R R R分别为
Q = [ q 1 q 2 ] R = r ( u 是一维向量 ) (4) \begin{aligned} Q&=\begin{bmatrix} q_1\\ &q_2\end{bmatrix} \\ R&=r \quad (u是一维向量) \end{aligned} \tag{4} QR=[q1q2]=r(u是一维向量)(4)
则代价函数可以写为:
J = ∫ 0 ∞ q 1 x 1 2 + q 2 x 2 2 + r u 2   d t (5) J=\int_0^\infty q_1x_1^2+q_2x_2^2+ru^2 \tag{5} \ \mathrm{d}t J=0q1x12+q2x22+ru2 dt(5)
显然,如果令 q 1 > q 2 > r q_1>q_2>r q1>q2>r,则状态变量 x 1 x_1 x1在代价函数中的占比就更大,这意味着如希望代价函数最小, x 1 x_1 x1必须更小。又因为 Q Q Q越大意味着闭环系统矩阵 A c l A_{cl} Acl极点在s平面中更偏左,因此 x 1 x_1 x1收敛得更快。若 r > q 1 > q 2 r>q_1>q_2 r>q1>q2,则希望输入量收敛得更快,也就是以更小得代价实现系统稳定,通常意味着更加节省能量。

因为对象是线性的,并且代价函数是二次型,因此这种选择 K K K设计状态反馈控制器以最小化代价函数 J J J的方法被称为“线性二次型调节器(LQR)”。Regular意味着这种反馈的功能是将系统状态调节为0,这在一些追踪问题中会受到约束,因为我们可能希望稳定状态是给定的非零值。

现在的问题是,我们该如何求解 K K K才能让代价函数 J J J最小呢?

推导过程

对于式 ( 2 ) (2) (2),我们定义一个辅助常量矩阵 P P P,使得
d d t x T P x = − ( x T Q x + u T R u ) (6) \frac{\mathrm{d}}{\mathrm{d}t}x^TPx=-(x^TQx+u^TRu) \tag{6} dtdxTPx=(xTQx+uTRu)(6)
将式 ( 6 ) (6) (6)带入式 ( 2 ) (2) (2)可得
J = − ∫ 0 ∞ d d t x T P x   d t = − ( x T P x ∣ ∞ − x T P x ∣ 0 ) = − ( 0 − x T P x ∣ 0 ) = x T ( 0 ) P x ( 0 ) (7) \begin{aligned} J&=-\int_0^\infty \frac{\mathrm{d}}{\mathrm{d}t}x^TPx \ \mathrm{d}t \\ &=-(x^TPx|_\infty - x^TPx|_0)\\ &=-(0 - x^TPx|_0)\\ &=x^T(0)Px(0) \tag{7} \end{aligned} J=0dtdxTPx dt=(xTPxxTPx0)=(0xTPx0)=xT(0)Px(0)(7)

注:由于我们假设系统稳定,当 t → ∞ , x ( t ) → 0 t\rightarrow \infty,x(t)\rightarrow 0 t,x(t)0

显然,式 ( 7 ) (7) (7)只和参数矩阵 P P P以及系统的初始状态有关,让 P P P最小也就是让代价函数最小。现在就要找出满足式 ( 6 ) (6) (6) P P P。将式 ( 6 ) (6) (6)左边的微分项展开可得:
x ˙ T P x + x T P x ˙ + x T Q x + x T K T R K x = 0 x T A c l T P x + x T P A c l x + x T Q x + x T K T R K x = 0 x T ( A c l T P + P A c l + Q + K T R K ) x = 0 (8) \begin{aligned} \dot{x}^TPx+x^TP\dot{x}+x^TQx+x^TK^TRKx&=0\\ x^TA_{cl}^TPx+x^TPA_{cl}x+x^TQx+x^TK^TRKx&=0\\ x^T(A^T_{cl}P+PA_{cl}+Q+K^TRK)x&=0 \tag{8} \end{aligned} x˙TPx+xTPx˙+xTQx+xTKTRKxxTAclTPx+xTPAclx+xTQx+xTKTRKxxT(AclTP+PAcl+Q+KTRK)x=0=0=0(8)

注意: ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT

由于上式对于所有 x ( t ) x(t) x(t)来说都要满足,因此括号中的项要恒等于零。带入 A c l = A − B K A_{cl}=A-BK Acl=ABK可以得到
A c l T P + P A c l + Q + K T R K = 0 ( A − B K ) T P + P ( A − B K ) + Q + K T R K = 0 A T P + P A + Q + K T R K − K T B T P − P B K = 0 (9) \begin{aligned} A^T_{cl}P+PA_{cl}+Q+K^TRK&=0\\ (A-BK)^TP+P(A-BK)+Q+K^TRK&=0\\ A^TP+PA+Q+K^TRK-K^TB^TP-PBK&=0 \tag{9} \end{aligned} AclTP+PAcl+Q+KTRK(ABK)TP+P(ABK)+Q+KTRKATP+PA+Q+KTRKKTBTPPBK=0=0=0(9)
上式是一个复杂的二次型矩阵方程,有没有化简的方法呢?假设我们选择
K = R − 1 B T P (10) K=R^{-1}B^TP \tag{10} K=R1BTP(10)
则式 ( 9 ) (9) (9)可被写为
A T P + P A + Q + ( R − 1 B T P ) T R ( R − 1 B T P ) − ( R − 1 B T P ) T B T P − P B ( R − 1 B T P ) = 0 A T P + P A + Q − P B R − 1 B T P = 0 (11) \begin{aligned} &A^TP+PA+Q+(R^{-1}B^TP)^TR(R^{-1}B^TP)-(R^{-1}B^TP)^TB^TP-PB(R^{-1}B^TP)=0\\ &A^TP+PA+Q-PBR^{-1}B^TP=0 \end{aligned} \tag{11} ATP+PA+Q+(R1BTP)TR(R1BTP)(R1BTP)TBTPPB(R1BTP)=0ATP+PA+QPBR1BTP=0(11)
上式在现代控制理论中非常重要,也被称为Algebraic Riccati Equation (ARE)。ARE是一个矩阵二次方程,对于给定的(A,B,Q,R)可以解出辅助矩阵 P P P。之后,优化反馈控制器的 K K K就可通过式 ( 10 ) (10) (10)得出,代价函数的最小值可以用式 ( 7 ) (7) (7)得到。

综上,求解LQR反馈控制器参数 K K K的过程为:

  • 设计参数矩阵 Q , R Q,R Q,R
  • 求解ARE方程以得到辅助矩阵 P P P
  • K = R − 1 B T P K=R^{-1}B^TP K=R1BTP

目前已有求解ARE很完善的数值程序,例如MATLAB把它封装进了lqr(A,B,Q,R)函数中。

可控性

只要满足一些基本条件,LQR的设计过程就能保证得到一个让系统稳定的反馈控制器。

  • LQR定理

    令系统 ( A , B ) (A,B) (A,B)可控, R R R Q Q Q都是正定的,则闭环系统 ( A − B K ) (A-BK) (ABK)渐近稳定。

    注意,不管系统的开环稳定性如何,这都是成立的。

    回顾现控的相关知识:可控性可以通过检查可控性矩阵 U = [ B A B A 2 B ⋯ A n − 1 B ] U=\begin{bmatrix}B&AB&A^2B&\cdots & A^{n-1}B\end{bmatrix} U=[BABA2BAn1B]是否满秩来判断。

在以下形式中LQR定理依然成立。

已知半正定矩阵 Q Q Q的平方根被定义为 Q \sqrt{Q} Q Q = Q T Q Q=\sqrt{Q}^T\sqrt{Q} Q=Q TQ ,且半正定矩阵的平方根永远存在。

  • LQR定理2

    令系统 ( A , B ) (A,B) (AB)可控, R R R为正定矩阵, Q Q Q为半正定矩阵,并且 ( A , Q ) (A,\sqrt{Q}) (A,Q )是可观测的。则闭环系统 ( A − B K ) (A-BK) (ABK)渐近稳定。

用LQR设计反馈控制器和经典控制的思想有很大不同,例如:

  • 设计参数矩阵 Q , R Q,R Q,R与希望的闭环性能密切相关
  • 引入了辅助矩阵 P P P
  • 求解矩阵设计方程
  • 能得到一个保证系统稳定的解
  • 对闭环系统的鲁棒性或结构了解有限

使用现代控制和经典控制结合方法来获得额外的鲁棒性insight很重要,例如基于奇异值伯德图的LQG/LTR方法。

LQR控制实例

参考【Advanced控制理论】8_LQR 控制器_状态空间系统Matlab/Simulink建模分析_哔哩哔哩_bilibili

参考资料

F.L Lewis - Linear Quadratic Regulator (LQR) State Feedback Design

有关线性二次型调节器(LQR)原理详解的更多相关文章

  1. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  2. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  3. ruby - stub 实例方法在使用 minitest 的第二次调用时返回值不同 - 2

    我正在对用户的提要进行分页,并想模拟我正在使用的API的响应。API可以返回奇怪的结果,所以我想确保如果API返回我已经看到的项目,请停止分页。我使用minitest在第一次调用方法get_next_page时stub,但我想在第二次和第三次用不同的值调用它时stub。我应该只使用rSpec吗?ruby新手...这是片段test"crawlerdoesnotpaginateifnonewitemsinnextpage"do#1:A,B#2:B,D=>D#3:A=>stopcrawler=CrawlJob.newfirst_page=[{"id"=>"item-A"},{"id"=>"i

  4. 【Unity游戏破解】外挂原理分析 - 2

    文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat

  5. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  6. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  7. 最强Http缓存策略之强缓存和协商缓存的详解与应用实例 - 2

    HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca

  8. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  9. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

  10. 详解Unity中的粒子系统Particle System (二) - 2

    前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif

随机推荐