模糊控制详细讲解实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、速度控制算法:
欧阳学文
首先定义速度偏差50 km/h≤e(k)≤50km/h,20≤ec(i)=e(k)e(k1)≤20,阀值eswith=10km/h
设计思想:油门控制采用增量式PID控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。
选择规则:
e(k)<0 ①e(k)>eswith and throttlr_1≠0 选择油门控制
②否则:先将油门控制量置0,再选择刹车控制
0 e(k)=0 直接跳出选择 刹车控制:刹车采用模糊控制算法 1.确定模糊语言变量 e基本论域取[50,50],ec基本论域取[20,20],刹车控制量输出u基本论域取[30,30],这里我将这三个变量按照下面的公式进行离散化: 其中,,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取相同的隶属度函数即: 说明:边界选择钟形隶属度函数,中间选用三角形隶属度函数,图像略 实际EC和E输入值若超出论域范围,则取相应的端点值。 3.模糊控制规则 由隶属度函数可以得到语言值隶属度(通过图像直接可以看出)如下表: 表1:E/EC和U语言值隶属度向量表 设置模糊规则库如下表: 表2:模糊规则表 U E EC —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 3.模糊推理 由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下: if (E is NB) and (EC is NM) then (U is PB) 那么他的模糊关系子矩阵为: 其中,,即表1中NB对应行向量,同理可以得到, , if (E is NVB or NB) and (EC is NVB) then (U is PVB) 结果略 按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下: 由R可以得到模拟量输出为: 4.去模糊化 由上面得到的模拟量输出为1×7的模糊向量,每一行的行元素(u(zij))对应相应的离散变量zj,则可通过加权平均法公式解模糊: 从而得到实际刹车控制量的精确值u。 油门控制: 油门控制采用增量式PID控制,即: 只需要设置、、三个参数即可输出油门控制量。 二、程序实现及参数调节 clear all %************************模糊算法 %/*********隶属度向量 *****% 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=[PB PB PM PM PS ZO ZO; PB PM PM PS ZO ZO NS; PM PM PS PS ZO NS NS; PM PS PS 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=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);