零碎的知识点(七):线性二次调节器(LQR)是什么?
线性二次调节器(LQR)是什么?
- 1. LQR的定义与目标
- 2. LQR的原理
- 性能指标 J J J
- 最优解的计算
- 控制律
- 3. LQR的性质
- 4. 举例说明
- 问题描述
- 解步骤
- 仿真结果
- 5. 实际应用
- 总结
线性二次调节器(LQR) 是一种经典的最优控制方法,用于求解线性系统的状态反馈控制问题。其目标是在满足动态约束的前提下,通过设计状态反馈控制器,使系统的性能指标达到最优。
1. LQR的定义与目标
LQR主要解决以下问题:
-
系统的状态描述为线性动态系统:
x ˙ ( t ) = A x ( t ) + B u ( t ) \dot{x}(t) = A x(t) + B u(t) x˙(t)=Ax(t)+Bu(t)
其中:- x ( t ) ∈ R n x(t) \in \mathbb{R}^n x(t)∈Rn 是系统状态向量;
- u ( t ) ∈ R m u(t) \in \mathbb{R}^m u(t)∈Rm 是控制输入;
- A ∈ R n × n A \in \mathbb{R}^{n \times n} A∈Rn×n 是状态矩阵;
- B ∈ R n × m B \in \mathbb{R}^{n \times m} B∈Rn×m 是控制矩阵。
-
设计一个控制律 u ( t ) = − K x ( t ) u(t) = -K x(t) u(t)=−Kx(t),其中 K K K 是控制增益矩阵,使以下性能指标 J J J 最小化:
J = ∫ 0 ∞ ( x ( t ) T Q x ( t ) + u ( t ) T R u ( t ) ) d t J = \int_{0}^{\infty} \left( x(t)^T Q x(t) + u(t)^T R u(t) \right) dt J=∫0∞(x(t)TQx(t)+u(t)TRu(t))dt
其中:- Q ∈ R n × n Q \in \mathbb{R}^{n \times n} Q∈Rn×n 是对状态 x ( t ) x(t) x(t) 的加权矩阵(正定或半正定);
- R ∈ R m × m R \in \mathbb{R}^{m \times m} R∈Rm×m 是对控制输入 u ( t ) u(t) u(t) 的加权矩阵(正定)。
2. LQR的原理
性能指标 J J J
性能指标 J J J 的物理意义是权衡系统偏离零状态(通过 x ( t ) T Q x ( t ) x(t)^T Q x(t) x(t)TQx(t))和控制能量消耗(通过 u ( t ) T R u ( t ) u(t)^T R u(t) u(t)TRu(t))的代价。设计 Q Q Q 和 R R R 时:
- 较大的 Q Q Q 强调减少状态偏离;
- 较大的 R R R 强调控制能量的节省。
最优解的计算
LQR 的核心是通过Riccati方程计算最优状态反馈增益矩阵 K K K。具体步骤如下:
- 计算解 Riccati 方程的对称正定矩阵 P P P:
A T P + P A − P B R − 1 B T P + Q = 0 A^T P + P A - P B R^{-1} B^T P + Q = 0 ATP+PA−PBR−1BTP+Q=0
这是一个连续时间代数 Riccati 方程(CARE)。 - 利用 P P P 计算反馈增益矩阵:
K = R − 1 B T P K = R^{-1} B^T P K=R−1BTP
控制律
最优控制律为:
u ( t ) = − K x ( t ) u(t) = -K x(t) u(t)=−Kx(t)
3. LQR的性质
- 稳定性:如果 Q Q Q 和 R R R 正定,LQR 控制器设计的闭环系统是渐进稳定的。
- 鲁棒性:LQR 对模型的参数扰动具有一定的鲁棒性,但仅限于小扰动。
- 灵活性:通过调整 Q Q Q 和 R R R,可以改变状态和控制能量之间的权衡。
4. 举例说明
问题描述
一个简单的二阶质量-弹簧-阻尼系统:
m x ¨ + c x ˙ + k x = F m \ddot{x} + c \dot{x} + k x = F mx¨+cx˙+kx=F
将其转换为状态空间形式:
[ x ˙ 1 x ˙ 2 ] = [ 0 1 − k m − c m ] [ x 1 x 2 ] + [ 0 1 m ] u \begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ -\frac{k}{m} & -\frac{c}{m} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} + \begin{bmatrix} 0 \\ \frac{1}{m} \end{bmatrix} u [x˙1x˙2]=[0−mk1−mc][x1x2]+[0m1]u
其中:
- x 1 = x x_1 = x x1=x 是位移;
- x 2 = x ˙ x_2 = \dot{x} x2=x˙ 是速度;
- u = F u = F u=F 是控制输入。
设参数为:
- m = 1 m = 1 m=1 kg;
- c = 0.5 c = 0.5 c=0.5 Ns/m;
- k = 2 k = 2 k=2 N/m;
- Q = diag ( 1 , 1 ) Q = \text{diag}(1, 1) Q=diag(1,1);
- R = 0.1 R = 0.1 R=0.1。
解步骤
-
确定状态矩阵 A A A 和控制矩阵 B B B:
A = [ 0 1 − 2 − 0.5 ] , B = [ 0 1 ] A = \begin{bmatrix} 0 & 1 \\ -2 & -0.5 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 1 \end{bmatrix} A=[0−21−0.5],B=[01] -
解 Riccati 方程,得到 P P P:
P = [ 2.236 1.118 1.118 2.618 ] P = \begin{bmatrix} 2.236 & 1.118 \\ 1.118 & 2.618 \end{bmatrix} P=[2.2361.1181.1182.618] -
计算最优增益矩阵 K K K:
K = R − 1 B T P = [ 4.472 3.618 ] K = R^{-1} B^T P = \begin{bmatrix} 4.472 & 3.618 \end{bmatrix} K=R−1BTP=[4.4723.618] -
最优控制律:
u ( t ) = − K x ( t ) = − [ 4.472 3.618 ] [ x 1 x 2 ] u(t) = -K x(t) = -[4.472 \; 3.618] \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} u(t)=−Kx(t)=−[4.4723.618][x1x2]
仿真结果
在闭环控制下,系统状态 x ( t ) x(t) x(t) 会快速趋于零,同时控制输入 u ( t ) u(t) u(t) 保持较小,体现了状态偏差和控制能量的优化。
5. 实际应用
-
航天器姿态控制:
LQR 用于最优设计航天器的姿态调节控制器,确保姿态调整时能量最低。 -
机器人控制:
在机器人路径跟踪中,LQR 用于控制机器人的位置和速度。 -
车辆动力学控制:
在自动驾驶系统中,LQR 常用于轨迹跟踪问题,设计车辆的方向和速度控制。
总结
LQR 是一种功能强大且理论完善的最优控制方法,通过解决 Riccati 方程和设计反馈增益矩阵,能够为线性系统提供稳定且高效的控制策略。它的应用遍及多个工程领域,是现代控制理论的重要组成部分。
相关文章:
零碎的知识点(七):线性二次调节器(LQR)是什么?
线性二次调节器(LQR)是什么? 1. LQR的定义与目标2. LQR的原理性能指标 J J J最优解的计算控制律 3. LQR的性质4. 举例说明问题描述解步骤仿真结果 5. 实际应用总结 线性二次调节器(LQR) 是一种经典的最优控制方法&…...

