当前位置: 首页 > news >正文

基于LQR和PID控制算法的一级倒立摆MATLAB实现

一、系统建模与参数设置

1. 状态空间模型

其中状态变量

2. 参数定义

% 物理参数
M = 1.096;    % 小车质量 (kg)
m = 0.109;    % 摆杆质量 (kg)
l = 0.25;     % 摆长 (m)
g = 9.8;      % 重力加速度 (m/s²)
b = 0.1;      % 摩擦系数
I = 0.0034;   % 摆杆转动惯量 (kg·m²)% 状态空间矩阵
A = [0 1 0 0;0 -(I+m*l²)*b/(I*(M+m)+M*m*l²) m²*g*l²/(I*(M+m)+M*m*l²) 0;0 0 0 1;0 -m*b*l/(I*(M+m)+M*m*l²) m*g*l*(M+m)/(I*(M+m)+M*m*l²) 0];
B = [0; (I+m*l²)/(I*(M+m)+M*m*l²); 0; -m*l/(I*(M+m)+M*m*l²)];
C = eye(4);
D = zeros(4,1);

二、LQR控制器设计

1. 权重矩阵选择

Q = diag([1000, 0, 200, 0]);  % 状态权重
R = 1;                        % 控制输入权重

2. LQR增益计算

[K, P, E] = lqr(A, B, Q, R);

3. 闭环系统仿真

% 初始状态 [x, x_dot, theta, theta_dot]
x0 = [0.1; 0; 0.1; 0]; % 闭环系统矩阵
A_cl = A - B*K;
sys_cl = ss(A_cl, B, C, D);% 仿真参数
t = 0:0.01:5;
u = 0.1*ones(size(t));  % 阶跃输入% 仿真
[y, t] = lsim(sys_cl, u, t, x0);% 绘图
figure;
subplot(2,1,1);
plot(t, y(:,1), 'r', t, y(:,3), 'b');
xlabel('时间 (s)');
ylabel('位置 (m)/角度 (rad)');
legend('小车位置', '摆杆角度');
title('LQR控制响应');subplot(2,1,2);
stem(t, u*1000);
xlabel('时间 (s)');
ylabel('控制输入 (mN)');
title('LQR控制量');

三、PID控制器设计

1. 参数整定

Kp = 50;    % 比例系数
Ki = 10;    % 积分系数
Kd = 10;    % 微分系数% PID控制器
pid = pid(Kp, Ki, Kd);

2. 闭环系统实现

% 闭环系统矩阵
A_pid = A - B*pid.C;
sys_pid = ss(A_pid, B, C, D);% 仿真
[y_pid, t_pid] = lsim(sys_pid, u, t, x0);% 绘图对比
figure;
subplot(2,1,1);
plot(t, y(:,1), 'r', t_pid, y_pid(:,1), 'b--');
hold on;
plot(t, y(:,3), 'g', t_pid, y_pid(:,3), 'm--');
legend('LQR位置', 'PID位置', 'LQR角度', 'PID角度');
title('PID与LQR控制对比');subplot(2,1,2);
plot(t, u*1000, 'r', t_pid, pid.out*1000, 'b--');
xlabel('时间 (s)');
ylabel('控制输入 (mN)');
legend('LQR控制量', 'PID控制量');

四、完整m文件代码

