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 |
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});
end
if nargout
[varargout{
1:nargout}] = gui_mainfcn(gui_State, varargin{
:});
else
gui_mainfcn(gui_State, varargin{
:});
end
function 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'