Design of Train Passenger Flow Monitoring System Based on BSSID Technology
-
摘要: 为监控高人流量地区的人流密度并实现人流由密集区域至零散区域的疏导,开发一款基于基本服务集标识符(BSSID)技术的列车人流监控系统. 该系统由Java小型机、BSSID地址探测程序与后台管理程序等3部分组成. 系统利用Java小型机,通过BSSID探测程序对周围乘客数量进行探测,运用Redis缓存等技术提高性能,上传数据至服务端并进行整合及可视化处理. 实践证明,该系统可在疫情及正常情况下实现列车人流监控与疏导,为现代智慧地铁建设提供一种新的可能性,助推地铁信息化的发展.
-
关键词:
- Java小型机 /
- 基本服务集标识符(BSSID) /
- 列车客流数据 /
- Redis优化
Abstract: In order to monitor the flow density of high-traffic area and realize the flow diversion from dense area to scattered area, a train passenger flow monitoring system based on basic service set identifier (BSSID) technology was developed. The system was composed of Java minicomputer, BSSID address detection program and background manager program. Taking advantage of Java minicomputer, the numbers of passengers around can be detected through the BSSID detection program, and using Redis cache and other technologies, the performance of the system can be improved. After uploading the data to the server, data integration and visualization were conducted on the server side. The practical result shows that this system can realize the monitoring and channeling of train passenger flow under the epidemic and normal conditions, which can provide a new possibility for the construction of modern intelligent subway and promote the development of subway informatization. -
交通运输部文《城市新型冠状病毒肺炎分类与防治指南》规定,城市公共电动汽车和城市轨道交通等交通工具应在消毒方面细化,按高、中、低风险区划分通风与作业组织. 对于轨道交通车站满载率和列车拥挤度,高风险地区这两个数据应小于50%,中等风险地区应小于70%,低风险地区没有限制. 人流量是指单位时间内相邻两个车站同一方向运行的列车数,由某一区间的列车流量除以通行能力得到. 与传统的测量方法相比,列车满载率将考虑到售检票系统上传的实时进出站数据,并参考历史人流大数据、旅客出行特点、路网结构、列车时刻表等,列车调度指挥措施等信息. 本设计增加对重型列车各车厢人员分布的关注,将人员密度的预防和控制降低到最小单位.
1. BSSID技术原理
基本服务集标识符(Basic Service Set Identifier,BSSID)是Ad Hoc局域网的一种特殊应用,也称为基本服务集(Basic Service Set,BSS)[1]. 通过设置相同的BSS名称,一组计算机可以组成1个组. 每个BSS都分配1个BSSID,这是1个48位二进制标识符,用于标识不同的BSS. 每个网络设备都有自己的物理地址用于识别,称为MAC地址. 通常,工厂会有一个默认值,可以更改. 它还有固定的命名格式,也是设备标识的标识符. BSSID是指对于静态时序分析(STA)设备,接入点(AP)的MAC地址为BSSID. 通过扫描周围的BSSID,可以知道周围AP的数量,也就是周围乘客的数量.
2. BSSID技术在列车客流统计中的应用
2.1 地铁列车长度情况
一般来说,世界各地的地铁型号都没有统一的标准,往往是根据某个地方地铁的需求进行定制,如纽约地铁A系统和B系统. 在中国大陆,地铁车辆通常分为A、B、C、D等4种型号和L型,也有如APM列车、单轨列车等特殊车型,上海地铁列车多为A、C两种型号,编组数量为3~8辆[2],长度为60~160 m. 为覆盖地铁列车的所有车厢,系统计划在每节编组头部安装WiFi探测器,以保证整个列车的检测覆盖,具体参数见表1.
表 1 地铁车辆主要类别及参数Table 1. Main types and parameters of metro vehicles车型 长度/m 宽度/m 高度/m 断面面积/m2 A型车 22 3.0 3.8 11.40 B型车 19 2.8 3.8 10.64 C型车 19 2.6 3.8 9.88 2.2 个人AP与探测器AP覆盖情况
手机个人热点是将手机接收到的GPRS、3G或4G信号转换为WiFi信号的技术. 手机必须具备无线AP功能才能作为热点使用. 这是一种允许电子设备连接到无线局域网(WLAN)的技术,通常使用2.4 GHz或5 GHz无线频段.
实际测试无障碍距离为10 m左右时可以使用,但信号一直比较弱,所以普通住宅的墙壁以及楼上与楼下的距离应该没有问题,有效距离约为50~100 m. 但有墙时,距离会急剧缩短,因此住户的有效距离在30 m以内. 经过测试,大部分时间无线信号传输距离为20~30 m. 这是由于建筑物、物体和信号的干扰,有效距离变小,导致网络速度不稳定. 此外,还存在电压不稳定、电磁干扰等因素.
2.3 探测器与数据存储的实现
Java技术已在各领域得到广泛应用,特别是在无线移动领域. 全球已有100多家移动运营商推出Java下载服务,Java也正在成为其他嵌入式设备(如机顶盒)的支持标准. Java应用程序的快速增长源于几个方面:
1)Java最初的设计意图“编译一次,到处运行”表明Java具有良好的可移植性,Java应用程序的开发非常方便,上市速度快,节约成本;
2)Java有广泛的支持网络,许多第三方公司都在开发Java应用程序;
3)Java平台固有的安全性适合运营商网络下载;
4)Java字节码代码密度较高,程序较小,可以适合内存资源有限的嵌入式设备.
private void scanWifi() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
wm.startScan();
//
WifiInfo info=wm.getConnectionInfo();
List<ScanResult>results=wm.getScanResults();
String[] macs=new String[results.size()];
for (int i=0; i<results.size(); i++) {
macs[i]=results.get(i).BSSID;
}
if (macs.length>0) {
Gson gson=new Gson();
String json=gson.toJson(new MacTemp(macs));
params.setAsJsonContent(true);
params.setBodyContent(json);
x.http().post(params, RemindFragment.this);
} else {
scanWifi();
}
}
}, 5000);
}
Java数据库连接(Java Database Connectivity,JDBC)是一个用于执行SQL语句的Java API,可以提供对各种关系数据库的统一访问. 它由一组用Java语言编写的类和接口组成. JDBC提供一个基准来构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序[3].
根据这一特点以及Java语言与数据库连接的方便性,本系统以小型计算机为硬件,配置Java虚拟机( Java Virtual Machine,JVM),在后台使用Java检测WiFi和固定人流检测算法,并将实时人流数据存储到数据库中. 采样数据类型见表2.
表 2 详细采样数据表Table 2. Detailed sampling data table字段名称 字段描述 数据类型 备注 macAddr MAC地址 varchar (20) signalFreq 信号频率/MHz int rssid 信号强度 int sampId 采样ID int 主码 wifiIndx 某次采样WiFi序号 int 主码 siteNum 地铁线路号 tinyint siteCab 车厢号 tinyint sitePos 车厢在列车中的位置 tinyint wifiName WiFi名称 varchar (50) time 记录时间 DATE_FORMAT() 3. 系统核心
系统利用布设于各车厢内的小型机监测平均精度(Pa),利用Redis缓存处理优化后将监测数据传送至数据库,供操作控制中心(OCC)与车厢及车站提示设备进行数据调取,流程如图1所示.
3.1 监测AP前期数据预处理
由于地铁车厢也存在于系统开发中,使用getScanResults()方法获取扫描到的WiFi列表时,列表中会出现前4位属于同一个地铁公司设备商的BSSID出厂商号和BSSID最后4位不相同的热点,这样的数据会干扰到准确测量周边AP的数量. 参照系统WiFi过滤机制,这里实现的过滤策略,移除列表中地铁公司设备厂商的BSSID地址.
public List<ScanResult>getScanList() {
if (mWifiManager!=null) {
List<ScanResult>olist=mWifiManager.getScanResult();
if (olist!=null) {
List<ScanResult>nlist=new ArrayList<>();
WifiInfo info=mWifiManager.getConnectedInfo();
for (int i=0; i<olist.size(); i++) {
if (info!=null && info.getBSSID().equals(olist.get(i).BSSID)) {
continue;
}
// 该热点SSID是否已在地铁厂商SSID热点列表中
int position=getItemPosition(nlist, olist.get(i));
if (position!=−1) { // 已在列表
// 地铁厂商SSID热点,不取
if (nlist.get(position).level<olist.get(i).level) {
}
} else {
nlist.add(olist.get(i));
}
}
return nlist;
}
}
return null;
}
3.2 监测AP布置与人流统计策略
监测AP按照每辆列车车厢节次配置,安装至每节车厢尾车门上行侧边,利用辅助系统进行供电,由于不同监测AP可探测的范围为50~100 m[4],势必会造成不同监测AP重复监测的情况,具体探测步骤如下:
1)列车启动时开始实时监测,以时间间隔为5 s监测AP,扫描周边BSSID地址与BSSID信号强度并存储至缓存(通过识别地铁厂商AP来避免误读);
2)当后一次监测开始时,与之前缓存的BSSID地址进行比较,统计本次监测与上次监测重复的BSSID数,并将当前时间、地铁线路、车厢号、车厢所在车辆相对位置存入数据库中;
3)消除本地缓存;
4)可视化平台提取对应的车厢数据情况并进行展示;
5)对不同监测AP重复监测的情况进行横向比较,取一车厢的AP探测数据,与其他AP探测数据进行比较,若此AP探测数据BSSID强度大于后者,即保留前者,否则,保留后者.
AP人流统计流程如图2所示. 对于输入数据库前的数据处理,使用Redis进行预处理[5]. Redis是一个符合伯克利软件发行版(BSD)协议的免费开源代码,是一个高性能的Nosql缓存键值数据库. Redis支持数据持久化,可以将数据保存在铭牌上的内存中,重启后可以重新加载使用. Redis缓存中,将不同监测AP重复监测的情况进行横向比较,建立n (列车数量)个list内嵌string并输入数据库中,极大减少数据处理的耗时. 对于总车辆数从1至n进行遍历,时间复杂度为log 2n.
3.3 探测系统的可视化应用
系统利用4种颜色标注拥挤度,颜色越深车厢里越挤. 其中:黑色为车厢严重拥挤,即一列列车开走后,站台上仍会有乘客滞留;红色为车厢拥挤,即乘客此时已经很难在车厢内移动,站在站台透过车窗往里看,已经看不到对面站台;黄色为车厢内比较拥挤,即乘客在车厢内移动有困难,此时在车厢里看报纸不现实,但看手机的空儿还是可以找到的;绿色为车厢比较舒适,即乘客可以在车厢内走动. 这些信息将会显示在候车站台前,供等候乘客进行车厢乘坐选择.
除此之外,储存在数据库中各时间点、各车厢的人流状况还可作为车站人员在高峰时候疏导客流的依据,可以实时显示各线路列车车厢当前的乘客拥挤程度. 车站管理者、运营调度方均可以根据实时变化的数据,更加合理精准地调度车辆,安排运力. 供车站人员进行人流候车引导、用户提示. 车厢人流量提示界面如图3所示.
4. 结 语
本文采用BSSID探测技术进行列车车厢的乘客识别,通过小型机的安装与Java程序运用一定的算法进行分析与处理,对于数据存储模块进行性能优化,在当前疫情大背景下对地铁列车的人流量进行监控,可作为乘客、车站管理人员、运营调度人员对于车厢选择、车站引导、运力调整的依据,一定程度上减轻“拥塞”现象.
但系统对于不同人流程度的处理措施未作研究,后续工作将继续完善系统,结合大量的车厢装载试验和车站乘客的调查,获取不同车厢满载率情况下乘客的实际感受,再依据这些统计数据,研究制定不同线路车厢拥挤度分级标准.
-
表 1 地铁车辆主要类别及参数
Table 1. Main types and parameters of metro vehicles
车型 长度/m 宽度/m 高度/m 断面面积/m2 A型车 22 3.0 3.8 11.40 B型车 19 2.8 3.8 10.64 C型车 19 2.6 3.8 9.88 表 2 详细采样数据表
Table 2. Detailed sampling data table
字段名称 字段描述 数据类型 备注 macAddr MAC地址 varchar (20) signalFreq 信号频率/MHz int rssid 信号强度 int sampId 采样ID int 主码 wifiIndx 某次采样WiFi序号 int 主码 siteNum 地铁线路号 tinyint siteCab 车厢号 tinyint sitePos 车厢在列车中的位置 tinyint wifiName WiFi名称 varchar (50) time 记录时间 DATE_FORMAT() -
[1] 王丽园, 吴沐阳, 吴家皋. 基于WIFI BSSID相似度和RSSI概率分布的定位算法[J] . 计算机技术与发展,2016,26(12):200 − 204. [2] 赵月, 戴端. 地铁车辆内部空间属性的设计研究[J] . 包装工程,2016,37(24):102 − 107. [3] 王凤玲. 基于Java数据库编程及其应用分析[J] . 计算机产品与流通,2020(8):57. [4] 王琪. 基于小型机的虚拟化平台的设计与实现[D]. 北京: 北京工业大学, 2016. [5] 宋云奎, 吴文鹏, 赵磊, 等. 基于Redis的分布式数据存储方法[J] . 计算机产品与流通,2020(8):106. -