基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序_第1页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序_第2页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序_第3页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序_第4页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、量输出u基本论域取-30,30,这里我将这三个变量按照下面的公式进行压缩离散化:r2naby=(x-)b-a2其中,xa,b,n为离散度。e、ec和u均取离散度n=3,离散化后得到三个量的语言值论域分别为:E=EC=U=-3,-2,-1,0,1,2,3其对应语言值为NB,NM,NS,ZO,PS,PM,PB2 .确定隶属度函数E/EC和U取相同的隶属度函数,边界选取钟形隶属度函数,中间取三角形隶属度函数,即:g(x,5,-i)trig(x,-3,-2,0)trig(x,-3,-1,1)UE,fC,U=*trig(x,2,0,2)trig(x,-1,1,3)trig(x,0,2,3)、g(x,1,

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

4、PPMPSPSZONSNSZOPMPSPSZOZONSNMPSPS:PSZOZOZONSNMPMPSrzoZOZONSNMNBPBZOZOZONS*NMNMNB3席I糊推理由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下:if(EisNB)and(ECisNM)then(UisPB)那么他的模糊关系子矩阵为:Ri=&1REC2RU1其中,Rei=P0=(1,0.5,0,,0)仅,即表1中NB对应行向量,同理可以得到,Rc2=P1=(01,0.5,0,0)17,Ru1=P0=(1,0.5,0,0)17010.5000.50.50Re1MREC2=(1,

5、0.5,0,,0)Tm(0,1,0.5,0,0)=00000100a0497RE1EC2二(0,1,0.5,0,0,0,0,0,0.5,0.5,0,0)149000010.500R1=Re1ec2MRu1=(0,1,0.5,0)TM(1,0.5,0,0)=0.50.500amm*then(UisPB)0000if(EisNBorNM)and(ECisNB)R2=(Re1URe2)XReC1XRJ1,结果略按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下:R=RR2R(i=1,2,27)由R可以得到模拟量输出为:U=(EEC)';R4 .去模糊化由上面得到的模拟量输出

6、为1>7的模糊向量,每一行的行元素(u(Zij)对应相应的离散变量Zj,则可通过加权平均法公式解模糊:21'、.u(Zj)ZjU(i=j=12111,21)'、u(Zj)i=0从而得到实际刹车控制量的精确值U。油门控制:油门控制采用增量式PID控制,即:u(k)=u(k-1)(kpkikd)e(k)(-kp-2kd)e(k-1)kde(k-2)其中K=kpXs/Ti,kd=kp>Td/ts只需要设置kp、Ti、Td三个参数即可输出油门控制量。二、调整参数按照上述算法流程,应用MATLAB进行仿真实现,在参数调试过程中采用如下方法:首先将油门和刹车分开进行调整参数,最

7、后再将调整好的参数写入总程序中调整。1 .油门PID参数调节油门只需要调整kp、Ti、Td三个参数,根据经验,首先令Ti、Td为0,kp由0逐渐增大,在增大kp的过程可知,kp越大系统调节时间越短并趋于稳定,在达到一定程度后,继续增大系统将出现波动。kp=0.1kp=0.4kp=0.9调节Ti的过程发现,Ti对系统稳定性影响并不大,将Ti由10增大到30的过程中系统输出没有变化。Ti=10在给Td赋值时,最开始从Ti=301增大,发现系统越来越不稳定,于是逐渐减小,至U0.003时趋于稳定,它的可调节范围很小,随其值的减小最大误差值逐渐减小,增大则系统趋于不稳定。kp=0.001kp=0.00

8、2kp=0.0032 .刹车调节首先,为了适应该系统,将刹车输出量限制在-150,150之内(最初设计其范围为-30,30),对于该控制,可调节参数较多,包括隶属度函数、模糊规则表、输入输出变量区间、语言值论域、模糊推理及解模糊方法等等,这里由于模糊规则需要经验设定,本算法没有实际参考,所以这里只调整规则表,其他参数固定不变。以下为最初设计的模糊规则表:UEEC一NBNMNSZONBPBPBPMPMNMPB1PMPMPSNSPMPMPSPSZOPMPSPSZOPSPSPSZOZOPMPSZOZOZOPBZOZOZOZO由于实际刹车控制中对于加速采取比较单一的置零(在选择规则中设定)输出,所以在

9、规则表中e<0部分没有规则,然而为了仿真方便,使参数调节更清晰,重新定义模糊规则表如下:UEEC一NBNMNSZOPSPMPBNBPBPBPMPMPSZOZONMPBPMPMPSZOZONSNSPMPMPSPSZONSNSZOPSZOZOZOZONSNMPSPSPSZOZOZONSNMPMPSZOZOZONSNMNBPBZOZOZONS*NMNMNB与此同时,将刹车的输出变量取反,以此来实现减速的效果!在调整模糊规则表的时候,必须依据输入变量e和ec的范围逐个检验,按照他们各自的语言值以及相应的输出语言值进行调整。例如,初始速度为50,期望速度为0,即e=-50,ec=-50,则此时输出

10、对应模糊规则表中第一行第一列PB,而下一时刻ec几乎为0,所以在调节过程中,主要进行对EC变量的ZO行进行调节,若响应时间短,则增大相应输出语言值,反之亦然。仿真时,分两段,首先加速,之后减速,采用上面的模糊规则表,得到如下图像:从图像的上升阶段分析可以看出,其加速阶段并不能达到稳态值,但对于刹车控制可以忽略其影响,而减速阶段实际上已经比较理想,我取稳态误差达到5%稳定,则此规则达到稳态的时间为7.4s,这里尝试进行如下修改,将规则表中带下划线的部分以此改为:PM,PS,PS,ZO即,增大了输出语言值。则得到如下图像:此规则达到稳定的时间为6.9s,由此分析模糊规则的调整规则如下:若想加快响应

11、时间,增大误差和误差变化率负大区域附近的输出语言值,并增大误差变化率零区域附近的输出语言值,可能还会引起超调量的增大,所以只需做临近语言值之间的变化。3 .整体调节此时将刹车与油门同时加到仿真模型中,分别做加速和减速仿真,依据分别调节时的规律做微量调节就可以基本达到要求。-50510152025time(s)30354050505054433221O5OydV4 .待解决问题在调试过程中发现,油门控制(PID)过程在达到稳态时出现抖动,并且三个参数对他的影响很小,具体原因待考证;油门控制给系统的输入值出现大波动,每一次达到峰值持续相同时间后变为0再持续一段时间又变为峰值;模糊控制的语言值论域较

12、小,对于扩大语言值论域对系统的影响还有待验证;模糊控制的输入变量压缩方式有待验证其合理性;模糊控制与PID控制的相互配合,在该程序中,由于两种控制的输出控制量不同,在给到仿真系统时很难统一;油门与上车的选择规则与实际系统还存在很大的改进。附录MATLAB仿真程序functionkk=bingji(A)fori=1:49fork=1:7forj=1:26n=7*j+k;if(A(i,k)>=A(i,n)kk(i,k)=A(i,k);elseA(i,k)=A(i,n);kk(i,k)=A(i,k);endendendendfunctiono=dikaer(A,n,B,N)fori=1:nfo

13、rj=1:Nif(A(i)<=B(j)C(i,j)=A(i);elseC(i,j)=B(j);endo=C;endendreturnfunctionT=flisan(a,b,n,x)y=(a+b)/2+(b-a)*x/(2*n);T=round(y);return;functionmm=bell(x,a,b,c)z=abs(x-c)/a)A(2b);y=1/(1+z);mm=y;return;functionooo=jbing(A,B)fori=1:49forj=1:7if(A(i,j)<B(i,j)A(i,j)=B(i,j);endendooo=A;endreturn;funct

14、ionMM=jdikaer(A,n,B,m)fori=1:mforj=1:nif(A(j)<B(j,i)B(j,i)=A(j);endendMM=B;endreturn;functionoo=jiao(A,B)fori=1:7forj=1:7if(A(i,j)>B(i,j)A(i,j)=B(i,j);endendoo=A;endreturnfunctionmm=lbell(x,a,b,c)if(x<c)mm=1;elsez=(x-c)/a;v=abs(z);n=vA(2*b);y=1/(1+n);mm=y;endreturn;functionL=lisan(a,b,n,x)y

15、=2*n*x/(b-a)-n*(a+b)/(b-a);L=y;return;functionUU=max(A)fori=1:7forj=1:49if(A(j,i)>=Q(i)Q(i)=A(i,j);endendUU=Q;endreturn;functionsum1=mean(U)a=-3-2-10123;sum2=0;sum3=0;fori=1:7sum2=sum2+U(i);sum3=sum3+U(i)*a(i);endsum1=sum3/sum2;return;functionmm=rbell(x,a,b,c)if(x>c)mm=1;elsez=(x-c)/a;v=abs(z)

16、;n=vA(2*b);y=1/(1+n);mm=y;endreturn;functionmww=trig(x,a,b,c)if(x<=a)mww=0;elseif(x>a&&x<=b)mww=(x-a)/(b-a);elseif(x>b&&x<=c)mww=(c-x)/(c-b);elseif(x>c)mww=0;endendendendreturn;functionooo=xbing(A,B)fori=1:7if(A(i)<B(i)A(i)=B(i);endooo=A;endreturnclearall%*?£

17、;oy?*%/*a¥©?6?6P0=1,0.5,0,0,0,0,0;P1=0,1,0.5,0,0,0,0;P2=0,0.5,1,0.5,0,0,0;P3=0,0,0.5,1,0.5,0,0;P4=0,0,0,0.5,1,0.5,0;P5=0,0,0,0,0.5,1,0;P6=0,0,0,0,0,0.5,1;%*6?医*%NBNM%*NS%*ZO%*PS*PMPBNB=-3;NM=-2;NS=-1;ZO=0;PS=1;PM=2;PB=3;%/*?£oy1?o±i*%Pg=PBPBPMPMPSZOZO;PBPMPMPSZOZONS;PMPMPSPSZONSN

18、S;PMPSPSZOZONSNM;PSPSZOZOZONSNM;PSZOZOZONSNMNB;ZOZOZONSNMNMNB;%/*?口?y?£oy1?0±1?£oy1?吗?oR*%R1_=dikaer(xbing(P0,P1)7P0,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)

19、;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)7P2,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=

20、dikaer(R7_,49,P4,7);R8_=dikaer(P07P3,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=dikae

21、r(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,P

22、2),7,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(xb

23、ing(P4,P5),7,P1,7);R19_=reshape(R19_,1,49);R19=dikaer(R19_,49,P3,7);R20_=dikaer(P67,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_

24、,1,49);R22=dikaer(R22_,49,P2,7);R23_=dikaer(P67,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_=resha

25、pe(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);%*3?©?一土?&?e=0;ec=0;y_1=0;y_2=0;u=0;u_1=0;u_2=0;u_3=0;e_1

26、=0;e_2=0;Eswith=10;throttle_1=0;brake_1=0;x=000;ts=0.001;sys=tf(1,1,2,1,dsys=c2d(sys,ts,num,den=tfdata(dsys,fork=1:1:40000%*?'inputdelay',0.5);'zoh');'v');time(k)=k*ts;if(k<20000)vd(k)=50;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_

27、1;u_3=u_2;u_2=u_1;u_1=u;y_2=y_i;y_1=y(k);x(1)=e;x(2)=(e-e_1)/ts;x(3)=x(3)+e*ts;%*2mm*kp=0.42;Ti=30;Td=0.0018;oi?%*vd(k)=1%kp=0.42;Ti=30;Td=0.0018;%*vd(k)=1%kp=0.0015;Ti=0.01;Td=0.002;%*vd(k)=1*time(k)+10%kp=0.0015;Ti=0.001;Td=0.002;%*vd(k)=1*time(k)A2+time(k)+2;ki=kp*ts/Ti;kd=kp*Td/ts;dthrottle=kp*x

28、(1)+kd*x(2)+ki*x(3);throttle=u_1+dthrottle;if(throttle>2000)throttle=2000;endif(throttle<-2000)throttle=-2000;end%*623医?%/*?1?©?6?士?a?*%E=lisan(-50,50,3,e);EC=lisan(-20,20,3,ec);%/*?©d?e?62?0?62?±?-?ed?GY©?e?o?*%E_R(1)=lbell(E,1,4,-3);E_R(2)=trig(E,-3,-2,0);E_R(3)=trig(E,-3

29、,-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(7)=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,3);EC_R(7)=rbell(EC,1,4,3);%/*?£oya?e?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);%/*?%Qoa?e-a?e?3?*%brake=-flisan(-2000,2000,3,u_L);e_2=e_1;e_1=e;%/*?1?if(e<0)if(e>-Eswith)|(throttle_1=0)if(throttle<=throttle_1)throttle_1=throttle;%throttle_1=throttle_1-throttle;u=throttl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论