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

基于MATLAB的倒立摆控制实现方案

基于MATLAB的倒立摆控制实现方案,包含PID控制与神经网络(DQN)控制的双重实现


一、系统建模与基础参数

%% 倒立摆动力学参数
m = 0.1;    % 摆杆质量 (kg)
M = 1.0;    % 小车质量 (kg)
l = 0.5;    % 摆杆长度 (m)
g = 9.81;   % 重力加速度 (m/s²)
J = m*l²/3; % 摆杆转动惯量%% 状态空间模型
A = [0 1 0 0;0 (m+M)*g/(M*l) 0 -(m+M)*g/M;0 0 0 1;0 -m*g*l/(J+M*l²) 0 m*g*l/(J+M*l²)];
B = [0; 1/(M*l); 0; -1/(J+M*l²)];
C = eye(4);
sys = ss(A,B,C,0);

二、PID控制实现

1. 双闭环PID控制器设计

%% PID参数(经遗传算法优化)
Kp_angle = 45.12;   % 角度环比例增益
Ki_angle = 0.0;     % 角度环积分增益
Kd_angle = 215.2;   % 角度环微分增益Kp_pos = 1.134;     % 位置环比例增益
Ki_pos = 0.0;       % 位置环积分增益
Kd_pos = 58.45;     % 位置环微分增益%% 控制仿真
dt = 0.025;  % 采样时间
t_end = 10;  % 仿真时长
N = t_end/dt;% 初始状态:小车位置1m,摆杆角度30°
x0 = [1; 0; deg2rad(30); 0];% 存储轨迹
x_hist = zeros(4,N);
u_hist = zeros(1,N);%% 控制循环
sys = ss(A,B,C,0);
for k = 1:N% 当前状态x = x_hist(:,k);% 位置环控制e_pos = 0 - x(1);u_pos = Kp_pos*e_pos + Kd_pos*(0 - x(2));% 角度环控制e_angle = 0 - x(3);u_angle = Kp_angle*e_angle + Kd_angle*(0 - x(4));% 总控制量u = u_pos + u_angle;u = max(min(u, 10), -10);  % 限幅% 系统响应[~,x_next] = lsim(sys, u, dt, x);% 存储数据x_hist(:,k+1) = x_next;u_hist(k) = u;
end

2. 结果可视化

figure;
subplot(2,1,1);
plot(0:dt:t_end, rad2deg(x_hist(3,:)), 'r', 'LineWidth',1.5);
hold on;
plot(0:dt:t_end, zeros(size(x_hist(3,:))), 'k--');
title('摆杆角度控制');
xlabel('时间(s)'); ylabel('角度(°)');
legend('实际角度', '目标角度');subplot(2,1,2);
stem(0:dt:t_end, u_hist, 'b', 'LineWidth',1.5);
title('控制输入');
xlabel('时间(s)'); ylabel('力(N)');

三、神经网络控制(DQN)实现

1. 环境建模

%% 创建倒立摆环境
env = rlPredefinedEnv('CartPole-Discrete');% 状态空间离散化
stateInfo = getObservationInfo(env);
actionInfo = getActionInfo(env);% 神经网络结构
criticOpts = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
critic = rlQValueFunction([64 64], stateInfo, actionInfo, 'full', criticOpts);

2. DQN智能体构建

%% DQN代理配置
agentOpts = rlDQNAgentOptions(...'TargetUpdateMethod','soft',...'TargetUpdateRate',0.005,...'ExperienceBufferLength',1e6,...'DiscountFactor',0.99,...'SampleTime',env.Ts);agent = rlDQNAgent(critic, agentOpts);

3. 训练过程

%% 训练参数
trainOpts = rlTrainingOptions(...'MaxEpisodes',5000,...'MaxStepsPerEpisode',500,...'Verbose',false,...'Plots','training-progress',...'StopTrainingCriteria','AverageReward',...'StopTrainingValue',480);% 开始训练
trainingStats = train(agent, env, trainOpts);

4. 测试与仿真

