模糊控制详细讲解实例.docx

上传人:scccc 文档编号:13007251 上传时间:2021-12-10 格式:DOCX 页数:10 大小:20.41KB
返回 下载 相关 举报
模糊控制详细讲解实例.docx_第1页
第1页 / 共10页
模糊控制详细讲解实例.docx_第2页
第2页 / 共10页
模糊控制详细讲解实例.docx_第3页
第3页 / 共10页
模糊控制详细讲解实例.docx_第4页
第4页 / 共10页
模糊控制详细讲解实例.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《模糊控制详细讲解实例.docx》由会员分享,可在线阅读,更多相关《模糊控制详细讲解实例.docx(10页珍藏版)》请在三一文库上搜索。

1、一、速度控制算法:首先定义速度偏差-50 km/h* (k) W0km/h, -20用c (i) = e (k) - e (k-1)0, 阀值 eswith=10km/h设计思想:油门控制采用增量式PID控制算法,刹车控制采用模糊控制算法,最 后通过选择规则进行选择控制量输入。选择规则:e (k) <0 e (k) >- eswith and throttlr_1 用 选择油门控制否则:先将油门控制量置0,再选择刹车控制0<e (k)先选择刹车控制,再选择油门控制e (k) =0直接跳出选择刹车控制:刹车采用模糊控制算法1. 确定模糊语言变量e基本论域取-50,50, ec基

2、本论域取-20,20,刹车控制量输出u基本论域 取-30,30,这里我将这三个变量按照下面的公式进行离散化:=b2na(x-)其中,x wa,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 , A 1 )trig (x ,f 2,0)trig (x ,一如 1,1)uEA " trig (x,2,0,2)trig(x - 1,1,3) trig (x, 0, 2, 3).g(x

3、, 1, 5)说明:边界选择钟形隶届度函数,中间选用三角形隶届度函数,图像略 实际EC和E输入值若超出论域范围,则取相应的端点值。3. 模糊控制规则由隶届度函数可以得到语言值隶届度(通过图像直接可以看出)如下表: 表1: E/EC和U语言值隶届度向量表-3-2-10123NB10.500000P0NM010.50000P1NS00.510.5000P2ZO000.510.500P3PS0000.510.50P4PM00000.510P5PB000000.51P6设置模糊规则库如下表:表2:模糊规则表UeECNBNMNSZOPSPMPBNBPBPBPMPMPSZOZONMPBPMPMPSZOZO

4、NSNSPMr pmPSPSZONSNSZOPMPSPSZOZONSNMPSPSPSZOZOZONSNMPMPSr zoZOZONSNMNBPBZOZOZONS*NMNMNB3.模糊推理由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两 个例子做模糊推理如下:if (E is NB) and (EC is NM) then (U is PB)那么他的模糊关系子矩阵为:R = Re1 ReC2 Ru1其中,Rei =P0 = (1,0.5,0,0)御,即表1中NB对应行向量,同理可以得到,REC2 =P1 =(01,0.5,0, ,0)17 , Rui=P0=(1,0.5,0, ,

5、0)17010.5 00 0.5 0.5 0R/Rec2=(1,0.5,0,,0)如0,1,0.5,0,,0)=000099990i7X70100a0 49 70000Re1EC2 =(0,1,0.5,0,0,0,0,0,0.5,0.5,0,0)149000010.500R=Re1ec2XRu1=(0,1,0.5L,0)J(1,0.5,0L,0)=0.50.500_0000then (U is PVB)if (E is NVB or NB) and (EC is NVB)R2=Re1KRecLRu1结果略按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下:R = R R- L

