基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx

上传人:b****4 文档编号:17115393 上传时间:2022-11-28 格式:DOCX 页数:24 大小:144.63KB
下载 相关 举报
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx_第1页
第1页 / 共24页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx_第2页
第2页 / 共24页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx_第3页
第3页 / 共24页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx_第4页
第4页 / 共24页
基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx

《基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx(24页珍藏版)》请在冰豆网上搜索。

基于模糊控制和PID控制自主车辆速度跟踪控制含MATLAB仿真程序Word格式.docx

ZO

P3

PS

P4

PM

P5

PB

P6

设置模糊规则库如下表:

表2:

模糊规则表

U

E

 

EC

NS*

3。

模糊推理

由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下:

if(EisNB)and(ECisNM)then(UisPB)

那么他的模糊关系子矩阵为:

其中,

,即表1中NB对应行向量,同理可以得到,

if(EisNBorNM)and(ECisNB)then(UisPB)

结果略。

按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下:

由R可以得到模拟量输出为:

4。

去模糊化

由上面得到的模拟量输出为1×

7的模糊向量,每一行的行元素(u(zij))对应相应的离散变量zj,则可通过加权平均法公式解模糊:

从而得到实际刹车控制量的精确值u。

油门控制:

油门控制采用增量式PID控制,即:

其中ki=kp×

ts/Ti,

=kp×

Td/ts只需要设置

、Ti、Td三个参数即可输出油门控制量。

二、调整参数

按照上述算法流程,应用MATLAB进行仿真实现,在参数调试过程中采用如下方法:

首先将油门和刹车分开进行调整参数,最后再将调整好的参数写入总程序中调整。

1.油门PID参数调节

油门只需要调整kp、Ti、Td三个参数,根据经验,首先令Ti、Td为0,kp由0逐渐增大,在增大kp的过程可知,kp越大系统调节时间越短并趋于稳定,在达到一定程度后,继续增大系统将出现波动。

kp=0.1kp=0.4

kp=0.9

调节Ti的过程发现,Ti对系统稳定性影响并不大,将Ti由10增大到30的过程中系统输出没有变化。

Ti=10Ti=30

在给Td赋值时,最开始从1增大,发现系统越来越不稳定,于是逐渐减小,到0.003时趋于稳定,它的可调节范围很小,随其值的减小最大误差值逐渐减小,增大则系统趋于不稳定。

kp=0.001kp=0。

002

kp=0.003

2。

刹车调节

首先,为了适应该系统,将刹车输出量限制在[-150,150]之内(最初设计其范围为[-30,30]),对于该控制,可调节参数较多,包括隶属度函数、模糊规则表、输入输出变量区间、语言值论域、模糊推理及解模糊方法等等,这里由于模糊规则需要经验设定,本算法没有实际参考,所以这里只调整规则表,其他参数固定不变。

以下为最初设计的模糊规则表:

由于实际刹车控制中对于加速采取比较单一的置零(在选择规则中设定)输出,所以在规则表中e〈0部分没有规则,然而为了仿真方便,使参数调节更清晰,重新定义模糊规则表如下:

与此同时,将刹车的输出变量取反,以此来实现减速的效果!

在调整模糊规则表的时候,必须依据输入变量e和ec的范围逐个检验,按照他们各自的语言值以及相应的输出语言值进行调整。

例如,初始速度为50,期望速度为0,即e=-50,ec=-50,则此时输出对应模糊规则表中第一行第一列PB,而下一时刻ec几乎为0,所以在调节过程中,主要进行对EC变量的ZO行进行调节,若响应时间短,则增大相应输出语言值,反之亦然.

仿真时,分两段,首先加速,之后减速,采用上面的模糊规则表,得到如下图像:

从图像的上升阶段分析可以看出,其加速阶段并不能达到稳态值,但对于刹车控制可以忽略其影响,而减速阶段实际上已经比较理想,我取稳态误差达到5%稳定,则此规则达到稳态的时间为7。

