连续时间LQR和离散时间LQR笔记

文章目录

  • 连续时间LQR理解
  • 离散时间LQR理解
  • 参考资料

本文是根据下面参考资料里的1和2对应的讲座内容所做的笔记

连续时间LQR理解

假设一个系统可以被表示为如下形式的状态方程:
x ˙ = A x + B u ( 1.1 ) \dot{x} = Ax + Bu \qquad \qquad (1.1) x˙=Ax+Bu(1.1)
式中的 x ( t ) ∈ R n , u ( t ) ∈ R m x(t) \in R^n,u(t) \in R^m x(t)Rn,u(t)Rm,n是状态的个数,m是动作的个数。

状态方程:描述系统的状态变量与输入变量之间关系的一组一阶微分方程称为状态方程

假设所有状态都是可测量的,且我们要设计一个线性负反馈控制器 u = − K x u=-Kx u=Kx(也就定义了闭环回路性质),将其代入式(1.1),则有:
x ˙ = A x − B K x = ( A − B K ) x = A c x ( 1.2 ) \dot{x} = Ax -BKx = (A-BK)x = A_c x \qquad \qquad (1.2) x˙=AxBKx=(ABK)x=Acx(1.2)
为了使设计的控制器最优,设计如下代价函数:
J = 1 2 ∫ 0 ∞ x T Q x + u T R u d t ( 1.3 ) J= \frac{1}{2} \int_0^{\infty} x^TQx + u^TRu \ dt \qquad \qquad (1.3) J=210xTQx+uTRu dt(1.3)
代入 u = − K x u=-Kx u=Kx后,代价函数变成:
J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x d t ( 1.4 ) J= \frac{1}{2} \int_0^{\infty} x^T(Q + K^TRK)x \ dt \qquad \qquad (1.4) J=210xT(Q+KTRK)x dt(1.4)
对于最优设计的目标是选择K使得代价函数J最小,矩阵Q(大小 n × n n \times n n×n)和矩阵R(大小为 m × m m \times m m×m)一般由工程师来设计,必须保证Q是半正定矩阵、R是正定矩阵。因为控制是线性的并且代价函数是二次型的,所以这种选取K最小化J的问题被称为Linear Quadratic Regulator (LQR)。'regulator’是指反馈函数是为了将状态调节到0。

为了找到最优的反馈K,假设有一个矩阵P满足下式:
d d t ( x T P x ) = − x T ( Q + K T R K ) x ( 1.5 ) \frac{d}{dt} (x^TPx) = -x^T(Q + K^TRK)x \qquad \qquad (1.5) dtd(xTPx)=xT(Q+KTRK)x(1.5)
将上式代入到(1.4)中,当假设闭环系统是稳定的,当t趋向于无穷时,x(t)变为0,所以有下式,该式表明J仅仅依赖于K,是一个仅依赖于辅助矩阵P和初始条件的常量:
J = − 1 2 ∫ 0 ∞ d d t ( x T P x ) d t = 1 2 x T ( 0 ) P x ( 0 ) ( 1.6 ) J= -\frac{1}{2} \int_0^{\infty} \frac{d}{dt} (x^TPx) \ dt = \frac{1}{2} x^T(0) P x(0) \qquad \qquad (1.6) J=210dtd(xTPx) dt=21xT(0)Px(0)(1.6)
那么为了找到使式(1.5)的假设成立的K,将式(1.5)左边微分展开,并将式(1.1)代入后(根据定义式(1.1)就是状态x的一阶微分方程),再将式(1.2),式(1.5)变成如下列式子:
x ˙ T P x + x T P x ˙ + x T Q x + x T K T R K x = 0 x T A c T P x + x T P A c x + x T Q x + x T K T R K x = 0 x T ( A c T + P A c + Q + K T R K ) x = 0 \begin {aligned} & \dot{x}^TPx + x^T P \dot{x} + x^TQx + x^TK^TRKx = 0 \\ & x^TA_c^TPx + x^TPA_cx+x^TQx + x^TK^TRKx = 0 \\ & x^T(A_c^T + PA_c + Q + K^TRK)x=0 \end {aligned} x˙TPx+xTPx˙+xTQx+xTKTRKx=0xTAcTPx+xTPAcx+xTQx+xTKTRKx=0xT(AcT+PAc+Q+KTRK)x=0
如果要使最后一项对于每一个x(t)都满足,括号内的内容必须等于0,所以有:
A c T + P A c + Q + K T R K = 0 ( A − B K ) T P + P ( A − B K ) + Q + K T R K = 0 A P + P A + Q + K T R K − K T B T P − P B K = 0 \begin {aligned} & A_c^T + PA_c + Q + K^TRK = 0 \\ & (A-BK)^TP+ P(A-BK) + Q + K^TRK = 0 \\ &A^P + PA + Q + K^TRK - K^TB^TP - PBK = 0 \end {aligned} AcT+PAc+Q+KTRK=0(ABK)TP+P(ABK)+Q+KTRK=0AP+PA+Q+KTRKKTBTPPBK=0
上式是一个matrix quadratic equation。不考虑具体的矩阵解法,如果我们选择:
K = R − 1 B T P ( 1.7 ) K = R^{-1}B^TP \qquad \qquad (1.7) K=R1BTP(1.7)
将其代入到matrix quadratic equation方程中将有:
A 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 P + P A + Q + P B R − 1 B T P = 0 ( 1.8 ) \begin {aligned} &A^P + PA + Q + (R^{-1}B^TP)^TR(R^{-1}B^TP) - (R^{-1}B^TP)^TB^TP - PB(R^{-1}B^TP) = 0 \\ &A^P + PA + Q + PBR^{-1}B^TP=0 \qquad \qquad (1.8) \end {aligned} AP+PA+Q+(R1BTP)TR(R1BTP)(R1BTP)TBTPPB(R1BTP)=0AP+PA+Q+PBR1BTP=0(1.8)
式(1.8)被称为ARE方程(algebraic Riccati equation, ARE), 给定(A,B,Q,R)之后可以求解出来矩阵P,这样最优反馈K就可以根据式(1.7)得到了。

