LQR 控制器

news2024/12/24 20:46:50

LQR(Linear Quadratic Regulator)控制器

LQR(Linear Quadratic Regulator)是一种经典的线性控制器设计方法,用于设计线性时不变系统的状态反馈控制器,以最小化系统性能指标,通常是二次代价函数。下面,将详细推导LQR算法,并提供MATLAB应用示例。

推导LQR控制器:

考虑一个离散时间线性时不变系统的状态空间表达式:

x [ k + 1 ] = A x [ k ] + B u [ k ] x[k+1] = A x[k] + B u[k] x[k+1]=Ax[k]+Bu[k]

其中, x [ k ] x[k] x[k] 是系统状态, u [ k ] u[k] u[k] 是控制输入, A A A B B B 是系统矩阵。

LQR的目标是找到一个状态反馈控制器,它具有以下形式:

u [ k ] = − K x [ k ] u[k] = -K x[k] u[k]=Kx[k]

其中, K K K 是控制器增益矩阵,它需要优化。控制器的目标是最小化以下代价函数:

J = ∑ k = 0 ∞ ( x [ k ] T Q x [ k ] + u [ k ] T R u [ k ] ) J = \sum_{k=0}^{\infty} (x[k]^T Q x[k] + u[k]^T R u[k]) J=k=0(x[k]TQx[k]+u[k]TRu[k])

其中, Q Q Q 是状态权重矩阵, R R R 是控制输入权重矩阵。

我们首先需要解出Riccati方程来找到最优控制器增益 K K K和最小的代价函数 J J J

  1. 首先,我们定义代价函数的无穷时间累积:

J = lim ⁡ N → ∞ ∑ k = 0 N ( x [ k ] T Q x [ k ] + u [ k ] T R u [ k ] ) J = \lim_{N\to\infty}\sum_{k=0}^{N} (x[k]^T Q x[k] + u[k]^T R u[k]) J=Nlimk=0N(x[k]TQx[k]+u[k]TRu[k])

  1. 接下来,我们定义一个有限时间的代价函数,称为 J N J_N JN,并将其表示为与无穷时间代价函数的差值:

J N = ∑ k = 0 N ( x [ k ] T Q x [ k ] + u [ k ] T R u [ k ] ) − x [ N + 1 ] T Q x [ N + 1 ] J_N = \sum_{k=0}^{N} (x[k]^T Q x[k] + u[k]^T R u[k]) - x[N+1]^T Q x[N+1] JN=k=0N(x[k]TQx[k]+u[k]TRu[k])x[N+1]TQx[N+1]

这里,我们假设 x [ N + 1 ] x[N+1] x[N+1]是一个零向量,这是因为我们在有限时间内考虑代价。

  1. 然后,我们通过对 J N J_N JN u [ k ] u[k] u[k]求偏导,并令其等于零来找到最小值:

∂ J N ∂ u [ k ] = 2 R u [ k ] + 2 B T P x [ k ] = 0 \frac{\partial J_N}{\partial u[k]} = 2R u[k] + 2B^T P x[k] = 0 u[k]JN=2Ru[k]+2BTPx[k]=0

其中, P P P是状态权重矩阵的解,它满足离散时间的Riccati方程:

P = A T P A − A T P B ( R + B T P B ) − 1 B T P A + Q P = A^T P A - A^T P B (R + B^T P B)^{-1} B^T P A + Q P=ATPAATPB(R+BTPB)1BTPA+Q

  1. 一旦我们找到了 P P P,我们可以计算最优控制器增益 K K K

K = ( R + B T P B ) − 1 B T P A K = (R + B^T P B)^{-1} B^T P A K=(R+BTPB)1BTPA

步骤4:使用MATLAB实现LQR控制器和仿真

以下是针对一个二阶系统的MATLAB代码示例,包括控制器设计和性能仿真。假设我们有以下系统参数:

A = [ 1 1 0 1 ] , B = [ 0 1 ] , Q = [ 1 0 0 1 ] , R = 1 A = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \quad Q = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}, \quad R = 1 A=[1011],B=[01],Q=[1001],R=1

