当前位置: 首页 > 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*)*b/(I*(M+m)+M*m*)*g*/(I*(M+m)+M*m*) 0;0 0 0 1;0 -m*b*l/(I*(M+m)+M*m*) m*g*l*(M+m)/(I*(M+m)+M*m*) 0];
B = [0; (I+m*)/(I*(M+m)+M*m*); 0; -m*l/(I*(M+m)+M*m*)];
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*)*b/(I*(M+m)+M*m*)*g*/(I*(M+m)+M*m*) 0;0 0 0 1;0 -m*b*l/(I*(M+m)+M*m*) m*g*l*(M+m)/(I*(M+m)+M*m*) 0];
B = [0; (I+m*)/(I*(M+m)+M*m*); 0; -m*l/(I*(M+m)+M*m*)];
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/contentcsk/79397.html

五、关键改进方向

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

相关文章:

  • 临沂企业网站十大免费行情软件网站下载
  • 从Java后端到Python大模型:我的学习转型与规划
  • 电商创客网站建设方案高端网站案例
  • 苏州做公司网站艺术字体转换器
  • 手机网站建设请示浙江立鹏建设有限公司网站
  • 延吉网站网站建设wordpress 树状目录结构
  • 高端定制站开发立网站系
  • 本溪市城乡住房建设厅网站郑州建设局官网
  • 发那科机器人在氩弧焊中搭配节气装置的优势
  • 开发者实践:机器人梯控的 API 对接与 MQTT 边缘调度解耦
  • 永康市网站建设制作网站模板超市
  • UE5.6 玻璃材质——Lumen
  • UE5 AI行为树源码解析(Composites)
  • 做婚庆网站安徽元鼎建设工程网站
  • 建设银行注册网站首页php网站服务器搭建
  • 织梦网站如何转百度小程序同步网络营销策略和方法
  • UE5 C++ Slate 画曲线
  • 【机器学习15】强化学习入门、Q-Learning、贝尔曼方程
  • 解释seo网站推广北京十大科技公司
  • 基于电鱼 AI 工控机的塔吊与升降机安全监测方案——实时采集传感器数据,AI智能判断异常并报警
  • 如何看一个网站用什么程序做的南开做网站
  • 京东云双11活动-云产品特惠热卖中
  • 企业网站如何seowordpress touch
  • 怎样进行网站板块建设支付宝网站登录入口
  • Harbor 私有镜像仓库安装教程
  • 批发/贸易企业数字化转型:PHP开发的B2B订货系统
  • ACMMM2025 |TGSI+SATL:不改模型架构也能提升预测性能,破解几何结构评估与建模难题!
  • 【笔记】Windows系统安装SAM-2(Segment Anything Model 2)
  • 宁波网站制作报价主题设置wordpress
  • 嵌入式Linux安全启动全解析:从原理到实战