%% 一级倒立摆控制仿真
clear; clc;%% 系统参数
M = 1.096; m = 0.109; l = 0.25; g = 9.8; b = 0.1; I = 0.0034;% 状态空间模型
A = [0 1 0 0;0 -(I+m*l²)*b/(I*(M+m)+M*m*l²) m²*g*l²/(I*(M+m)+M*m*l²) 0;0 0 0 1;0 -m*b*l/(I*(M+m)+M*m*l²) m*g*l*(M+m)/(I*(M+m)+M*m*l²) 0];
B = [0; (I+m*l²)/(I*(M+m)+M*m*l²); 0; -m*l/(I*(M+m)+M*m*l²)];
C = eye(4); D = zeros(4,1);%% LQR控制
Q = diag([1000, 0, 200, 0]); R = 1;
[K, P, E] = lqr(A, B, Q, R);
A_cl = A - B*K;
sys_cl = ss(A_cl, B, C, D);%% PID控制
Kp = 50; Ki = 10; Kd = 10;
pid = pid(Kp, Ki, Kd);
A_pid = A - B*pid.C;
sys_pid = ss(A_pid, B, C, D);%% 仿真
t = 0:0.01:5;
u = 0.1*ones(size(t));
x0 = [0.1; 0; 0.1; 0];% LQR仿真
[y_lqr, t_lqr] = lsim(sys_cl, u, t, x0);% PID仿真
[y_pid, t_pid] = lsim(sys_pid, u, t, x0);%% 结果可视化
figure;
subplot(2,1,1);
plot(t_lqr, y_lqr(:,1), 'r', t_pid, y_pid(:,1), 'b--');
hold on;
plot(t_lqr, y_lqr(:,3), 'g', t_pid, y_pid(:,3), 'm--');
xlabel('时间 (s)');
ylabel('位置 (m)/角度 (rad)');
legend('LQR位置', 'PID位置', 'LQR角度', 'PID角度');subplot(2,1,2);
stem(t_lqr, u*1000, 'r', t_pid, pid.out*1000, 'b--');
xlabel('时间 (s)');
ylabel('控制输入 (mN)');
legend('LQR控制量', 'PID控制量');

参考代码 一级倒立摆 www.youwenfan.com/contentcnm/79397.html

五、关键改进方向

  1. 前馈补偿:增加参考信号前馈项提升响应速度
  2. 抗饱和处理:对积分项进行抗积分饱和设计
  3. 自适应调节:根据系统状态在线调整PID参数
  4. 非线性补偿:引入摆角微分项改善鲁棒性
http://www.rkmt.cn/news/61274.html

相关文章:

  • 2025年11月北京装修公司推荐评测报告:从稳定性到AI能力的解决方案剖析
  • AT_abc412_e [ABC412E] LCM Sequence 个人题解
  • 一对一网课哪个平台好?2026 权威测评 + 高性价比榜单​
  • DP 入门
  • 2025 最新硫化仪厂家推荐排行榜:无转子 / 橡胶 / 门尼粘度仪硫化仪实力厂家技术与售后测评
  • 2025年11月取暖器品牌推荐选择指南:专业分析维度助力家庭精准决策
  • 2025 年 11 月羽绒服厂家精选推荐榜:薄款/厚款/男款/女款/可水洗/复古款/潮流/街头风/休闲/运动/通勤/百搭,时尚设计与实用功能兼具的冬日穿搭首选
  • 2025年厚壁钢管生产商权威推荐榜单:钢板卷钢管/非标钢管/不锈钢管源头厂家精选
  • AIGC降重指令全攻略:10个高效技巧助你论文快速过审
  • 2025年11月沈阳酒店推荐深度解析:核心价值点与专业维度评估
  • 2025年11月幼猫罐头产品推荐对比分析:三大阵营专业维度深度评测报告
  • 2025年11月猫罐头产品品牌推荐评测报告:从配方科学到适口性解决方案剖析
  • 2025年11月岗亭定制厂家推荐榜单:全国连锁模块化空间专家法利莱集团深度评测
  • 2025年的提前总结
  • 2025年11月GPU服务器服务商评价榜:性能成本服务三维度横评
  • 2025年11月珠海酒店推荐对比分析:客观立场与实用价值体现
  • 2025年11月智能体公司推荐榜:五大领先企业综合对比与权威评测
  • 2025年11月珠海酒店推荐对比分析:细分客群需求与解决方案剖析
  • 2025年东莞横沥到上海物流渠道权威推荐榜单:东莞横沥到四川物流/东莞横沥到合肥物流/东莞横沥物流专线服务商精选
  • 2025年11月纹发培训机构综合评测:五大机构优劣势深度剖析
  • 2025年11月最正宗的杭州丝绸评测排名:深度解析与选购要点
  • 找一家靠谱权威的保研机构 | 2025最新靠谱机构推荐榜
  • so库打包成Linux安装包
  • 2025年篮球馆篷房供货商权威推荐榜单:桁架仓储篷房/桁架体育篷房/羽毛球馆篷房源头厂家精选
  • QT之 QDockWidget 应用总结【转载】
  • 转载
  • 2025年机器人模具生产商权威推荐榜单:汽车内饰模具/无人机模具/汽车轻量化模具源头厂家精选
  • 2025天津英国留学中介排名
  • 2025厦门留学机构排名榜
  • QDockWidget-窗体停靠