% 定义系统矩阵
% 系统矩阵
A = [1, 1; 0, 1];
B = [0; 1];

% 权重矩阵
Q = [1, 0; 0, 1];
R = 1;

% 求解Riccati方程
P = dare(A, B, Q, R);

% 计算最优控制器增益矩阵 K
K = (R + B' * P * B)^(-1) * B' * P * A;

% 仿真系统响应
x0 = [100; 0]; % 初始状态
N = 100; % 仿真步数
x = zeros(2, N);
u = zeros(1, N);
x(:,1) =x0;

for k = 1:N
    u(k) = -K * x(:, k); % 计算控制输入
    x(:, k+1) = A * x(:, k) + B * u(k); % 更新状态
end

% 绘制状态和控制输入
figure(Color='w')
t = 0:N;
subplot(2, 1, 1);
plot(t, x(1, :), 'b', 'LineWidth', 2);
ylabel('状态 x_1');
title('LQR控制器仿真');
set(gca,'FontSize',18);
subplot(2, 1, 2);
stairs(t(1:end-1), u, 'r', 'LineWidth', 2);
xlabel('时间步骤');
ylabel('控制输入 u');
set(gca,'FontSize',18);


在这里插入图片描述

在这个示例中,我们首先定义了系统的 A A A B B B矩阵,然后设置了状态权重矩阵 Q Q Q和控制输入权重矩阵 R R R。接下来,我们使用dare函数来解Riccati方程,找到状态权重矩阵 P P P,然后计算最优控制器增益矩阵 K K K。这个矩阵 K K K可以用于状态反馈控制系统。

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

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

相关文章

软件测试/测试开发丨ChatGPT:带你进入智能对话的新时代

简介 人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋(英伟达CEO) ChatGPT 好得有点可怕了,我们距离危险的强人工智能不远了。——马斯克(Tesla/SpaceX/Twitter CEO) 以上的内容说明我们现在正处于一个技术大…

Docker镜像解析获取Dockerfile文件

01、概述 当涉及到容器镜像的安全时,特别是在出现镜像投毒引发的安全事件时,追溯镜像的来源和解析Dockerfile文件是应急事件处理的关键步骤。在这篇博客中,我们将探讨如何从镜像解析获取Dockerfile文件,这对容器安全至关重要。 02…

2023 年高教社杯全国大学生数学建模竞赛题D 题 圈养湖羊的空间利用率

2023 年全国大学生数学建模竞赛题D 题 圈养湖羊的空间利用率思路详解Python源码 昨天已经将E题第一二问的详解和思路源码都写了出来,大家如果想从E题下手的话推荐参考本人文章,个人认为E题在建模上是优于D题的,毕竟有给出数据而且有明确的建…

基于springboot+vue+mysql的新能源充电系统--前后端分离(内含源码+报告+部署教程)

新能源充电系统管理系统按照操作主体分为管理员和用户。管理员的功能包括反馈管理、客服聊天管理、充电桩管理、充电桩预约管理、字典管理、新能源公告管理、用户管理、管理员管理等,可以管理报修。用户的功能包括管理部门以及部门岗位信息,管理充电桩信…

2023年下半年高项考试学习计划

之前总结 2023年上半年的考试,对于我自己,就是虎头蛇尾,也谈不上太过自信,好好学习了一段时间之后,也就是不再发博文,截止到2022年11月的时候,自己就算是放弃了,没有再主动学习。 结…

华为云云耀云服务器L实例评测|老用户回归的初印象

华为云云耀云服务器L实例评测|老用户回归的初印象 前言一、新面孔1. 云耀云服务器2. 服务器特色 二、上手感官体验1. 性价比感受2. 推荐宝塔面板3. CloudShell登录4. 安全性 总结 前言 其实笔者接触华为云已经很久了,第一次使用的云服务器就是华为云。当…

【Linux成长史】Linux基本指令大全

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…

SpringMvc丨DispatcherServlet

​ ​ DispatcherServlet 是 Spring 框架中的一个核心组件,用于处理客户端请求并将请求分发到合适的处理程序(Controller)进行处理。它是 Spring MVC 框架的一部分,负责接收 HTTP 请求,将请求分发给控制器进行处理&a…

sed正则表达式

很多linux命令支持正则表达式,sed也不例外。 行开始 ( ^ ) 插入符^匹配一行的开始。比如说,匹配以103打头的行: sed -n /^103/p data.txt 注意,插入符只有在表达式的首位时,才表示行首匹配。 行尾( $) 美元符$匹…

怎样理解 Object 类中的 clone() 方法?

目录 1. clone() 方法说明 2. JVM 内存模型 3. 浅拷贝(浅克隆)与深拷贝(深克隆)的区别 4. 使用 clone() 克隆方法需要注意的事项 5. Object 类中的 clone() 方法为浅克隆 1. clone() 方法说明 clone() 方法是 Java.lang.Object 类中已经定义好的一个方法,该方…

文心一言、讯飞星火与GPT-4/3.5在回答中文历史问题的表现

最近,随着备受关注的文心一言正式免费向全社会开放,再次引起了社会层面对国产大模型的兴趣。 以文心一言为代表的国产大模型性能究竟如何?如果将它们相互比较,并且和GPT系列模型等国际前沿水平的LLM进行比较,会得到什么…

【系统设计系列】 应用层与微服务

系统设计系列初衷 System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版: https://github.com/donnemart…

超全60000多字详解 14 种设计模式 (多图+代码+总结+Demo)

超全60000多字详解 14 种设计模式 (多图代码总结Demo) 之前读耗子叔文章时,看到过有句话没有实践,再多的理论都是扯淡,个人很赞同。你觉得自己学会了,但实践与学会之间有着很大差别。 单例模式 (Singleton Pattern) 定义或概念 …

水滴图 echarts lable失真显示很多9 水滴图 显示99999999

解决办法: 添加一个 seriesName lable用seriesName <template><div ref"EchartLiquidfill" class"EchartLiquidfill" :style"{ width: width }" /> </template><script> export default {name: "EchartLiquidfil…

第8章 驱动模块编译进内核实验(iTOP-RK3568开发板驱动开发指南 )

通过上一章的学习&#xff0c;我们学会了使用menuconfig图形化配置工具&#xff0c;以及了解了menuconfig相关的文件&#xff1a;Kconfig .config XXXdefconfig。本章节学习将helloworld驱动编译进内核。 输入“cd drivers/char”进入到 drivers/char 目录下&#xff0c;然后输…

2023工博会,正运动超高速PCIe实时运动控制卡应用预览(一)

展会倒计时&#xff1a;11天 本次的中国国际工业博览会正运动技术将携超高速PCIe实时运动控制卡亮相。 •为智能装备提供高速高精运动控制解决方案&#xff1b; •内部搭载运动控制实时内核MotionRT7; •提供多路高速IO输入输出&#xff0c;具备多种实时运动控制功能&#x…

Maven安装(超详解)

下载地址:Maven – Download Apache Maven 在提供的资料中,已经提供了下载好的安装包。如下 1、解压 apache-maven-3.9.4-bin.zip(解压即安装) bin目录 : 存放的是可执行命令。(mvn 命令重点关注) conf目录 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)…

Unity中的场景加载

1、同步场景 2、异步加载 3、保留物体到下个场景中

vue 前端 问题整理

列表显示字典数据 template里面的vue代码 <el-table-column label"性别" align"center" prop"sex"><template #default"scope"> <!-- <dict-tag :optionssysUserSex :value"scope.row.sex&quo…

HTTP代理与代理IP的区别

HTTP代理和代理IP是网络安全和隐私保护中常用的两种工具。HTTP代理是一种代理服务器&#xff0c;它使用HTTP协议来转发客户端请求和响应目标服务器的响应。代理IP是一种匿名代理服务器&#xff0c;它隐藏了用户的真实IP地址&#xff0c;以保护用户的隐私和安全。本文将介绍HTTP…