赞
踩
目录
实际驾车时,车辆在行驶过程中能否去执行换道的决策与道路信息存在很大的非线性关系,模糊逻辑算法可以较好地解决复杂信息下的非线性系统控制。
由实际驾驶经验,我们知道,车辆的安全换道与车辆驾驶速度及车距有关,当车速较大、与前方车辆车距较小时,换道易引起碰撞等危险。在这里定义速度差值系数与车距差值系数作为模糊系统判断的输入量。
(1)速度差值系数:
其中,为车辆当前速度,为前方车辆的速度。
(2)车距差值系数:
其中,为安全车距,为当前车辆距离前方车辆的距离。
将输入的速度差值系数及车距差值系数模糊化为5个等级:设的取值范围[0,1]为论域X,选取X的模糊子集为 {小,较小,中,较大,大};设的取值范围[0,1]为论域Y,同样地,选取Y的模糊子集为 {小,较小,中,较大,大}。
输出变量为换道决策意愿值,模糊化为{弱,较弱,中,较强,强}5个子集,论域为Z,取值范围在[0,1]。
换道意愿 | 速度差值系数 | |||||
较小 | 中等 | 较大 | 大 | |||
车距期望系数 | 小 | 较弱 | 中等 | 较强 | 强 | 强 |
较小 | 较弱 | 中等 | 较强 | 强 | 强 | |
中等 | 弱 | 较弱 | 中等 | 较强 | 较强 | |
较大 | 弱 | 弱 | 较弱 | 中等 | 较强 | |
大 | 弱 | 弱 | 弱 | 较弱 | 中等 |
将模糊推理的输出变量转化为实际执行的变量,决策类型定义如下:
decision=1 | 继续轨迹跟踪 | |
decision=2 | 等待避障 | |
decision=3 | 执行避障动作 |
在Matlab命令行窗口输入
>>fuzzy
可弹出模糊逻辑工具箱的界面:
工具箱的使用可参考:matlab模糊控制工具箱使用和模糊控制pid实例参考_studyer_domi的博客-CSDN博客_matlab模糊控制
参考:Fuzzy Inference System Modeling- MATLAB & Simulink
1.创建模糊逻辑系统:如,利用 fis = mamfis; %生成模糊逻辑对象(Mamdani模糊系统)
常见的模糊类型有:mamfis、sugfis(Sugeno模糊推理系统)、genfis(从数据生成模糊推理系统对象)等,或类型间相互转换
2.指定输入和输出变量:如,fis = addInput(fis,[0 1],'Name','fai_d'); %(指定模糊系统,变量范围,‘Name’,变量名称)
3.指定隶属度函数:如,fis = addMF(fis,'fai_d','trimf',[-0.25,0,0.25],'Name','小'); %(指定模糊系统,变量名称,隶属度函数类型,‘Name’,隶属度名称)
常见的隶属度类型有:
4.指定模糊规则:这里有,fis = addRule(fis,rulelist);
其中,rulelist为5列的向量,每一列依次表示等级,等级,等级,规则权重,AND/OR选项(1或0)
5.评估及可视化模糊系统
6.导入及导出
例.fis = readfis('LCD'); %从文件加载模糊推理系统
writeFIS(fis,'LCD'); %将模糊系统保存到文件
- clc
- clear
- close all
-
- %构造输入、输出
- %创建新的模糊推理系统
- fis = mamfis; %生成模糊逻辑对象
-
- %输入1:fai_d(隶属度函数——距离差值系数)
- fis = addInput(fis,[0 1],'Name','fai_d');
- %设置三角隶属函数'trimf'
- fis = addMF(fis,'fai_d','trimf',[-0.25,0,0.25],'Name','小'); %-0.25,0,0.25分别为三角的左底点,顶点,右底点
- fis = addMF(fis,'fai_d','trimf',[0,0.25,0.5],'Name','较小');
- fis = addMF(fis,'fai_d','trimf',[0.25,0.5,0.75],'Name','中');
- fis = addMF(fis,'fai_d','trimf',[0.5,0.75,1],'Name','较大');
- fis = addMF(fis,'fai_d','trimf',[0.75,1,1.25],'Name','大');
-
- %输入2:fai_v (隶属度函数——速度差值系数)
- fis = addInput(fis,[0 1],'Name','fai_v');
- fis = addMF(fis,'fai_v','trimf',[-0.25,0,0.25],'Name','小');
- fis = addMF(fis,'fai_v','trimf',[0,0.25,0.5],'Name','较小');
- fis = addMF(fis,'fai_v','trimf',[0.25,0.5,0.75],'Name','中');
- fis = addMF(fis,'fai_v','trimf',[0.5,0.75,1],'Name','较大');
- fis = addMF(fis,'fai_v','trimf',[0.75,1,1.25],'Name','大');
-
- %输出
- fis = addOutput(fis,[0 1],'Name','fai_h');
- fis = addMF(fis,'fai_h','trimf',[-0.25,0,0.25],'Name','弱');
- fis = addMF(fis,'fai_h','trimf',[0,0.25,0.5],'Name','较弱');
- fis = addMF(fis,'fai_h','trimf',[0.25,0.5,0.75],'Name','中');
- fis = addMF(fis,'fai_h','trimf',[0.5,0.75,1],'Name','较强');
- fis = addMF(fis,'fai_h','trimf',[0.75,1,1.25],'Name','强');
- %%规则库
- %第1~5列分别是:fai_d,fai_v,fai_h,规则权重,AND/OR选项
- rulelist=[1 1 2 1 1;
- 1 2 3 1 1; %当fai_d=1(小),fai_v=2(较小),此时的换道意愿为3(中)
- 1 3 4 1 1;
- 1 4 5 1 1;
- 1 5 5 1 1;
-
- 2 1 2 1 1;
- 2 2 3 1 1;
- 2 3 4 1 1;
- 2 4 5 1 1;
- 2 5 5 1 1;
-
- 3 1 1 1 1;
- 3 2 2 1 1;
- 3 3 3 1 1;
- 3 4 4 1 1;
- 3 5 4 1 1;
-
- 4 1 1 1 1;
- 4 2 1 1 1;
- 4 3 2 1 1;
- 4 4 3 1 1;
- 4 5 4 1 1;
-
- 5 1 1 1 1;
- 5 2 1 1 1;
- 5 3 1 1 1;
- 5 4 2 1 1;
- 5 5 3 1 1;];
-
- fis = addRule(fis,rulelist); %添加模糊规则函数
- showrule(fis) %显示模糊规则函数
-
- %%根据输入,得到输出
- %先设置解模糊方法
- fis.DefuzzMethod = 'centroid';
-
- %任意给一个fai_d,fai_v,输出换道意愿fai_h
- fai_d = 0.4;
- fai_v = 0.6;
- fai_h = evalfis(fis,[fai_d,fai_v]);
-
- %根据换道意愿fai_h的大小,给出车辆决策
- if fai_h > 0 && fai_h <= 0.5
- decision = 1;
- disp('车辆决策为:跟驰行驶')
- elseif fai_h > 0.5 && fai_h <= 0.6
- decision = 2;
- disp('车辆决策为:等待换道')
- elseif fai_h > 0.6 && fai_h <= 1
- decision = 3;
- disp('车辆决策为:执行换道')
- end
-
- %%画出模糊系统
- figure(1);plotfis(fis); %模糊系统连接结构图
- figure(2);plotmf(fis,'input',1); %模糊系统第一个输入隶属函数图
- figure(3);plotmf(fis,'input',2); %模糊系统第二个输入隶属函数图
- figure(4);plotmf(fis,'output',1); %模糊系统输出隶属函数图
- figure(5);gensurf(fis);title('换道意愿模糊规则曲面') %模糊规则曲面
-
- %%保存
- writeFIS(fis,'LCD');
-
得到的结果如下:
的隶属度函数值
的隶属度函数值
换道意愿 输出
换道意愿的曲面图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。