6、 R(i =1,2, ,27)由R可以得到模拟量输出为:U =(E EC) R4. 去模糊化由上面得到的模拟量输出为1的模糊向量,每一行的行元素(u)对 应相应的离散变量Zj,则可通过加权平均法公式解模糊:21u(Zij)Zju =(i = j =1,2" ,21)u(Zj)i=0从而得到实际刹车控制量的精确值u。油门控制:油门控制采用增量式PID控制,即:u(k)=u(k-1) (kp ki kd)e(k) (-kp-2kd)e(k-1) kde(k-2)只需要设置kp、吟、kd三个参数即可输出油门控制量 二、程序实现及参数调节clear all模糊算法%/*隶属度向量*%P0=1

7、,0.5,0,0,0,0,0; %*NBP1=0,1,0.5,0,0,0,0; %*NMP2=0,0.5,1,0.5,0,0,0; %*NSP3=0,0,0.5,1,0.5,0,0; %*zoP4=0,0,0,0.5,1,0.5,0; %*psP5=0,0,0,0,0.5,1,0; %*pmP6=0,0,0,0,0,0.5,1; %*pb%*语言值*%NB=-3;NM=-2;NS=-1;ZO=0;PS=1;PM=2;PB=3;%/*模糊规则表 *%Pg=PB PB PM PM PS ZO ZO;PB PM PM PS ZO ZO NS;PM PM PS PS ZO NS NS;PM PS PS

8、 ZO ZO NS NM;PS PS ZO ZO ZO NS NM;PS ZO ZO ZO NS NM NB;ZO ZO ZO NS NM NM NB;%/*根据规则表计算模糊关系矩阵*%R1_=dikaer(xbing(P0,P1),7,P0,7);R1_=reshape(R1_,1,49);R1=dikaer(R1_,49,P6,7);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=dikae

9、r(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(

10、R7_,49,P4,7);R8_=dikaer(P0,7,P3,7);R8_=reshape(R8_,1,49);R8=dikaer(R8_,49,P5,7);R9_=dikaer(xbing(P1,P2),7,P3,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(P0,P1),7,P4,7);R11_=reshape(R11_,1,49);R11=dikaer(R11

11、_,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,

12、P6,7);R15_=reshape(R15_,1,49);R15=dikaer(R15_,49,P3,7);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(P

13、4,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,4

14、9);R22=dikaer(R22_,49,P2,7);R23_=dikaer(P6,7,xbing(P3,P4),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(

15、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);2=0;%*初始化参量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.Eswith=

16、10;throttle_1=0;brake_1=0;x=0 0 0;ts=0.001;sys=tf(1,1,2,1, 'inputdelay' ,0.5);dsys=c2d(sys,ts,'zoh');num,den=tfdata(dsys, 'v');for k=1:1:40000%*控制系统time(k)=k*ts;if (k<25000)vd(k)=40;elsevd(k)=0;endy(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=

17、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;油门PID控制刹车控制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*%/*压缩输入变量*%E=lisan(-50,50,3,e);EC=lisan(-20,20,3,ec);%/*计算实际输入变量隶属度向量

18、*%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( 4)=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);EC_R(1)=lbell(EC,1,4,-3);EC_R (2)=trig(EC,-3,-2,0);EC_R (3)=trig(EC,-3,-1,1);EC_R(4)=trig(EC,-2,0,2);EC_R(5)=trig(EC,-1,1,3);EC_R(6)=trig(EC,0,2

19、,3);EC_R (7)=rbell(EC,1,4,3);%/*模糊推理过程*%U_R1=dikaer(E_R,7,EC_R,7);U_R1=reshape(U_R1,1,49);U_R2=jdikaer(U_R1,49,R,7);U_R=max(U_R2);u_L=mean(U_R);%/*去模糊化*%brake=-flisan(-150,150,3,u_L);e_2=e_1;e_1=e;%/*选择规则if (e<0)if (e>-Eswith)|(throttle_1=0)if (throttle<=throttle_1)throttle_1=throttle;u=thr

20、ottle;Q(k)=u;W(k)=0;elsethrottle=0;throttle_1=throttle; u=throttle;Q(k)=u;W(k)=0;endelseif(throttle_1=0) brake_1=brake; u=brake;W(k)=u;Q(k)=0;elsethrottle=0;throttle_1=throttle;u=throttle;Q(k)=u;W(k)=0;endendelseif(e=0)if(brake_1=0)throttle_1=throttle;u=throttle;Q(k)=u;W(k)=0;elsebrake=0;brake_1=bra

21、ke;u=brake;endelseu=0;W(k)=0;Q(k)=0;endend%*迟滞环节M(k)=u;%*if (time(k)<=0.5) u=0;elseu=M(k-0.5/ts);end end%* 画图figure(1);plot(time,vd, 'r',time,y,'k','linewidth' ,2);xlabel( 'time(s)' );ylabel('vd,y');legend('? u ?','印? e '); figure(2);plot(ti

22、me,Q, 'r','linewidth' ,2);xlabel('time(s)');ylabel('u');figure(3);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越小稳态误差越大,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1