[0038] 下面结合附图和实施例对本发明所述方法进行详细说明。
[0039] 本发明提出了一种能捕获智能移动终端周期性发射的WiFi/Bluetooth无线信号请求连接控制帧的无线信号探测扫描方式,以实现基于被动无线探测信号强度的定位方法,其流程图如图1所示。该方法无需智能移动终端协作,具有精度高,部署简单快捷等特点。
[0040] 本发明通过下述技术方案实现:
[0041] 步骤1:本发明利用Linux工作于Monitor监听模式的无线网卡周期性捕获网络数据包,然后识别Probe控制帧即探测控制帧,并提取无线信号信息,实现被动无线信号探测扫描模块;
[0042] 步骤2:按地理位置依次利用无线信号探测扫描模块采集无线信号信息,使用 Histogram特征即直方图特征提取技术,来提取无线信号强度Histogram特征值,从而建立无线信号指纹数据库;
[0043] 步骤3:利用智能移动终端随机报告位置信息与无线探测扫描信息融合更新第二步所建立的无线信号指纹数据库;
[0044] 步骤4:本发明提出基于被动无线探测信号强度的欧几里德最短距离定位算法;
[0045] 对于被动无线信号探测扫描模块,其主要实现子步骤如下:
[0046] 步骤1.1:采用sudo iwconfig wlan0mode monitor将Linux系统无线网卡设置为Monitor模式;
[0047] 步骤1.2:利用基于Linux标准库libpcap的pcap_loop()周期性(时间间隔为30到 60秒)捕获网络数据包;
[0048] 步骤1.3:利用ieee80211_radiotap、ieee8011_frame_header结构解析数据包,如果数据包的帧类型值为0x40则为探测控制帧;
[0049] 步骤1.4:提取无线信号信息,主要包含信息ID号、时间、MAC地址、信号强度 RSSI值、制造商、AP/Bluetooth SSID名;
[0050] 步骤1.5:循环执行步骤1.2、步骤1.3、步骤1.4。
[0051] 对于无线信号指纹数据库的建立,其主要实现子步骤如下:
[0052] 步骤2.1:对地理空间按空间布局进行位置剖分;
[0053] 步骤2.2:按位置依次利用探测扫描模块采集无线信号信息,每周期每智能移动终端约能捕获6-11条无线信号信息,且其信号强度RSSI值具有波动性。本发明采集无线信号时间约为3分钟,则每智能移动终端约能采集30-55条无线信号信息;
[0054] 步骤2.3:统计智能移动终端无线信号强度RSSI值的出现频率,如RSSI值-49,出现12次,本发明采用前三名为无线信号强度RSSI的Histogram特征值;
[0055] 步骤2.4:建立由位置坐标(x,y)、三个无线信号强度RSSI的Histogram特征值构成的无线信号指纹数据,以此建立指纹数据库;
[0056] 步骤2.5:循环执行步骤2.2、步骤2.3、步骤2.4,直到所有位置指纹数据采集完毕。
[0057] 对于无线信号指纹数据库的更新,其主要技术子步骤如下:
[0058] 步骤3.1:智能移动终端随机通过WiFi、Bluetooth或GPRS向系统服务器报告当前所在位置坐标(x,y)及终端MAC地址;
[0059] 步骤3.2:探测扫描模块采集相应MAC地址智能移动终端无线信号信息;
[0060] 步骤3.3:统计无线信号强度RSSI值的出现频率,计算无线信号强度RSSI的 Histogram特征值;
[0061] 步骤3.4:在无线信号指纹数据库中查询位置坐标(x,y);
[0062] 步骤3.5:更新无线信号指纹数据库此位置的无线信号强度Histogram特征值;
[0063] 步骤3.6:循环执行步骤3.1、步骤3.2、步骤3.3、步骤3.4和步骤3.5。
[0064] 基于被动无线探测信号强度的欧几里德最短距离定位算法主要子步骤如下:
[0065] 步骤4.1:探测扫描模块周期性捕获网络数据包,并提取无线信号信息;
[0066] 步骤4.2:按MAC地址对无线信号信息进行分类,对每个MAC地址无线信号信息统计信号强度RSSI值的出现频率,提取Histogram特征值;
[0067] 步骤4.3:对由(MAC地址、Histogram特征值)构成的探测扫描数据集,依如下子步聚执行:
[0068] 步骤4.3.1:给欧几里德距离minEucDistance赋最大值
[0069] 步骤4.3.2:从无线信号指纹数据库取一条记录
[0070] 步骤4.3.3:指纹数据与探测扫描数据集中的每一对数据进行欧几里德距离计算,如果其值小于minEucDistance,则用此值代替minEucDistance,同时记下MAC地址、指纹数据的位置坐标;
[0071] 步骤4.3.4:指纹数据库的数据全取了没有,如果没有则转步骤4.3.2,否则转步骤 4.3.5
[0072] 步骤4.3.5:输出具有最小欧几里德距离智能移动终端MAC地址的用户位置,并把此(MAC地址、Histogram特征值)从探测扫描数据集中移除。
[0073] 步骤4.3.6:探测扫描数据集是否为空,如果不为空则转步骤4.3.1,否则转步骤4.4
[0074] 步骤4.4:循环执行步骤4.1、步骤4.2和步骤4.3。
[0075] 本实施例所采用智能移动终端无线网络硬件体系如图2所示,由智能移动终端(手机、iPAD等)、蓝牙设备(iBeacon节点、移动Bluetooth设备等)、无线连接设备(Wi-Fi AP、路由器、无线网卡等)、基于monitor模式的探测扫描模块和服务器。实施例首先基于 Linux操作系统工作在monitor模式下的无线网卡,开发无线信号探测扫描模块。为了让Ubuntu上的无线网卡工作在monitor模式,我们调用如下命令实现:
[0076] sudo ifconfig wlan0down
[0077] sudo iwconfig wlan0mode monitor
[0078] sudo ifconfig wlan0up
[0079] 无线信号探测扫描模块是利用Ubuntu的QT开发工具开发。为了获取无线网卡数据包,本发明调用libpcap库来实现无线数据包的捕获。因而在QT工程中必须加入如下工程配置:
[0080] projects add:LIBS+=-L/usr/local/arm/libpcap/lib/-lpcap
[0081] 对于无线网络数据包,我们利用ieee80211_radiotap、ieee8011_frame_header结构来解析数据包,如果数据包的帧类型值为0x40则为探测控制帧。因而在主cpp文件中本发明加入如下头文件和常量设置:
[0082]
[0083] 本模块首先对IP地址和端口号进行设置,然后调用getWirelessNetMAC()建立 Socket。其核心代码为:
[0084] sock_mac=socket(AF_INET,SOCK_STREAM,0);
[0085] strcpy(ifr_mac.ifr_name,"wlan0");
[0086] if(ioctl(sock_mac,SIOCGIFHWADDR,&ifr_mac)<0)
[0087] 为捕获无线数据包,必调用libpcap库,其实现如下:
[0088]
[0089] 其中函数void processPacket(u_char*arg,const struct pcap_pkthdr*pkthdr,const u_char*packet)能循环实现无线网络数据包的捕获,探测控制帧的识别以及无线信号信息:信息ID号、时间、MAC地址、信号强度RSSI值、制造商、AP/Bluetooth SSID名等提取,是无线信号探测扫描模块的核心,其关键代码如下:
[0090]
[0091] 最后会调用一些函数如:writeWifiInfoTofile(),进行数据存储与传送工作。
[0092] 本实施例第二步是建立无线信号指纹数据库,其方法是对活动空间按空间布局进行位置剖分,建立基于位置的坐标体系。首先按位置依次利用探测扫描模块采集无线信号信息,每周期每智能移动终端约能捕获6-11条无线信号信息,且其信号强度RSSI值具有一定波动性,如有些信号强度是-45,有此是-50等。本发明采集无线信号时间约为 3分钟,则每智能移动终端约能采集30-55条无线信号信息。其次,本发明利用Histogram 提取技术处理智能移动终端的多条无线信号信息。Histogram技术统计智能移动终端无线信号强度RSSI值出现频率如图3所示,在此实例中,信号强度-44出现14次,-41 出现12次,-43出现7次,-47出现6次等。本发明采用出现频率最高的三次信号强度值做为Histogram特征值,因而所获得的值为-44、-41和-43。以此为基础,建立如下表所示的无线信号指纹数据库记录[0093] NUM X Y RSSI RSSI RSSI100001 12.4 24.5 -44 -41 -43
100002 11.8 8.9 -56 -55 -58
[0094] 循环执行以上步骤,直到所有位置指纹数据采集完毕。
[0095] 本实施例第三步是随机更新无线信号指纹数据库。由于无线信号强度具有波动性,且随着时间环境迁移对信号强度具有重要影响性,因而数天前建立的无线信号指纹数据库信息不一定对现在定位算法有效。为了提高定位算法的精度,本发明采用不定时随机选择空间位置和随机智能移动终端通过WiFi、Bluetooth或GPRS连接服务器,并行同系统报告当前所在位置坐标(x,y)。系统将调用探测扫描模块捕获相应的智能移动终端无线信号信息,智能移动终端可通过MAC地址识别。然后,使用Histogram技术提出其Histogram特征值。最后,在无线信号指纹数据库中查询相应位置坐标(x,y) 并更新此位置的无线信号强度Histogram特征值。
[0096] 本实施例第四步是实现基于被动无线探测信号强度的欧几里德最短距离定位算法。本发明首先利用探测扫描模块周期性捕获网络数据包,并提取无线信号信息。由于探测扫描模块可能获取多个智能移动终端的无线信号信息,因而本实例按智能移动终端 MAC地址对无线信号信息进行分类,对每个MAC地址无线信号信息利用Histogram技术提出其Histogram特征值,从而构成(MAC地址、Histogram特征值)格式的探测扫描数据集。本定位算法核心是探测扫描数据集中的Histogram特征值与无线信号指纹数据库的Histogram特征值吻合性,也就是本算法的欧几里德距离dk,其定义如下:
[0097]
[0098] 它是无线信号强度所有组合中最小的值。利用此值,算法在无线指纹数据库找到最佳指纹,把此指纹所在位置坐标(x,y)作为智能移动终端用户所在位置输出。从而为大型公共活动提供了基础定位数据,以下是具体定位算法伪代码:
[0099]