单级倒立板的监督模糊控制——有详细的说明
%单级倒立板的监督模糊控制:从概念上讲至少有两种不同的方法确保模糊控制系统的稳定性:%(1)第一种方法是设计模糊控制器的时候先不选择特殊的结构和参数,是带有参数的模糊控制器的闭环
%系统稳定。(2)第二种是设计模糊控制器是先不考虑稳定性而是将另外一个非模糊控制器添加到模糊控制器以满足稳定性
%要求。第二种方法中得模糊控制器的设计具有很大的自由度和灵活性,所以用此方法设计的模糊控制系统
%可以获得较好的性能。
%第二种方法的关键是设计添加的第二层非模糊控制器,是稳定性得到保证。模糊控制器执行的任务主要是操作
%任务,是主动控制器。第二层控制器执行的是监督功能。如果模糊控制器运行良好,第二层控制器停止工作。
%如果模糊控制器趋于不稳定,这第二层控制器开始工作,以确保稳定性。第二层控制器称为监督控制器
%本控制程序需要计算上下限。。这是比较麻烦的的控制
%程序谁对源于《滑膜变结构控制matlab仿真》的一个程序进行修改。源程序是基于S函数和simulinke .
function aaaa=fuzzy_adline_ju()
clc
clear all
close all
global K1 K2 Q %K1 K2保证系统的在理想控制下,根在复平面的左平面上
K1=2;K2=1;Q=; %Q涉及到收敛的快慢和最大超调量
x10=; %初始值
%程序需要的参数
t=0;tmax=20; n=1; u=0; h=0.001;
while t<tmax
=derives(t,x10,u);
m1=h*dX; t=t+0.5*h;X=x10+0.5*m1; %更新导数
=derives(t,X,u);
m2=h*dX; X=x10+0.5*m2; %更新导数
=derives(t,X,u);
m3=h*dX; t=t+0.5*h; X=x10+m3; %更新导数
=derives(t,X,u);
m4=h*dX;
x10=x10+(1/6)*(m1+2*m2+2*m3+m4);
%输出
YY(:,n)=x10;time(n)=t; UU(:,n)=u; n=n+1;
end
figure(1)
t=time;
RR=;
RR=;
plot(time,RR(1,:),'b',time,YY(1,:),'r',time,RR(2,:),'b',time,YY(2,:),'r');grid on
figure(2)
plot(time,UU,'r');grid on
end
function =derives(t,x10,u)
dX=zeros(size(x10,1),1);
global K1 K2 Q
%本控制程序的目的让倒立板直立,并保持静止,因此没有参考对象。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x1=x10(1);x2=x10(2); %基于的规则是:
%如果X1是正,而且X2是正,这U是负最大值
u1_1=1/(1+exp(-30*x1)); %如果X1是正X2 是负,则U是零
u1_2=1/(1+exp(30*x1)); %如果X1是负X2是正,则U是零
u2_1=1/(1+exp(-30*x2)); %如果X1是负X2是负,则U是正最大值
u2_2=1/(1+exp(30*x2));
Fnum=-5*u1_1*u2_1+5*u1_2*u2_2; %-5 和5 为模糊中心值因为零所以没有有显示,输出采用单点模糊,对应的中心值为-5 0 5
Fden=u1_1*u2_1+u1_2*u2_1+u1_1*u2_2+u1_2*u2_2; %用于清一划计算。清晰化采用加权平均中心法
ufuzz=Fnum/Fden;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%李雅普方程求解P的值
A=;
P=lyap(A,Q);
gL=1.1; fU=15.78+0.0366*x10(2)^2; %这个获得是比较困难的
b=;%!!!!!!与推到过程不一至哎。。。
us=-sign(x10.'*P*b)*(1/gL*(fU+abs(*x10))+abs(ufuzz)); %监督控制器,其目的是使状态的范数小于MS
a=pi/18;Mx=pi/9;
S=2;%用于切换不同的监督控制律
if S==1;
if norm(x10)>=Mx
I=1;
else
I=0;
end
elseif S==2 %目的是系统在跨越边界时将受到的冲击。克服这个震荡的现象一个办法就是I在0-1之间连续变化
if norm(x10)<a
I=0;
elseif norm(x10)<Mx&norm(x10)>=a
I=(norm(x10)-a)/(Mx-a);
else
I=1;
end
end
U=ufuzz+I*us;
%--------系统计算-(可以直接代替不同的控制对象哦)---------------------------%
g=9.8;mc=1.0;m=0.1;l=0.5;
S=l*(4/3-m*(cos(x10(1)))^2/(mc+m));
fx=g*sin(x10(1))-m*l*x10(2)^2*cos(x10(1))*sin(x10(1))/(mc+m);
fx=fx/S;
gx=cos(x10(1))/(mc+m);
gx=gx/S;
%-------------------------------------%
ut=U;%输出力矩,用于观测
dX(1)=x10(2);
dX(2)=fx+gx*ut;%从这个角度可看出,在计算监督控制的时候可以独立出Gx。。B用【0;1】是合理的
end
页:
[1]