4s,这里尝试进行如下修改,将规则表中带下划线的部分以此改为:

PM,PS,PS,ZO,即,增大了输出语言值。

则得到如下图像:

此规则达到稳定的时间为6.9s,由此分析模糊规则的调整规则如下:

若想加快响应时间,增大误差和误差变化率负大区域附近的输出语言值,并增大误差变化率零区域附近的输出语言值,可能还会引起超调量的增大,所以只需做临近语言值之间的变化。

3.整体调节

此时将刹车与油门同时加到仿真模型中,分别做加速和减速仿真,依据分别调节时的规律做微量调节就可以基本达到要求。

待解决问题

在调试过程中发现,油门控制(PID)过程在达到稳态时出现抖动,并且三个参数对他的影响很小,具体原因待考证;

油门控制给系统的输入值出现大波动,每一次达到峰值持续相同时间后变为0再持续一段时间又变为峰值;

模糊控制的语言值论域较小,对于扩大语言值论域对系统的影响还有待验证;

模糊控制的输入变量压缩方式有待验证其合理性;

模糊控制与PID控制的相互配合,在该程序中,由于两种控制的输出控制量不同,在给到仿真系统时很难统一;

油门与上车的选择规则与实际系统还存在很大的改进.

附录

MATLAB仿真程序

functionkk=bingji(A)

fori=1:

49

fork=1:

7

forj=1:

26

n=7*j+k;

if(A(i,k)>

=A(i,n))

kk(i,k)=A(i,k);

else

A(i,k)=A(i,n);

end

end

functiono=dikaer(A,n,B,N)

n

forj=1:

N

if(A(i)〈=B(j))

C(i,j)=A(i);

C(i,j)=B(j);

o=C;

return;

functionT=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)^(2b);

y=1/(1+z);

mm=y;

return;

functionooo=jbing(A,B)

fori=1:

if(A(i,j)〈B(i,j))

A(i,j)=B(i,j);

ooo=A;

functionMM=jdikaer(A,n,B,m)

fori=1:

m

if(A(j)<

B(j,i))

B(j,i)=A(j);

MM=B;

functionoo=jiao(A,B)

fori=1:

if(A(i,j)>

B(i,j))

A(i,j)=B(i,j);

oo=A;

functionmm=lbell(x,a,b,c)

if(x〈c)

mm=1;

else

z=(x-c)/a;

v=abs(z);

n=v^(2*b);

y=1/(1+n);

functionL=lisan(a,b,n,x)

y=2*n*x/(b—a)—n*(a+b)/(b-a);

L=y;

functionUU=max(A)

if(A(j,i)〉=Q(i))

Q(i)=A(i,j);

UU=Q;

functionsum1=mean(U)

a=[—3-2-10123];

sum2=0;

sum3=0;

sum2=sum2+U(i);

sum3=sum3+U(i)*a(i);

sum1=sum3/sum2;

functionmm=rbell(x,a,b,c)

if(x〉c)

mm=1;

z=(x-c)/a;

y=1/(1+n);

mm=y;

functionmww=trig(x,a,b,c)

if(x〈=a)

mww=0;

else

if(x>

a&

&

x<

=b)

mww=(x-a)/(b-a);

if(x〉b&&x〈=c)

mww=(c—x)/(c—b);

c)

functionooo=xbing(A,B)

if(A(i)〈B(i))

A(i)=B(i);

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];

%/*********¸

ù

¾

Ý

Ä

¼

Æ

Ø

Õ

ó

R*****%

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=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_=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_,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);

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(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_=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(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;

Eswith=10;

throttle_1=0;

brake_1=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〈20000)

vd(k)=50;

vd(k)=0;

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;

%***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

0015;

Ti=0.001;

002;

%***vd(k)=1*time(k)^2+time(k)+2;

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;

if(throttle<

-2000)

throttle=-2000;

%****************************É

²

%/*********Ñ

ë

*****%

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(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);

%/*********¼

ö

*****%

U_R1=dika

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

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1