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

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

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

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

步骤 1: 定义系统模型

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

Matlab 复制代码
% 倒立摆系统参数
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的选择将决定系统响应的性质,如快速性、过冲和稳态误差。

Matlab 复制代码
Q = diag([10, 1, 10, 1]);  % 加大对角度误差的惩罚
R = 0.01;  % 控制力矩的权重

% 计算LQR控制器的增益
K = lqr(A, B, Q, R);
步骤 3: 模拟系统响应

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

Matlab 复制代码
% 新的反馈矩阵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: 定义扩展的系统模型

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

Matlab 复制代码
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控制器,然后设计一个状态观测器来估计不可直接测量的状态。

Matlab 复制代码
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控制器和观测器来模拟系统响应。

Matlab 复制代码
% 状态空间模型,包括观测器
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控制器的基本参数。

Matlab 复制代码
% 系统参数
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控制器来模拟倒立摆的动态响应,并对比不同参数变化下的控制效果。

Matlab 复制代码
% 初始状态和模拟时间
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策略时,选择合适的预测和控制范围至关重要,以保证控制系统的实用性和经济性。

相关推荐
Qter_Sean20 分钟前
自己动手写Qt Creator插件
开发语言·qt
xiaoyaolangwj22 分钟前
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
学习·机器人·自动驾驶
何曾参静谧24 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
静止了所有花开1 小时前
SpringMVC学习笔记(二)
笔记·学习
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
L_cl3 小时前
Python学习从0到1 day26 第三阶段 Spark ④ 数据输出
学习
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Mephisto.java4 小时前
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
大数据·学习·hbase
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言