综上,寻找LQR反馈K的设计过程为:

  • 选择设计参数矩阵Q和R
  • 求解ARE方程得到P
  • 使用 K = R − 1 B T P K = R^{-1}B^TP K=R1BTP计算K

离散时间LQR理解

假设一个离散时间(discrete-tiem)系统可以被表示为如下形式:
x k + 1 = A x k + B u k ( 2.1 ) x_{k+1} = Ax_k + Bu_k \qquad \qquad (2.1) xk+1=Axk+Buk(2.1)
式中的 x ( t ) ∈ R n , u ( t ) ∈ R m x(t) \in R^n,u(t) \in R^m x(t)Rn,u(t)Rm,n是状态的个数,m是动作的个数。初始状态为 x 0 x_0 x0

假设所有状态都是可测量的,且我们要设计一个线性负反馈控制器 u k = − K x k u_k=-Kx_k uk=Kxk(也就定义了闭环回路性质),将其代入式(2.1),则有:
x k + 1 = A x k − B K x k = ( A − B K ) x k = A c x k ( 2.2 ) x_{k+1} = Ax_k -BKx_k = (A-BK)x_k = A_c x_k \qquad \qquad (2.2) xk+1=AxkBKxk=(ABK)xk=Acxk(2.2)
定义代价函数为:
J ( x k ) = 1 2 ∑ i = k ∞ x i T Q x i + u i T R u i ( 2.3 ) J(x_k)= \frac{1}{2} \sum_{i=k}^{\infty} x_i^TQx_i + u_i^TRu_i \qquad \qquad (2.3) J(xk)=21i=kxiTQxi+uiTRui(2.3)
与连续时间LQR一样,矩阵Q(大小 n × n n \times n n×n)和矩阵R(大小为 m × m m \times m m×m)一般由工程师来设计,必须保证Q是半正定矩阵、R是正定矩阵。代入 u = − K x u=-Kx u=Kx后,代价函数变成:
J ( x k ) = 1 2 ∑ i = k ∞ x i T ( Q + K T R K ) x i ( 2.4 ) J(x_k)= \frac{1}{2} \sum_{i=k}^{\infty} x_i^T(Q + K^TRK)x_i \qquad \qquad (2.4) J(xk)=21i=kxiT(Q+KTRK)xi(2.4)
而代价函数(2.3)也可以表示成:
J ( x k ) = 1 2 ( x k T Q x k + u k T R u k ) + ∑ i = k + 1 ∞ x i T Q x i + u i T R u i ( 2.5 ) J(x_k)= \frac{1}{2}(x_k^TQx_k + u_k^TRu_k) + \sum_{i=k+1}^{\infty} x_i^TQx_i + u_i^TRu_i \qquad \qquad (2.5) J(xk)=21(xkTQxk+ukTRuk)+i=k+1xiTQxi+uiTRui(2.5)
进一步表示成:
J ( x k ) = 1 2 ( x k T Q x k + u k T R u k ) + J ( x k + 1 ) ( 2.6 ) J(x_k)= \frac{1}{2}(x_k^TQx_k + u_k^TRu_k) + J(x_{k+1}) \qquad \qquad (2.6) J(xk)=21(xkTQxk+ukTRuk)+J(xk+1)(2.6)
式(2.6)要求边界条件 J ( x k = 0 ) = 0 J ( x_k = 0) = 0 J(xk=0)=0 。 也就是说,如果可以在给定控制输入序列的情况下求解 (2.6),与(2.3) 式给定当前状态 x k x_k xk通过评估无限和求解 J ( x k ) J(x_k) J(xk)一致。

