基于TS模糊模型的倒立摆控制MATLAB实现

一、TS模糊模型控制原理

  1. 系统建模

    倒立摆动力学方程:

    其中,\(x\)为小车位移,\(θ\)为摆角,\(F\)为控制力,\(M\)为小车质量,\(m\)为摆杆质量。

  2. TS模糊模型构建

    • 输入变量:角度误差\(e=θ\),角速度误差\(e˙=θ˙\)

    • 输出变量:控制力F

    • 隶属函数:高斯型(前件)+ 线性函数(后件)

    • 模糊规则

      Rule 1: IF e is NB and \dot{e} is NB THEN F=K1*e + K2*\dot{e}  
      Rule 2: IF e is NS and \dot{e} is NS THEN F=K3*e + K4*\dot{e}  
      ...
      

二、MATLAB/Simulink实现步骤

1. 系统参数定义

% 系统参数
M = 1.096;  % 小车质量(kg)
m = 0.109;  % 摆杆质量(kg)
l = 0.25;   % 摆杆长度(m)
g = 9.81;   % 重力加速度(m/s²)
J = 0.0034; % 摆杆转动惯量(kg·m²)

2. TS模糊控制器设计

% 创建模糊推理系统
fis = newfis('pendulum_TS');

% 输入变量定义
fis = addvar(fis,'input','e',[-0.5,0.5]);   % 角度误差
fis = addmf(fis,'input',1,'NB','gaussmf',[0.2,0]); % 负大
fis = addmf(fis,'input',1,'NS','gaussmf',[0.2,0.2]);% 负小

fis = addvar(fis,'input','edot',[ -1,1]);   % 角速度误差
fis = addmf(fis,'input',2,'NB','gaussmf',[0.3,0]); % 负大
fis = addmf(fis,'input',2,'NS','gaussmf',[0.3,0.3]);% 负小

% 输出变量定义
fis = addvar(fis,'output','F',[-20,20]);    % 控制力
for i=1:4
    fis = addmf(fis,'output',1,['K',num2str(i)],'linear',[0,0,0,0]);
end

% 模糊规则库
ruleList = [1 1 1 1 1;   % 规则1
           1 2 2 1 1;   % 规则2
           2 1 3 1 1;   % 规则3
           2 2 4 1 1];  % 规则4
fis = addrule(fis,ruleList);

3. 仿真模型搭建

% 创建Simulink模型
new_system('pendulum_TS_Sim');
open_system('pendulum_TS_Sim');

% 添加模块
add_block('simulink/Sources/Constant','pendulum_TS_Sim/Reference');
add_block('simulink/Math Operations/Sum','pendulum_TS_Sim/Error');
add_block('simulink/Continuous/Transfer Function','pendulum_TS_Sim/Dynamics');
add_block('simulink/Sinks/Scope','pendulum_TS_Sim/Scope');

% 设置TS模糊控制器模块
add_block('fuzzylogic/FIS Controller','pendulum_TS_Sim/Controller');
set_param('pendulum_TS_Sim/Controller','FISFile','pendulum_TS.fis');

% 连接信号线
add_line('pendulum_TS_Sim','Reference/1','Error/1');
add_line('pendulum_TS_Sim','Error/1','Controller/1');
add_line('pendulum_TS_Sim','Controller/1','Dynamics/1');

4. 控制律实现

% 控制量计算(S-Function实现)
function [sys,x0,str,ts] = pendulum_control(t,x,u,flag)
persistent fis
if isempty(fis)
    fis = readfis('pendulum_TS.fis');
end

% 模糊推理
e = u(1);
edot = u(2);
output = evalfis([e,edot],fis);

sys = output;
end

三、扩展应用方向

  1. 多模型融合

    % 结合LQR与TS模糊控制
    [K,S,e] = lqr(A,B,Q,R);
    F = -K*x + u_TS;
    
  2. 硬件在环测试 使用dSPACE实时仿真平台 部署到STM32H743微控制器

  3. 深度强化学习改进

    % DQN策略梯度更新
    agent = rlRepresentation(@rlFunctionApproximator,@(x) x,1);
    trainOpts = rlTrainingOptions('MaxEpisodes',1000);
    train(agent,env,trainOpts);
    

参考代码 基于TS模糊模型的倒立摆程序 www.youwenfan.com/contentcnm/79843.html

四、注意事项

  1. 物理参数匹配 需根据实际系统调整质量、长度等参数

  2. 采样时间设置 建议采样周期Ts=0.01~0.05秒

  3. 初始条件设置

    x0 = [0.1; 0; 0.05; 0]; % 初始位置偏移0.1m
    
posted @ 2025-12-02 17:02  yu8yu7  阅读(47)  评论(0)    收藏  举报