基于matlab的交通信号模糊控制系统设计
目录
- 1.系统效果图
- 2.研究对象
- 3.不定相序模糊控制
- 4.模糊控制器设计思路
- 5.系统开发环境配置
- 6.相序优化模块
- 7.绿灯延时模块
- 8.修正模块
- 9.系统GUI界面设计
1.系统效果图
一来不多说先展示效果图。
2.研究对象
本文选择研究对象为三车道交叉路口,其几何模型示意图如下图所示,本文所设计的基于机器视觉的交通信号灯模糊控制系统共分为主要设计模块交通信号灯配时控制模块,负责根据车流量及道路拥堵状况控制红绿灯时长,进而疏散车流,减缓拥堵。
车辆平均延时等待数学模型,本设计所选取的道路模型为最常见的三车道模型,即每个方向包括了一条左转、一条右转和一条直行总共三个通行选择。另外考虑到在中国实际生活中,右转车辆通常不限行,因此本文中不作考虑。控制示意图如下,图中每个相位中的箭头表示的是拥有通行权的车辆,每个相位时间内车辆依次有序通过路口。
3.不定相序模糊控制
通过查阅相关文献智能控制,我们设计了如下不定相序模糊控制器,其结构主要包括 4个模块:相序优化模块、绿灯延时模块、校正模块及决断模块。其结构示意图如下图所示。不定相序模糊控制的基本思想是:首先定义一个评价指标——各红灯相位绿灯放行需求度,即在当前绿灯相位(用G表示)时间周期中,根据摄像头记录的交叉口实时车流量判断各红灯相位对于绿灯放行的需求度。将需求度最大的一个相作为下一绿灯相位(用NG表示),在当前绿灯相位时间中,通过比对当前绿灯相位车队长度与下一相位绿灯长度,经过各个模块协同作用确定当前绿灯延时时间。
4.模糊控制器设计思路
①确定输入输出变量;
②制定模糊规则,确定隶属度函数;
③通过论域变换,将变量的自然范围映射到论域范围;
④通过重心法进行清晰化处理,得到绿灯时间的模糊控制表。
5.系统开发环境配置
本文设计是利用MATLAB 2017b的图形用户界面(Graphical User Interfaces, GUI)软件平台完成基于机器视觉的交通信号灯自适应模糊控制系统设计。通常在开发一个实际应用的程序时会尽量做到界面友好,最常使用的方法就是使用图形用户界面GUI,建立这样一个界面友好、占用资源少、高性能、便于移植、可配置的GUI界面设计,能够使用户的学习和使用更为方便容易。
6.相序优化模块
相序优化模块的作用为评价当前红灯相位通行需求度,选出下一绿灯相位。该模块的输入量为当前各个红灯相的等候车辆数(Q_r)和红灯已过时长(T_r),输出为红灯相位绿灯放行需求度(U_r),量化因子(K_e)是指在模糊控制中,基本论域中的量为精确量,为了进行模糊化处理,必须将输入变量从基本论域转换到相应的模糊集论域,从而就要引进的概念,隶属度函数图如下。
相序优化模块模糊规则对应表
T_r | Q_r | ||||
VS | S | M | L | VL | |
VS | VF | VF | F | F | M |
S | VF | F | F | M | G |
M | F | F | M | G | VG |
L | F | M | G | VG | VG |
VL | M | G | VG | VG | VG |
该模块输出量U_r随输入量Q_r和T_r变化情况如下:
7.绿灯延时模块
交通信号灯模糊控制器有两个输入量:当前绿灯周期等待通过交叉路口的车辆数L_g以及下一相位等待车辆数L_e,输出为绿灯相位延长时间T_i,隶属度函数如下。
绿灯延时模糊规则表
L_e | L_g | ||||||
VF | F | CF | M | CH | H | VH | |
VF | VS | CS | M | CL | L | L | VL |
F | VS | S | M | M | L | L | VL |
CF | VS | S | CS | M | CL | L | VL |
M | VS | S | CS | M | CL | L | L |
CH | VS | S | CS | CS | CL | L | L |
H | VS | VS | S | CS | M | CL | L |
VH | VS | VS | VS | S | M | CL | L |
该模块输入量与输出量变化情况如下:
8.修正模块
修正模块实现的功能为:根据当前绿灯和下一绿灯两个相位的车流量数据来修正当前绿灯相位的附加延时∆G。其输入量一个是当前绿灯相位的车辆到达率λ_p一个是下一绿灯相位的车辆到达率λ_n,输出为当前绿灯相位附加延时∆G,隶属度函数如下。
修正模块模糊规则表
λ_n | λ_p | ||||
VS | S | M | G | VG | |
VS | S | M | L | VL | VL |
S | S | S | M | L | VL |
M | VS | S | S | M | L |
G | VS | VS | S | S | M |
VG | VS | VS | VS | S | S |
该模块的输出随输入变化情况如下图所示:
9.系统GUI界面设计
function varargout = sltSystem(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @sltSystem_OpeningFcn, ...'gui_OutputFcn', @sltSystem_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
endfunction sltSystem_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
set(gcf, 'name', '基于机器视觉的交通信号灯自适应模糊控制系统设计与实现');
handles.data = show_img(hObject, eventdata, handles);
handles.timeShow = {'timeWE', 'timeWN', 'timeNS', 'timeNE'};
handles.Qr = {'Qr_WE', 'Qr_WN', 'Qr_NS', 'Qr_NE'};
handles.Qr_rate = {'Qr_rate_WE', 'Qr_rate_WN', 'Qr_rate_NS', 'Qr_rate_NE'};
handles.reInfo = []; %表格数据
guidata(hObject, handles);function varargout = sltSystem_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;function Qr_WE_Callback(hObject, eventdata, handles)function Qr_WE_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_rate_WE_Callback(hObject, eventdata, handles)function Qr_rate_WE_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_WN_Callback(hObject, eventdata, handles)function Qr_WN_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_NS_Callback(hObject, eventdata, handles)function Qr_NS_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_NE_Callback(hObject, eventdata, handles)function Qr_NE_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_rate_WN_Callback(hObject, eventdata, handles)function Qr_rate_WN_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_rate_NS_Callback(hObject, eventdata, handles)function Qr_rate_NS_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction Qr_rate_NE_Callback(hObject, eventdata, handles)function Qr_rate_NE_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction control_start_Callback(hObject, eventdata, handles)
global finish_status
control_start_status(hObject, eventdata, handles, 'off');
[Qr, Qr_rate] = getData(hObject, eventdata, handles);
control = readfis('./fuzzyController/control');
psOptimizer = readfis('./fuzzyController/phaseSequenceOptimizer');
correctModule = readfis('./fuzzyController/correctModule');
Kp_Qr = 0.6;
Kp_Tr = 0.2;
Kp_Ur = 1;
Kp_Lg = 0.6;
Kp_Le = 0.6;
Kp_Ti = 0.6;
Kp_lambdap = 1;
Kp_lambdan = 1;
Kp_deltaG = 1;
Tmin = 15;
Tmax = 120;
KflagG = [1 1 1 1];
Gtime = [0,0,0,0];
Rtime = [0,0,0,0];
[Qr, Qr_rate] = getData(hObject, eventdata, handles);
Qr_default = Qr;
show_rate = round(handles.show_rate);
i = 1;randQr = get_random_seed(Qr_rate);
[~, G] = controller(psOptimizer, Qr*Kp_Qr, Rtime);
while (true)if finish_statuspst = get(handles.control_pause, 'String');if strcmp(pst, '继续')set(handles.control_pause, 'String', '暂停');uiresume; % 回复暂停endbreakendif rem(i-1,4) == 0fprintf('-----------------------------\n')endG_Qr = Qr(G);Gtime(G) = Tmin;KflagG(G) = 0;[~, NG] = controller(psOptimizer, Qr*Kp_Qr.*KflagG, Rtime*Kp_Tr.*KflagG);[Ti, ~] = controller(control, G_Qr*Kp_Qr, Qr(NG)*Kp_Qr);Ta = 0;if Ti >= 5[Ta, ~] = controller(correctModule, Qr_rate(G)*Kp_lambdap, Qr_rate(NG)*Kp_lambdan);endGtime(G) = round(Gtime(G) + Ti/Kp_Ti + Ta/Kp_deltaG);Qr_Rtime = Rtime(G);Rtime = (Rtime + Gtime(G)).*KflagG;[valueT, ~] = max(Rtime);if (valueT > Tmax)Gtime(G) = Gtime(G) - valueT + Tmax;end% 绿灯时间Qr_Gtime = Gtime(G);[change, Rtime] = limitTime(Rtime, Tmax);fprintf('车辆数: %d, 相位: %d, 绿灯时长: %d. \n',Qr(G), G, Gtime(G));delete(allchild(eval(['handles.' handles.data.names{G}])));axes(eval(['handles.' handles.data.names{G}]));imshow(handles.data.img.green);while (Gtime(G)>0)if finish_statusbreakendset(eval(['handles.' handles.timeShow{G}]), 'String', num2str(Gtime(G)));set(eval(['handles.' handles.timeShow{NG}]), 'String', num2str(Gtime(G)));pause(1); %这里pause要放在set后面,不然会多一秒Gtime(G) = Gtime(G) - 1*show_rate;endtry delete(allchild(eval(['handles.' handles.data.names{G}]))); endtry set(eval(['handles.' handles.timeShow{G}]), 'String', '∞'); endaxes(eval(['handles.' handles.data.names{G}]));imshow(handles.data.img.red);handles.reInfo = [handles.reInfo; {G},{G_Qr},{Qr_Gtime},{Qr_Rtime}];set(handles.reInfoTable, 'Data', handles.reInfo);guidata(hObject, handles);KflagG(G) = 1;Rtime(G) = 0;if (handles.randYes == 1)Qr(G) = randQr(G) + round(rand(1)*8);set(eval(['handles.' handles.Qr{G}]), 'String', num2str(Qr(G)));elseQr(G) = Qr_default(G);endif (change)G = change;elseG = NG;endi = i + 1;
end
finish_status = 0;function control_pause_Callback(hObject, eventdata, handles)
pst = get(handles.control_pause, 'String');
if strcmp(pst, '继续')set(handles.control_pause, 'String', '暂停');uiresume; % 回复暂停
elseset(handles.control_pause, 'String', '继续');uiwait; % 用于暂停
endfunction showRate_Callback(hObject, eventdata, handles)
handles.show_rate = get(handles.showRate, 'Value');
guidata(hObject, handles);function showRate_CreateFcn(hObject, eventdata, handles)
handles.show_rate = 1;
guidata(hObject, handles);
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction control_finish_Callback(hObject, eventdata, handles)
global finish_status
button1 = questdlg('是否结束', '信息', '是', '否', '是');
if(button1 == '是')finish_status = 1;control_start_status(hObject, eventdata, handles, 'on');finish_reset(hObject, eventdata, handles);
endfunction control_exit_Callback(hObject, eventdata, handles)
button1 = questdlg('是否退出系统', '退出系统', '是', '否', '是');
if(button1 == '是')delete(gcf);
end%退出系统函数
function figure1_CloseRequestFcn(hObject, eventdata, handles)
pst = get(handles.control_pause, 'String');
if strcmp(pst, '继续')set(handles.control_pause, 'String', '暂停');uiresume; % 回复暂停
end
button1 = questdlg('是否退出系统', '退出系统', '是', '否', '是');
if(button1 == '是')delete(hObject);
endfunction control_pause_CreateFcn(hObject, eventdata, handles)function control_finish_CreateFcn(hObject, eventdata, handles)
global finish_status
finish_status = 0;function repeat_random_Callback(hObject, eventdata, handles)
handles.randYes = get(handles.repeat_random, 'Value');
guidata(hObject, handles);% --- Executes on button press in random.
function random_Callback(hObject, eventdata, handles)
[~, Qr_rate] = getData(hObject, eventdata, handles);
randQr = get_random_seed(Qr_rate);
for i=1:length(randQr)try set(eval(['handles.' handles.Qr{i}]), 'String', num2str(randQr(i)+round(rand(1)*8))); end
endfunction repeat_random_CreateFcn(hObject, eventdata, handles)
handles.randYes = 0;
guidata(hObject, handles);function exportData_Callback(hObject, eventdata, handles)
keepTime = datestr(now,30);
[~, ~, ret] = uiputfile('*.xlsx','另存为',['.\xlsxData\' keepTime '.xlsx']);
if ret == 1rowName = {'相位','车辆数','绿灯时长','等待时间'};xlswrite(['.\xlsxData\' keepTime '.xlsx'], [rowName;handles.reInfo], '历史信息表');msgbox('保存成功','信息');
elsemsgbox('未保存','信息');
end
基于matlab的交通信号模糊控制系统设计相关推荐
- 毕业设计-基于 Matlab 的心电信号去噪系统设计
目录 前言 课题背景和意义 实现技术思路 一.系统设计流程 二.仿真系统设计 三.心电信号处理结果及分析 实现效果图样例 最后 前言
- 基于matlab的信号仿真实验,基于MATLAB的《信号与系统》课程仿真实验系统设计
本设计是针对<信号与系统>课程中涉及到基本实验,如基础信号的演示.语音信号的播放与录制.快速FFT变换等,利用MATLAB的GUI设计仿真实验的人机界面,实现<信号与系统>课程 ...
- matlab模拟频谱仪,毕业设计基于MATLAB的声音信号频谱分析仪源代码V3.1(手机版)...
<[毕业设计]基于MATLAB的声音信号频谱分析仪源代码.doc>由会员分享,可免费在线阅读全文,更多与<毕业设计基于MATLAB的声音信号频谱分析仪源代码(V3.1)>相关文 ...
- 基于机器视觉的交通灯控制系统设计
基于机器视觉的交通灯控制系统设计 摘 要 Abstract 引言 1 课题背景 1.1概述 1.2传统交通路口信号灯 1.3基于机器视觉的交通灯控制智能系统 1.3.1国内研究现状 1.3.2国外研究 ...
- matlab最小拍控制怎么求传递函数,基于Matlab 的最少拍控制系统设计
- 计算机控制技术实验 -基于Matlab 的最少拍控制系统设计 学院:计算机科学与技术 班级: 姓名: 学号: 指导老师: 日期: 基于Matlab 的最少拍控制系统设计 一. 实验目的 学习使用 ...
- 最小拍有纹波系统仿真实验Matlab,控制技术实验报告--基于Matlab的最少拍控制系统设计.doc...
计算机控制技术 --基于Matlab的最少拍控制系统设计 学 院: 计算机科学与技术 班 级: 计科0902班 学 号: 姓 名: 指导老师: 日 期: 2012年12月10日 实验五 基于Matla ...
- 基于MATLAB图像处理交通信号灯识别
基于MATLAB图像处理交通信号灯识别 摘 要:交通信号灯是智能车辆在城市环境中行驶的主要指示信号,在城市交通安全中发挥了不可或缺的作用.交通信号灯通常设在交叉口,能够供应智能车辆的方位信息,查看和辨 ...
- matlab空调调节器设计,基于MATLAB的空调温度调节系统设计
内容简介: 本科毕业设计 基于MATLAB的空调温度调节系统设计 室温|PID控制|模糊控制|神经网络控制|空调仿真|matlab 文件格式:word+PPT 本科毕业设计 基于MATLAB的空调温度 ...
- matlab 最少拍控制器 计算 阶跃,基于Matlab 的最少拍控制系统设计
基于Matlab 的最少拍控制系统设计 计算机控制技术实验 -基于Matlab 的最少拍控制系统设计 学院:计算机科学与技术 班级: 姓名: 学号: 指导老师: 日期: 基于Matlab 的最少拍控制 ...
最新文章
- hadoop python入门_MRJob 极速入门,Python玩转Hadoop你会么?
- 再议C#方法中的反射方式和委托方式
- UA STAT687 线性模型II 最小二乘理论3 广义最小二乘
- 深入理解TCP实现|经典PDF分享
- ssl提高组周六模拟赛【2018.9.15】
- Linux启动nacos成功日志_微服务系列之Nacos配置中心
- NLP实战-中文命名实体识别
- 解决方案:Gateway实现全局跨域
- 35岁危机?请收下这部转型秘籍
- cmder下载配置并设置为vscode默认终端
- SEO利器 - 网页内容监控之百度自动推送
- 你未来的职业规划是什么?
- Linux与ISCSI
- 淘宝网店装修代码使用方法大全
- eclipse 中 svn 代码报错如下 org.apache.subversion.javahl.ClientException:Filesystem has no item
- HTML5 新增的结构元素——能用不代表用对了
- Python:文本分析必备—搜狗词库
- BZOJ1499: [NOI2005]瑰丽华尔兹
- 大学计算机专业相关证书有哪些,大学必考8大证书 哪些最实用
- 写给通信年轻人的27个忠告