%% 测试控制
simOpts = rlSimulationOptions('MaxSteps',500);
experience = sim(env, agent, simOpts);% 绘制测试结果
plot(experience.Observation(:,1), 'r', 'LineWidth',1.5);
hold on;
plot(experience.Observation(:,3), 'b', 'LineWidth',1.5);
legend('小车位置','摆杆角度');

四、关键参数整定方法

1. PID参数整定(Ziegler-Nichols法)

% 步骤1:断开积分和微分项
Ku = 80;  % 临界增益
Tu = 0.5; % 临界周期% 步骤2:计算参数
Kp = 0.6*Ku;
Ki = 1.2*Kp/Tu;
Kd = 0.075*Ku*Tu;% 步骤3:仿真验证并微调

2. DQN超参数优化

参数 初始值 调整策略
学习率(lr) 1e-3 Adam优化器自动调整
折扣因子(γ) 0.99 0.95-0.99范围网格搜索
经验回放容量 1e6 根据内存限制调整
批量大小(Batch) 64 32-256范围性能测试

参考代码 倒立摆控制,包含了神经网络控制,PID控制的matlab代码 www.youwenfan.com/contentcnj/63857.html

五、扩展应用

1. 混合控制策略

% 前馈+反馈控制
u = Kp*e + Kd*de + Kff*ref;  % 前馈补偿
u = agent.chooseAction([x; u]);  % DQN修正

2. 多智能体协作

% 创建多个DQN代理
agents = rlDQNAgent(critic, agentOpts, 4);% 协作训练
for i = 1:numAgentstrainingStats(i) = train(agents(i), env, trainOpts);
end
http://www.hskmm.com/?act=detail&tid=32875

相关文章:

  • 2025 年展会服务商最新推荐排行榜:聚焦一站式服务与高效执行能力的优质企业榜单瓷砖/暖通/照明/门窗/玻璃/厨卫/卫浴/灯饰展会厂家推荐
  • 数据迁移mysql--sr
  • iOS 26 App 开发阶段性能优化全流程,从监控到调优的多工具协作实践
  • MATLAB实现语音去混响与去噪
  • 风险评估的流程和各阶段的工作内容
  • 无穷小和无穷大
  • Adobe Media Encoder 2025 免费版一键安装包完整安装教程(含下载安装包)
  • 2025 年最新推荐船用气囊源头厂家权威排行榜:聚焦专业生产与可靠供应,助力精准选购优质产品橡胶/船舶/防撞/山东/港口用船用气囊厂家推荐
  • 【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
  • Zynq选型
  • 2025 西安楼盘最新推荐排行榜:聚焦优质教育配套的品质楼盘精选高端/刚需/品牌/现房/优质楼盘推荐
  • 稀疏离散分数阶傅里叶变换的MATLAB实现
  • 2025 年导轨丝杆源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质企业榜单东莞/直线/滚珠/孚雷导轨丝杆厂家推荐
  • Linux-简单命令 - 实践
  • far的数据类型
  • Zemax 2019下载地址与安装教程
  • 2025 年隔音门优质厂家最新推荐排行榜:覆盖剧院 /ktv/ 防火 / 实验室等多场景,解析实力口碑助您选对产品
  • 2024ICPC(济南站)
  • 事件在react中的处理方式?
  • volcano源码阅读——action/enqueue
  • 2025年工业大吊扇厂家权威推荐榜:大型厂房通风降温设备源头企业综合实力与客户口碑深度解析
  • 【左扬精讲】SRE 别慌!我用 故障预测与诊断,性能评估与优化,资源分配与规划 讲概率与贝叶斯算法的实战应用,都是咱运维人能懂的话(含代码)
  • 农经权报表生成小程序介绍
  • 【2025-10-16】移居香港
  • 学校社团招新的题目(莫队+树状数组统计区间逆序对个数)(蒟蒻被薄纱QAQ)
  • 基于MATLAB的齿轮故障检测
  • Linux 中检测gz压缩文件是否损坏
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销
  • 2025 年 PP 管厂家最新推荐榜:全面甄选优质 pp 风管、PP 喷淋塔等产品厂家,助力实验室场景精准选型
  • 基于MATLAB的无线传感器网络(WSN)仿真程序实现