MATLAB初学者入门(25)—— LQR控制器优化设计

devtools/2024/9/19 0:54:24/ 标签: matlab, 算法, 开发语言, 个人开发, 学习, 笔记, 制造

        LQR(线性二次调节器)控制器是一种常用的最优控制策略,用于设计系统的状态反馈控制器以最小化性能指标,通常是所有状态的加权平方和与控制输入的加权平方和。在MATLAB中,使用LQR控制器通常涉及定义系统模型、选择适当的权重矩阵,并使用lqr函数来求解最优增益矩阵。

案例分析:使用MATLAB设计LQR控制器优化倒立摆系统

        假设我们需要控制一个简单的倒立摆系统,目标是使倒立摆在受到干扰后能迅速稳定回垂直位置。

步骤 1: 定义系统模型

        首先,定义倒立摆的状态空间模型。倒立摆是一个常见的控制系统示例,可以用线性化的状态空间方程来描述其动态行为。

% 倒立摆系统参数
g = 9.81;   % 重力加速度,m/s^2
l = 0.5;    % 摆长,m
m = 0.15;   % 摆杆质量,kg
b = 0.1;    % 阻尼系数% 状态空间模型
A = [0 1 0 0;g/l 0 0 0;0 0 0 1;0 0 0 -b/m];
B = [0; 0; 0; 1/m];
C = eye(4);
D = zeros(4,1);% 创建系统
sys = ss(A, B, C, D);
步骤 2: 设计LQR控制器

        选择状态权重矩阵Q和控制权重矩阵RQR的选择将决定系统响应的性质,如快速性、过冲和稳态误差。

Q = diag([10, 1, 10, 1]);  % 加大对角度误差的惩罚
R = 0.01;  % 控制力矩的权重% 计算LQR控制器的增益
K = lqr(A, B, Q, R);
步骤 3: 模拟系统响应

        使用设计的LQR控制器模拟倒立摆的响应,查看控制器的性能。

% 新的反馈矩阵A-B*K
sys_cl = ss(A-B*K, B, C, D);% 初始状态:小角度偏离垂直位置
initialState = [0.1; 0; 0; 0];
t = 0:0.01:10;  % 时间向量% 模拟闭环系统的响应
[Y, T, X] = initial(sys_cl, initialState, t);% 绘制角度响应
figure;
plot(T, X(:,1));
title('Pendulum Angle Response with LQR Control');
xlabel('Time (s)');
ylabel('Angle (rad)');

案例分析:增强倒立摆LQR控制器的鲁棒性

        假设倒立摆系统受到外部扰动和部分状态不可测的影响,我们将设计一个观测器增强的LQR控制器来提高系统的性能和鲁棒性。

步骤 1: 定义扩展的系统模型

        在原有的倒立摆模型中引入扰动和部分状态不可测的情况。

A = [0 1 0 0;g/l 0 0 0;0 0 0 1;0 0 0 -b/m];
B = [0; 0; 0; 1/m];
D = zeros(4,1);% 假设只能测量角度和角速度
C = [1 0 0 0;0 1 0 0];% 系统加入外部扰动
Bd = [0; 1; 0; 0];
步骤 2: 设计LQR控制器和观测器(Luenberger 观测器)

        首先设计LQR控制器,然后设计一个状态观测器来估计不可直接测量的状态。