现在让我们假设对于最优cost,对于所有的k都满足下式, 也就是假设最优cost是由当前状态和未知矩阵P组成的二次项;如果我们可以找到一个最优反馈K支持这个假设,就证明这个假设是有效的:
J ∗ ( x k ) = x k T P x k ( 2.7 ) J^*(x_k) =x_k^TPx_k \qquad \qquad (2.7) J(xk)=xkTPxk(2.7)
为了找到最优反馈K和P,将式(2.7)代入到式(2.6)得到:
x k T P x k = 1 2 ( x k T Q x k + u k T R u k ) + x k + 1 T P x k + 1 x_k^TPx_k = \frac{1}{2}(x_k^TQx_k + u_k^TRu_k) + x_{k+1}^TPx_{k+1} xkTPxk=21(xkTQxk+ukTRuk)+xk+1TPxk+1
再将式(2.1)代入上式后得到:
J ( x k ) = x k T P x k = 1 2 ( x k T Q x k + u k T R u k ) + ( A x k + B u k ) T P ( A x k + B u k ) ( 2.8 ) J(x_k) = x_k^TPx_k = \frac{1}{2}(x_k^TQx_k + u_k^TRu_k) + (Ax_k + Bu_k)^TP(Ax_k + Bu_k) \qquad \qquad (2.8) J(xk)=xkTPxk=21(xkTQxk+ukTRuk)+(Axk+Buk)TP(Axk+Buk)(2.8)
为了最小化上式,对 u k u_k uk求微分:
0 = ∂ ∂ u k J ( x k ) = R u k + B T P ( A x k + B u k ) 0=\frac{\partial}{\partial_{u_k}}J(x_k) = Ru_k + B^TP(Ax_k+Bu_k) 0=ukJ(xk)=Ruk+BTP(Axk+Buk)
由此得到最优控制为:
( R + B T P B ) u k = − B T P A x k u k = − ( R + B T P B ) − 1 B T P A x k (R+B^TPB)u_k = -B^TPAx_k \\ u_k = -(R+B^TPB)^{-1} B^TPAx_k (R+BTPB)uk=BTPAxkuk=(R+BTPB)1BTPAxk
上式相当于定义了最优反馈K为:
K = ( R + B T P B ) − 1 B T P A ( 2.9 ) K =(R+B^TPB)^{-1} B^TPA \qquad \qquad (2.9) K=(R+BTPB)1BTPA(2.9)

为了得到P, 将 u k = − K x k u_k=-Kx_k uk=Kxk代入到式(2.8)后:
x k T [ ( A − B K ) T P ( A − B K ) − P + Q + K T R K ] x k = 0 x^T_k[(A-BK)^T P(A-BK) - P + Q + K^TRK]x_k = 0 xkT[(ABK)TP(ABK)P+Q+KTRK]xk=0
为了使得上式对所有状态 x k x_k xk都成立,上式括号中的内容为0(注:下式是对应于 A c = A − B K A_c=A-BK Ac=ABK的Lyapunov equation):
( A − B K ) T P ( A − B K ) − P + Q + K T R K = 0 (A-BK)^T P(A-BK) - P + Q + K^TRK = 0 (ABK)TP(ABK)P+Q+KTRK=0