Matlab一些使用技巧
代码分段 两个百分号就可以实现代码的分段,不同段之间会以不同的背景色显示,方便调试 如下: %% 腐蚀 stlen TimeWidth*Fs/50; %线性算子的长度,1/100的脉宽,对应0.5us,15个采样点 stlen 100; SE strel…...

Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian
Linux 操作系统有众多发行版(Distros),每个发行版的设计目标、目标用户、应用场景和使用方式有所不同。常见的 Linux 发行版包括 Red Hat、Ubuntu、Kylin 和 Debian。以下是这些发行版的详细介绍与对比,以及它们的应用场景和使用方…...

从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)
引言: 在我们之前的文章中,我们详细探讨了从CentOS迁移到龙蜥操作系统的基本过程和考虑因素。今天,我们将继续这个系列,重点关注龙蜥系统的实际应用——特别是常用软件的安装和配置。 龙蜥操作系统(OpenAnolis&#…...
java1-相对路径与绝对路径
注意注意~开始新部分啦! 开始正式分享java前,先为大家分享一下一个常用的概念---文件的相对路径与绝对路径. 开篇明义: 相对路径是指一个文件或目录相对于当前工作目录的路径。相对路径不包含根目录,而是从当前目录开始计算。 绝对路径是指一个文件或目录从根目录…...

iChainfo 品牌升級為 ichaingo,打造 Web3 數據基礎設施新標杆
Web3 數據基礎設施服務商 iChainfo 今⽇正式宣佈,全新名稱 「ichaingo」 重磅登場,新的官⽅網站 ichaingo.com 正式上線。此次品牌升級基於 Web3 ⾏業的發展趨勢和公司⾃⾝的戰略布局,旨在為全 球⽤戶提供更準確、即時、全⾯、深⼊的 Web3 數…...
Flink概念知识讲解之:Restart重启策略配置
Flink概念知识讲解之:Restart重启策略配置 当 Task 发生故障时,Flink 需要重启出错的 Task 以及其他受到影响的 Task ,以使得作业恢复到正常执行状态。 Flink 通过重启策略和故障恢复策略来控制 Task 重启:重启策略决定是否可以…...

[java基础-集合篇]LinkedList源码粗析
LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...
面试:C++类成员初始化顺序
1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。 2、静态数据成员:在main函数启动之前,并且只初始化一次 3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造…...

【Python】Python与C的区别
文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如,int a 10;、printf("Hello, World!");。分号是语句的一部分,用于…...

[开源]自动化定位建图系统(视频)
系统状态机: 效果展示: 1、 机器人建图定位系统-基础重定位,定位功能演示 2、 机器人建图定位系统-增量地图构建,手动回环检测演示 3、… 开源链接: https://gitee.com/li-wenhao-lwh/lifelong-backend Qt人机交互…...

ISP流程--去马赛克详解
前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…...
Objective-C语言的软件工程
Objective-C语言的软件工程探讨 引言 在软件工程的领域中,编程语言的选择是至关重要的。Objective-C,作为一种为苹果公司的macOS和iOS操作系统而开发的编程语言,凭借其灵活性和强大的功能被广泛应用于应用开发。然而,随着Swift等…...
Objective-C语言的语法糖
Objective-C语言的语法糖探秘 在编程语言的发展历程中,语法糖(Syntactic Sugar)是一个颇具趣味性和重要性的概念。它让编程的表达更加简洁直观,同时提高了代码的可读性和可维护性。Objective-C 作为一种面向对象的编程语言&#…...
设计模式中的代理模式
在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。 一、静态代理模式 在编译时就已经确定了代理类和被代理类的关系。 代理类和目标对象通常实现相同的接口或继承相同父类。 缺点是对于每个需要代理的目标对象…...
15个学习Python 的编程游戏网站
从小很多人都会在想,那些枯燥的教学课程要是全部变成游戏就好了,这样的话那期末成绩不得立即起飞了嘛?那对于编程很多人也有这样的想法,边玩边学就好了 这不已经有很多程序员开发了多款边玩边学的编程游戏供大家使用,…...
微信小程序实现拖拽盒子效果
要实现一个当前盒子高度由里面的盒子进行支配高度拖拽的效果 // wxml<view class"exmation-item" wx:elif"{{type4}}"> <view class"exmation-item-drag-box" id"drag-box"> <!-- 内容 --><view class"exm…...
Linux-蓝牙协议
SPP (Serial Port Profile): 串口协议(SPP)是一个蓝牙配置文件,允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接,允许设备如计算机和外设(例如打印机或条形码扫描器)之间进行数据传输。A…...

moviepy 将mp4视频文件提取音频mp3 - python 实现
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...
imageio 图片转mp4 保存mp4
目录 安装: imageio 图片转mp4 numpy 保存mp4 安装: FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...