Q = diag([10, 1, 10, 1]);
R = 0.01;
K = lqr(A, B, Q, R);% 设计观测器增益
P = lyap(A', Q);  % 解Lyapunov方程
L = lqr(A', C', P, R)';  % 观测器增益
步骤 3: 模拟带观测器的闭环系统

        结合LQR控制器和观测器来模拟系统响应。

% 状态空间模型,包括观测器
sys_obs = ss(A-L*C, [B L], eye(4), zeros(4,2));% 初始状态和扰动
initialState = [0.1; 0; 0; 0];
initialEstimate = [0; 0; 0; 0];  % 观测器的初始状态估计
t = 0:0.01:10;% 模拟系统响应
[Y, T, X] = lsim(sys_obs, [zeros(length(t),1), Bd*ones(length(t),1)], t, [initialState; initialEstimate]);% 绘制实际和估计的状态
figure;
subplot(2,1,1);
plot(T, X(:,1), T, X(:,3));
title('Actual and Estimated States');
legend('Actual Angle', 'Estimated Angle');subplot(2,1,2);
plot(T, X(:,2), T, X(:,4));
legend('Actual Angular Rate', 'Estimated Angular Rate');
xlabel('Time (s)');
ylabel('States');

案例分析:整合模型预测控制(MPC)与LQR控制器

        假设倒立摆系统的参数如长度和质量可能会改变,或系统需要适应不同的操作条件,使用MPC可以在保持LQR优化目标的基础上,实时调整控制策略以应对这种变化。

步骤 1: 定义系统模型与MPC设置

        首先,我们需要定义倒立摆系统的状态空间模型,并设定MPC控制器的基本参数。   

% 系统参数
g = 9.81;   % 重力加速度,m/s^2
l = 0.5;    % 摆长,m
m = 0.15;   % 摆杆质量,kg
b = 0.1;    % 阻尼系数% 状态空间模型
A = [0 1 0 0;g/l 0 0 0;0 0 0 1;0 0 0 -b/m];
B = [0; 0; 0; 1/m];
C = eye(4);
D = zeros(4,1);% 创建连续时间系统
sys = ss(A, B, C, D);% 转换为离散时间系统,假设采样时间为0.1秒
Ts = 0.1;
sysd = c2d(sys, Ts);% 设定MPC控制器
predictionHorizon = 20;
controlHorizon = 5;
mpcController = mpc(sysd, Ts, predictionHorizon, controlHorizon);% 定义MPC的成本函数(相似于LQR成本)
mpcController.Weights.OutputVariables = [1 0 1 0];
mpcController.Weights.ManipulatedVariablesRate = 0.1;

     

步骤 2: 模拟MPC控制效果

        使用MPC控制器来模拟倒立摆的动态响应,并对比不同参数变化下的控制效果。

% 初始状态和模拟时间
initialState = [0.1; 0; 0; 0];
Tf = 10;
options = mpcsimopt();
options.RefLookAhead = 'off';
options.MDLookAhead = 'off';
options.Constraints = 'on';
options.OpenLoop = 'off';% 运行MPC控制仿真
[~,~,u,y,t] = sim(mpcController, Tf, [], [], initialState, options);% 绘制响应
figure;
subplot(2,1,1);
plot(t, y);
title('MPC Controlled Pendulum Responses');
legend('Angle', 'Angular Rate');
ylabel('States');subplot(2,1,2);
stairs(t, u);
xlabel('Time (s)');
ylabel('Control Input');
title('Control Effort');

结论

(1)使用LQR控制器,倒立摆系统能够有效地从初始偏移角度快速稳定到垂直位置。通过调整QR中的参数,可以进一步优化系统的性能,例如减少过冲或达到更快的响应时间。LQR控制器的优点在于它提供了一种系统性的方法来平衡状态误差与控制能耗之间的权衡,使得控制器设计既系统化又具有理论支持。然而,实际应用中需要注意,LQR假设系统模型完全已知且系统线性,对于非线性或模型不确定性较高的系统,可能需要更复杂的控制策略或对LQR设计进行适当的修改。

(2)通过整合LQR控制器和状态观测器,我们不仅可以对倒立摆系统进行有效控制,还能处理外部扰动和不完全可测的状态。这种方法提高了系统的鲁棒性,确保了在实际应用中的可靠性和稳定性。在实践中,正确调整观测器和控制器的设计参数对于实现最佳性能至关重要。此外,应考虑系统模型的精确度和可能的模型误差,以便进一步优化系统设计和性能。

(3)通过整合模型预测控制(MPC)技术,我们能够使LQR控制器更加灵活和适应性强,尤其是在面对系统参数变化或外部扰动时。MPC提供了一种优化控制输入的方法,通过在每个时间步解决一个有限时间范围内的优化问题,可以预测并调整控制行为,从而实现更优的控制性能。这种控制策略的主要优点是它能够实时地处理和适应系统的动态变化,非常适合于需要严格控制性能和安全性的应用,如自动驾驶车辆、航空航天控制系统以及工业自动化过程。然而,MPC的计算负担较重,需要高性能的计算硬件来满足实时控制的要求。在设计和实施MPC策略时,选择合适的预测和控制范围至关重要,以保证控制系统的实用性和经济性。


http://www.ppmy.cn/devtools/25317.html

相关文章

HTTP 与 HTTPS

HTTP 浅谈 HTTP HTTPS 浅谈 HTTPS HTTP 与 HTTPS区别 HTTP(Hypertext Transfer Protocol)和HTTPS(Hyper Text Transfer Protocol Secure)在多个方面存在显著的区别,这些区别主要体现在以下几个方面: 特…

设计模式之监听器模式ListenerPattern(三)

一、介绍 监听器模式是一种软件设计模式,在对象的状态发生改变时,允许依赖它的其他对象获得通知。在Java中,可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

2024年了,Intel Alder Lake N100 能用 Linux 系统了吗?

前言 2024年4月初,用了一年的零刻EQ12小主机的SSD系统盘突然掉盘坏了。之前用的是官方送的U盘安装的Win11系统,主要用来挂机下载、虚拟机跑OpenWrt和家庭助手HA。 在等盘售后的日子里,顺便重新思考了一下对系统的选择。其实原本就不是很想用…

Node常用的一些工具

一、Node版本管理工具 在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的 NodeJS 运行环境。如果没有一个合适的工具,这个问题将非常棘手。 因此Node版本管理工具应运而…

提醒|2024年CSC国家公派博士后、联合培养博士项目即将开始网申(附精选问题解答)

留学基金委(CSC)2024年国家公派博士后、联合培养博士项目网上申报时间为5月10日—5月31日。为此,知识人网小编提醒申请者及时申报。本文我们将常见申请及申报问题汇总解答,以帮助申请者顺利完成CSC申报工作,并预祝红榜…

Java知识点汇总

数据类型: 计算机中存储数据的最小单位为比特位(b),其值为0或1,8个比特位组成一个字节(B),KB、MB、GB、TB 1个英文字母占一个字节,一个汉子占两个字节,字节的取值为-128–127,数字分为整数、浮点、长整,12488421 关键字 this 调用当前对象的属性、构造方法和方法 …

spring boot的项目+nginx,怎么预防点击劫持(clicekJacking)

点击劫持(Clickjacking)是一种视觉欺骗技术,攻击者通过在透明的框架上叠加一个看似无害的界面,诱使用户在不知情的情况下点击按钮或链接,从而执行攻击者意图的操作。为了防御点击劫持攻击,在结合Spring Boo…

spring boot 基础案例【1】在页面上打印hellow world

1.在页面上打印hellow world 要在 Spring Boot 中打印 “Hello World” 并理解其代码,你可以创建一个简单的 Spring Boot 应用。这里,我将展示一个基本的示例并逐行解释代码的功能。 1.1 创建 Spring Boot 应用 首先,确保你已经安装了 Jav…

Ubuntu下载的nginx的位置

位置在/etc/nginx 启动nginx systemctl status nginx上面的命令不合适,就重启nginx sudo service nginx restart 关闭nginx nginx -s stop Ubuntu默认的html地址在该文件夹中的default中: /etc/nginx/sites-available if ($http_host ~* "^(w…

商城数据库88张表结构(十五)

DDL 57.后台权限表 CREATE TABLE wang_privileges (privilegeId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,menuId int(11) NOT NULL COMMENT 父ID,privilegeCode varchar(20) NOT NULL COMMENT 权限代码,privilegeName varchar(30) NOT NULL COMMENT 权限名称,isMenu…

[docker] 多容器项目 - PHP+MySQL+Nginx+utility containers

[docker] 多容器项目 - PHPMySQLNginxutility containers 这个项目总共会配置 6 个容器,主要还是学习一下 docker 的使用和配置,目标是: 本机不安装 PHP、Nginx 安装部分全都交给 docker 容器实现 可以运行一个 Laravel 网页项目 修改本机…

联系Odoo partner邮件怎么写

亲爱的Odoo 伙伴 我是广东同欣的惊蛰,我通过Odoo官方的珠三角 Partner列表找到了你。 GuangDong TongXin Ai Technology Co., Ltd.,是一家面向中国提供Odoo服务的高科技公司。同欣总部位于广州,目前客户覆盖在广州,深圳&#…

Linux 文件管理命令Lawk wc comm join fmt

文章目录 2.Linux 文件管理命令2.44 awk:模式匹配语言1.变量2.运算符3.awk 的正则4.字符串函数5.数学函数案例练习 2.45 wc:输出文件中的行数、单词数、字节数案例练习2.46 comm:比较…

纯java构建的个人博客,qwkxq.cn

博客初创,欢迎提各种意见(比如审美,排版啥的orz)~ 开始考虑用博客框架构建,但是调研一圈下来发现框架虽然好用,功能全面,但是可控性很差,很难自定义。最终决定从0开始使用springboot…

Magnet for Mac:高效窗口管理工具

Magnet for Mac是一款专为Mac用户设计的窗口管理工具,旨在帮助用户更高效地管理和布局多个应用程序窗口,提升工作效率。 Magnet for Mac v2.14.0中文免激活版下载 这款软件拥有直观易用的界面和丰富的功能,支持用户将屏幕分割成多个区域&…

前端到全栈进阶之“前端框架”

从前端入门到全栈-系列介绍 你会学到什么? 可能学不到什么东西,该系列是作者本人工作和学习积累,用于复习 系列介绍 现在的 Web 前端已经离不开 Node.js,我们广泛使用的 Babel、Webpack、工程化都是基于 Node 的,各…

Beego 使用教程 4:过滤器

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask beego 官网:http://beego.gocn.vip/ 上面的 beego 官网如果访问不到,看这篇文章…

大型语言模型:奇迹背后的未知哲学,人类智慧的边界探索

大型语言模型可以做出令人瞠目结舌的事情。但没有人确切知道原因。 这是一个问题。弄清楚它是我们这个时代最大的科学难题之一,也是控制更强大的未来模型的关键一步。 多长时间才能学会加法? 两年前,旧金山 OpenAI 公司的研究人员尤里布尔…

线阵相机和面阵相机简介

线阵相机 线阵相机,顾名思义就是所探测的物体要在一个很长的界面上。线阵相机的传感器只有一行感光像素,所以线阵相机一般具有非常高的扫描频率和分辨率。 线阵相机特点 线阵相机使用的线扫描传感器通常只有一行感光单元(少数彩色线阵使用…

Hbase学习笔记

Hbase是什么 HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。它利用Hadoop HDFS作为其文件存储系统,并提供实时的读写的数据库系统。HBase的设计思想来源于Google的BigTable论文,是Apache的Hadoop项目的子项目。它适合于存储大表数据,并可以达到实时级别。HB…