如果将式(2.9)代入到上式,则有
( A − B ( R + B T P B ) − 1 B T P A ) T P ( A − B ( R + B T P B ) − 1 B T P A ) − P + Q + ( ( R + B T P B ) − 1 B T P A ) T R ( ( R + B T P B ) − 1 B T P A ) = 0 (A-B(R+B^TPB)^{-1} B^TPA)^T P(A-B(R+B^TPB)^{-1} B^TPA) - P + Q + ((R+B^TPB)^{-1} B^TPA)^TR((R+B^TPB)^{-1} B^TPA) = 0 (AB(R+BTPB)1BTPA)TP(AB(R+BTPB)1BTPA)P+Q+((R+BTPB)1BTPA)TR((R+BTPB)1BTPA)=0
将上式简化之后可得到
A T P A − P + Q − A T P B ( R + B T P B ) − 1 B T P A = 0 ( 2.10 ) A^TPA - P + Q - A^TPB(R+B^TPB)^{-1}B^TPA = 0 \qquad \qquad (2.10) ATPAP+QATPB(R+BTPB)1BTPA=0(2.10)
式(2.10)被称为离散ARE方程(discrete time algebraic Riccati equation,DT ARE), 给定(A,B,Q,R)之后可以求解出来矩阵P,这样最优反馈K就可以根据式(2.9)得到了。

综上,寻找LQR反馈K的设计过程为:

  • 选择设计参数矩阵 Q = Q T ≥ 0 Q=Q^T \ge 0 Q=QT0 R = R T > 0 R=R^T >0 R=RT>0
  • 求解离散ARE方程(2.10)得到P
  • 使用 K = ( R + B T P B ) − 1 B T P A K =(R+B^TPB)^{-1} B^TPA K=(R+BTPB)1BTPA计算K

参考资料

  1. 连续时间LQR理解对应的讲座链接: F.L Lewis: Linear Quadratic Regulator (LQR) State Feedback Design
  2. 离散时间LQR理解对应的讲座链接: F.L Lewis:Feedback Control for Discrete-Time Systems
  3. csdn 博客: 线性二次型调节器(LQR)原理详解,阅读这个博客后知道了本文出处的讲座笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/580413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#与VisionPro联合编程

C#与VisionPro联合 1. 参照康耐视提供的样例2. 参照样例写一个1. 创建工程2. 添加引用3. 声明变量4. 初始化5. 刷新队列6. 用户数据获取7. 跨线程访问Windows控件--委托8. 显示图像9. 释放资源 3. 代码4. 资源下载 1. 参照康耐视提供的样例 C:\Program Files\Cognex\VisionPro…

详解Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)——通俗易懂版!!!

1.进程与线程定义 进程包含线程,如一个百度网盘进程,该进程的线程可以有上传,下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码: f1.get…

CAD objectArx 在操作mfc时出现“不支持尝试执行的操作“

