零碎的知识点(七):线性二次调节器(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 …...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
