模糊控制详细讲解实例.docx
《模糊控制详细讲解实例.docx》由会员分享,可在线阅读,更多相关《模糊控制详细讲解实例.docx(13页珍藏版)》请在冰豆网上搜索。
模糊控制详细讲解实例
、速度控制算法:
首先定义速度偏差-50km/hW20,阀值eswith=10km/h
设计思想:
油门控制采用增量式PID控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。
选择规则:
e(k)<0
①e(k)>-eswithandthrottlr_1工0选择油门控制
②否则:
先将油门控制量置0,再选择刹车控制
1.确定模糊语言变量
e基本论域取[-50,50],ec基本论域取[-20,20],刹车控制量输出u基本论
域取[-30,30],这里我将这三个变量按照下面的公式进行离散化:
_2n.ab..y[b^(X〒)]
其中,x[a,b],n为离散度。
E、ec和u均取离散度n=3,离散化后得到三个量的语言值论域分别为:
E=EC=U={-3,-2,-1,0,1,2,3}
其对应语言值为{NB,NM,NS,ZO,PS,PM,PB}
2.确定隶属度函数
E/EC和U取相同的隶属度函数即:
g(x,5,1)trig(x,3,2,0)trig(x,3,1,1)uEECutrig(x,2,0,2)
trig(x,1,1,3)trig(x,0,2,3)g(x,1,5)
说明:
边界选择钟形隶属度函数,中间选用三角形隶属度函数,图像略
实际EC和E输入值若超出论域范围,则取相应的端点值。
3.模糊控制规则
由隶属度函数可以得到语言值隶属度(通过图像直接可以看出)如下表:
表1:
E/EC和U语言值隶属度向量表
-3
-2
-1
0
1
2
3
NB
1
0.
0
0
0
0
0
P0
5
NM
0
1
0.
0
0
0
0
P1
5
NS
0
0.
1
0.
0
0
0
P2
5
5
ZO
0
0
0.
1
0.
0
0
P3
5
5
PS
0
0
0
0.
1
0.
0
P4
5
5
PM
0
0
0
0
0.
1
0
P5
5
PB
0
0
0
0
0
0.
1
P6
5
设置模糊规则库如下表:
表2:
模糊规则表
U
E
——
NB
NM
NS
ZO
PS
PM
PB
NB
PB
PB
PM
PM
PS
ZO
ZO
NM
PB
PM
PM
PS
ZO
ZO
NS
NS
PM
PM
PS
PS
ZO
NS
NS
ZO
PM
PS
PS
ZO
ZO
NS
NM
PS
PS
PS
ZO
ZO
ZO
NS
NM
PM
PS
ZO
ZO
ZO
NS
NM
NB
PB
ZO
ZO
ZO
NS*
NM
NM
NB
EC
3.模糊推理
由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下:
then(JisPB)
if(EisNB)and(ECisNM)
那么他的模糊关系子矩阵为:
其中,Re1P0(1,0.5,0,
R1RE1REC2KjI
0)17,即表1中NB对应行向量,同理可以得到,
RE1EC2(0,1,0.5,0,0,0,0,0,0.5,0.5,0,,0)149
0497
PVB)
R2Re1ReC1Ru1结果略
按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如
下:
由R可以得到模拟量输出为:
U(EEC)I:
|R
4.去模糊化
由上面得到的模拟量输出为1X7的模糊向量,每一行的行元素(u(Zij))对应相应的离散变量Zj,则可通过加权平均法公式解模糊:
21
u(Zij)Zj
u^-01(ij1,2,,21)
u(Zj)
i0
从而得到实际刹车控制量的精确值
油门控制:
二、程序实现及参数调节
clearall
模糊算法
%************************
%/*********隶属度向量*****%
P0=[1,0.5,0,0,0,0,0];
%*********nb
P1=[0,1,0.5,0,0,0,0];
%*********nm
P2=[0,0.5,1,0.5,0,0,0];
%*********NS
P3=[0,0,0.5,1,0.5,0,0];
%*********ZO
P4=[0,0,0,0.5,1,0.5,0];
%*********PS
P5=[0,0,0,0,0.5,1,0];
%*********PM
P6=[0,0,0,0,0,0.5,1];
%*********PB
%***********^语言
*****%
NB=-3;NM=-2;NS=-1;ZO=0;PS=1;PM=2;PB=3;
%/*********模糊规则表*****%
Pg=[PBPBPMPMPSZOZO;
PBPMPMPSZOZONS;
PMPMPSPSZONSNS;
PMPSPSZOZONSNM;
PSPSZOZOZONSNM;
PSZOZOZONSNMNB;
ZOZOZONSNMNMNB];
%/*********根据规则表计算模糊关系矩阵*****%
R1_=dikaer(xbing(PO,P1),7,P0,7);
R1_=reshape(R1_,1,49);
R2_=dikaer(xbing(P2,P3),7,P0,7);
R2_=reshape(R2_,1,49);
R2=dikaer(R2_,49,P5,7);
R3_=dikaer(P0,7,P1,7);
R3_=reshape(R3_,1,49);
R3=dikaer(R2_,49,P6,7);
R4_=dikaer(xbing(P1,P2),7,P1,7);
R4_=reshape(R4_,1,49);
R4=dikaer(R4_,49,P5,7);
R5_=dikaer(P3,7,P1,7);
R5_=reshape(R5_,1,49);
R5=dikaer(R5_,49,P4,7);
R6_=dikaer(xbing(P0,P1),7,P2,7);
R6_=reshape(R6_,1,49);
R6=dikaer(R6_,49,P5,7);
R7_=dikaer(xbing(P2,P3),7,P2,7);
R7_=reshape(R7_,1,49);
R7=dikaer(R7_,49,P4,7);
R8_=dikaer(P0,7,P3,7);
R8_=reshape(R8_,1,49);
R8=dikaer(R8_,49,P5,7);
R9_=reshape(R9_,1,49);
R9=dikaer(R9_,49,P4,7);
R10_=dikaer(P3,7,P3,7);
R10_=reshape(R10_,1,49);
R10=dikaer(R10_,49,P3,7);
R11_=dikaer(xbing(PO,P1),7,P4,7);
R11_=reshape(R11_,1,49);
R11=dikaer(R11_,49,P4,7);
P45=xbing(P4,P5);
R12_=dikaer(xbing(P2,P3),7,P45,7);
R12_=reshape(R12_,1,49);
R12=dikaer(R12_,49,P3,7);
R13_=dikaer(P0,7,P5,7);
R13_=reshape(R13_,1,49);
R13=dikaer(R13_,49,P4,7);
R14_=dikaer(P1,7,P5,7);
R14_=reshape(R14_,1,49);
R14=dikaer(R14_,49,P3,7);
P01=xbing(P0,P1);
R15_=dikaer(xbing(P01,P2),7,P6,7);
R15_=reshape(R15_,1,49);
R16_=dikaer(P3,7,P6,7);
R16_=reshape(R16_,1,49);
R16=dikaer(R16_,49,P2,7);
R17_=dikaer(P4,7,P0,7);
R17_=reshape(R17_,1,49);
R17=dikaer(R17_,49,P4,7);
R18_=dikaer(xbing(P5,P6),7,P0,7);
R18_=reshape(R18_,1,49);
R18=dikaer(R18_,49,P3,7);
R19_=dikaer(xbing(P4,P5),7,P1,7);
R19_=reshape(R19_,1,49);
R19=dikaer(R19_,49,P3,7);
R20_=dikaer(P6,7,xbing(P1,P2),7);
R20_=reshape(R20_,1,49);
R20=dikaer(R20_,49,P2,7);
P23=xbing(P2,P3);
R21_=dikaer(P4,7,xbing(P23,P4),7);
R21_=reshape(R21_,1,49);
R21=dikaer(R21_,49,P3,7);
R22_=dikaer(P5,7,xbing(P23,P4),7);
R22_=reshape(R22_,1,49);
R22=dikaer(R22_,49,P2,7);
R23_=reshape(R23_,1,49);
R23=dikaer(R23_,49,P1,7);
R24_=dikaer(P4,7,P5,7);
R24_=reshape(R24_,1,49);
R24=dikaer(R24_,49,P2,7);
R25_=dikaer(P5,7,P5,7);
R25_=reshape(R25_,1,49);
R25=dikaer(R25_,49,P1,7);
R26_=dikaer(P6,7,xbing(P6,P5),7);
R26_=reshape(R26_,1,49);
R26=dikaer(R26_,49,P0,7);
R27_=dikaer(xbing(P4,P5),7,P6,7);
R27_=reshape(R27_,1,49);
R27=dikaer(R27_,49,P1,7);
m=[R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17,R18,R19,R20,R21,R22,R23,R24,R25,R26,R27];
R=bingji(m);
%*************初始化参量
e=0;ec=0;y_1=0;y_2=0;u=0;u_1=0;u_2=0;u_3=0;e_1=0;e_2=0;
x=[000];
ts=0.001;
sys=tf(1,[1,2,1],'inputdelay',0.5);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
fork=1:
1:
40000
%****************^^制系•^统
time(k)=k*ts;
if(k<25000)
vd(k)=40;
else
vd(k)=0;
end
y(k)=-den
(2)*y_1-den(3)*y_2+num
(2)*u_1+num(3)*u_2;
e=vd(k)-y(k);
ec=e-e_1;
u_3=u_2;
u_2=u_1;
u_1=u;
y_2=y_1;
y_1=y(k);
x
(1)=e;
x
(2)=(e-e_1)/ts;
x(3)=x(3)+e*ts;
%*******************************kp=0.42;Ti=30;Td=0.0018;
ki=kp*ts/Ti;
kd=kp*Td/ts;
dthrottle=kp*x
(1)+kd*x
(2)+ki*x(3);
throttle=u_1+dthrottle;
if(throttle>2000)
throttle=2000;
end
%****************************
油门PID控制
刹车控制
%/********压缩输入变量*****%
E=lisan(-50,50,3,e);
EC=lisan(-20,20,3,ec);
%/*********计算实际输入变量隶属度向量*****%
E_R
(1)=lbell(E,1,4,-3);
E_R
(2)=trig(E,-3,-2,0);
E_R(3)=trig(E,-3,-1,1);
E_R⑷=trig(E,-2,0,2);
E_R(5)=trig(E,-1,1,3);
E_R(6)=trig(E,0,2,3);
E_R⑺=rbell(E,1,4,3);
ECIRU)H_be__(Ecl4「3「
Ec—R(2耳g(EC-029
EC—R(3)£ig(Ecm=
Ec—R(4耳g(EC「2o2=
EC—R(5)£ig(EC「1-1-3=
EC—R(6)£ig(ECO2-3=
ECIR(7)Hrbe__(EC-143=
UIFdHdikaer(EIR-7-ECIR-7=
UIFdHreshape(UIR1-1-49「
UIR2=jdikaer(UIR1-49R7X
UIRHmax(UIR2「
UILHmean(UIR「
brakeHd-isan(—150-150-3-UIL「
el2Hel1-
elld
0一0*************************
i二eAO)
if((eyEswifh)=(fhro注el」so))
ifahroff_eAHfhroff_el1)
fhroff-ellHfhroff-w
u=throttle;
Q(k)=u;
W(k)=O;
else
throttle=0;
throttle_1=throttle;
u=throttle;
Q(k)=u;
W(k)=O;
end
elseif(throttle_1==0)
brake_1=brake;
u=brake;
W(k)=u;
Q(k)=O;
else
throttle=O;
throttle_1=throttle;
u=throttle;
Q(k)=u;
W(k)=O;
end
end
else
if(e~=O)
if(brake_1==0)
throttle_1=throttle;
u=throttle;
Q(k)=u;
W(k)=O;
end
else
end
else
end
brake=O;
brake_1=brake;
u=brake;
u=0;
W(k)=O;
Q(k)=O;
%********************?
1?
e?
3?
a?
?
••o?
M(k)=u;
%******************************
迟滞环节
if(time(k)v=0.5)
u=0;
end
end
else
u=M(k-0.5/ts);
°%**********j田夂I
figure(l);
plot(time,vd,'r',time,y,'k','linewidth',2);
xlabel('time(s)');
ylabel('vd,y');
legend('?
ui,‘?
e卩?
;e
figure
(2);
plot(time,Q,'r','linewidth',2);
xlabel('time(s)');
ylabel('u');
figure©);
plot(time,W,'r','linewidth',2);
xlabel('time(s)');
ylabel('u');
figure(4);
plot(time,N,'b');
xlabel('time£"S;£?
'
ylabel('e');
程序说明:
仿真分加速和加速两个阶段,加速阶段主要应用油门控制,加速阶段主要由
刹车控制。
加速过程中,调节PID的三个参数kp、Ti、Td,调节过程中不难发现,kp越大调
节时间越长,Ti越小稳态误差越大,