问题原因: ARX中对话框通常继承自CAcUiDialog,CAcUiDialog 构造函数有个参数 HINSTANCE hInstance,默认为 NULL,指定了对话框资源所在DLL进程。如果没有指定该参数,在创建对话框(DoModal或Create&#xff…

湘潭大学-软件工程-大题浅析

前言 因为打印的资料只有少数几份有答案,所以这个部分比较简短 大题包括分析,设计, UML图,四个大题,占40分 应用设计题 1.建立软件公司的对象模型 矩形方框表示对象,只需要把题干所有信息用图表示出来即…

记一次应急响应练习(windows)

记一次应急响应练习(windows) windows: 1.请提交攻击者攻击成功的第一时间,格式:YY:MM:DD hh:mm:ss 答:2023/04/29:22:44:32 思路: 看见桌面的小皮面板,进入小皮的安装目录。发现…

IDEA相关操作

目录 连接MySQL IDEA配置Maven 配置全局Maven 导入Maven项目 方法一 方法二 安装Mybatisx插件 连接MySQL 填写user和Password之后测试连接 如果是第一次连接需要联网下载数据库连接驱动,安装提示下载即可 如果显示如下错误需要更改时区 Server returns …

2024 年 11 款最佳 Android 数据恢复软件应用

Android 设备上的数据丢失可能是一种令人痛苦的经历,通常会导致不可替代的信息瞬间消失。 意外删除、系统崩溃或格式错误都可能发生,重要数据的丢失可能会扰乱日常工作并影响您的工作效率。 幸运的是,技术进步带来了多种恢复解决方案&…

搭建谷歌 Gemini,体验谷歌版GPT4

12.06 日谷歌 DeepMind CEO 和联合创始人 Demis Hassabis 正式推出了大模型Gemini 目前,Gemini 1.0 提供了三个不同的尺寸版本,分别如下: Gemini Ultra:规模最大、能力最强,用于处理高度复杂的任务;Gemin…

Epic 安装失败,错误代码SUPQR1612,必要的先决条件安装失败,弹窗CD-ROM,解决方案!

1.错误记录 2.解决方案 首先我不是一个人解决的 在淘宝上花了15块钱解决的 我估计他是参考的这个(但你先别看我下面这个链接,看我讲完你再看这个 因为操作不大一样)EPIC安装先决条件失败/安装向导提前终止/安装不了解决方法 - 哔哩哔哩 淘宝…

【c++逆向 - 3】类继承 AND 虚表解析

公有派生 > is-a 关系 注&#xff1a;以下代码没实际意义&#xff0c;仅仅为了学习写的 公有派生将继承父类的所以数据成员和方法&#xff0c;Point 类来自上一篇博客&#xff1a; class Point { private:int x;int y;friend ostream& operator<<(ostream& …

(1)(1.11) SiK Radio v2(二)

文章目录 前言 4 连接无线电 5 使用Mission Planner进行配置 6 更新固件 7 预期范围 8 提高范围 9 支持不同国家/地区 10 3DR无线电讨论论坛 前言 SiK 遥测无线电是在自动驾驶仪和地面站之间建立遥测连接的最简单方法之一。本文提供了如何连接和配置无线电的基本用户指…

【赠书第13期】边缘计算系统设计与实践

文章目录 前言 1 硬件架构设计 2 软件框架设计 3 网络结构设计 4 安全性、可扩展性和性能优化 5 推荐图书 6 粉丝福利 前言 边缘计算是一种新兴的计算模式&#xff0c;它将计算资源推向网络边缘&#xff0c;以更好地满足实时性、低延迟和大规模设备连接的需求。边缘计算…

Python发送数据到Unity实现

Unity设置: 打开Unity项目。创建一个空的GameObject&#xff0c;并附加一个新的脚本TCPReceiver using System.Net; using System.Net.Sockets; using System.Text; using UnityEngine; using System.Threading;public class MyListener : MonoBehaviour {Thread thread;pub…

16.Redis 高级数据类型 + 网站数据统计

目录 1.Redis 高级数据类型 2.网站数据统计 2.1 业务层 2.2 表现层 2.2.1 记录数据 2.2.2 查看数据 1.Redis 高级数据类型 HyperLogLog&#xff1a;采用一种基数算法&#xff0c;用于完成独立总数的统计&#xff1b;占据空间小&#xff0c;无论统计多少个数据&#xff0…

C语言中switch语句中的case后()

基本格式 switch(表达式) { case整型数值1&#xff1a;语句1&#xff1b; ...... case整型数值n&#xff1a;语句n&#xff1b; default:语句n1; } 执行过程 计算“表达式”的值&#xff0c;假设为m从第一个case开始&#xff0c;比较“整型数值1”和m,如果相等&#xff0c…

最新技术整理3款开源免费直播推流工具,实现实时视频推流、视频拉流,目标端可以是服务器、云平台、移动设备等(附源码)

最新技术整理3款开源免费直播推流工具&#xff0c;实现实时视频推流、视频拉流&#xff0c;目标端可以是服务器、云平台、移动设备等&#xff08;附源码&#xff09;。 什么是推流&#xff1f; 视频推流是指将实时的视频数据从一个源端发送到一个或多个目标端的过程。推流的源…

数据库原理及应用·存储过程和触发器

12.1 T-SQL中的变量 12.1.1 T-SQL概述 SQL&#xff08;Structured Query Language&#xff09;结构化查询语言&#xff0c;是一种数据库查询和程序设计语言&#xff0c;用于存取数据以及查询、更新和管理关系数据库系统。 Transact-SQL即事务SQL&#xff0c;也简称为T-SQL&a…

effective c++ 笔记 导读/条款2-4

导读 explicit关键字 阻止类型之间的隐式转换。 class B{explict B(int x 0); } Void doSomething&#xff08;b BObject); doSomething(B(28)); //正确 doSomething(28); //错误copy构造和copy赋值 Class Object{Object(): //default构造Object(const Object& obj); …

Gateway集成方法以及拦截器和过滤器的使用

前提&#xff1a;请先创建好一个SpringBoot项目 1. 引入依赖 SpringCloud 和 alibabaCloud 、 SpringBoot间对版本有强制要求&#xff0c;我使用的springboot是3.0.2的版本。版本对应关系请看&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <dependency…

VSCode 加Cortex-Debug嵌入式调试方法

简介 当使用ARM Cortex-M微控制器时&#xff0c;Cortex-Debug是一个Visual Studio Code的扩展&#xff0c;以简化调试过程。本文档介绍了如何编写启动配置(launch.json)。 settings.json配置 打开VSCode用户设置文件settings.json: 文件→偏好→设置选择用户设置: 在搜索栏中…