基于WiFi信号强度特征的室内定位系统设计
2015-01-02徐潇潇谢林柏
徐潇潇,谢林柏,彭 力
(江南大学物联网工程学院,江苏无锡214122)
1 概述
随着移动互联网的高速发展,人们对位置信息感知的需求日益增多,GPS可以较好地满足在室外环境的定位需求,但在相对封闭或者复杂的环境中,GPS定位通常不能获得很好效果甚至无法定位[1]。所以,需要设计一个室内定位系统,以满足人们在室内环境下对位置信息的需求。
根据无线信号传播的距离与传播时间、角度、和信号强度的关系建立不同模型,有基于信号达到角度(Angle of Arrival,AOA)模型、基于信号到达时间(Time of Arrival,TOA)模型、基于信号到达时间差(Time Difference of Arrival,TDOA)模型、无线信号传播衰减模型等[2],根据这些方法建立终端位置与模型相关变量的数据关系,通过检测的AOA,TOA,TDOA或接收信号强度指示(Received Signal Strength Indicator,RSSI)信息计算用户位置[3]。但是由于室内建筑的遮挡会造成比较严重的多径干涉以及反射等现象[4],信号到达角与RSSI值等信息不能精确地描述两点之间的位置关系[5]。
针对以上问题,本文系统在位置指纹算法的基础上对无线接入点(Access Point,AP)进行过滤,减少无关AP对定位精度的影响,并结合改进的K最近邻(K-Nearest Neighbor,KNN)匹配算法,计算出待定位置的位置信息。
2 室内定位算法
由于室内复杂的环境以及家具、门窗以及人员走动等因素的存在,利用传统路径损耗模型无法精确描述距离与信号强度之间的关系,路径损耗模型如下:
其中,d0表示参考距离,一般取1 m;P(d0)表示在d0处的信号强度值;X∂为一个高斯随机变量,均值和标准差分别为0和∂;n表示路径损耗系数;d表示待测距离;P(d)表示距离d处的信号强度值。由于路径损耗系数在不同位置可能存在较大偏差,因此若在室内环境下采用路径损耗模型进行定位通常得到的结果偏差会比较大。
2.1 位置指纹定位算法的改进
位置指纹定位算法将待定位置周围的AP信号强度特征与数据库中参考位置的信息进行对比,再通过一定的匹配算法计算出待定位置的位置信息[6]。该算法能够在一定程度上减少信号强度路径损耗带来的定位误差,具有一定的抗干扰能力[7]。位置指纹定位算法的工作模式一般由2个阶段组成:训练阶段和定位阶段。
在训练阶段时,在定位区域选取若干个参考位置,记录每个参考位置的信号参数集合,类似于人类指纹,每个信号参数集合对应一个唯一的物理位置。参考位置指纹R为:
其中,n表示参考位置通信范围内的AP个数;maci表示第i个AP的MAC地址;ri表示接收到的来自第i个AP的RSSI值。为减小不相关AP对系统定位精度的影响以及便于匹配算法的计算,参考位置与待定位置在进行信号特征采集时,只选取5组满足条件的AP进行数据采集,并按照信号强度的大小依次排列,过滤后的参考位置指纹Ri为:
其中,i表示第 i个参考位置;r1>r2>r3>r4>r5。记录这些参考位置的指纹信息以及物理坐标,存入数据库中。一般来说,参考节点越多,定位精度和效果越好[8]。
在定位阶段时,使用安卓客户端获得待定位置的指纹A:
将该指纹与数据库中的参考位置指纹进行对比,利用改进的K最近邻匹配算法计算出待定位置的位置信息。
2.2 K最近邻匹配算法的改进
K最近邻匹配算法的本质是计算待定位置测量到的RSSI值组成的向量与数据库中参考位置的RSSI向量的距离[9-10]。本文系统在待定位区域选取5个固定AP,假设数据库中共有n个参考点,则距离公式表达式为:
其中,Ai表示待定位位置测得的第i个AP的RSSI值;Rji(j=1,2,…,n)表示数据库中第j个参考点中来自i个AP的RSSI值。当p=1时,该距离称为曼哈顿距离,当p=2时,该距离称为欧几里得距离,本文系统取p=2。定位的本质是找出与待定位置之间距离d最小的一个或多个参考节点[11]。传统匹配算法选取距离最小的1个或K个参考位置,本文系统选取与待定位置距离d最小的3个参考位置a,b,c,对应距离与物理坐标分别为 da,db,dc与(xa,ya),(xb,yb),(xc,yc)。3 个点的权重分别为:
3 室内定位系统设计
3.1 系统框架设计
系统由客户端、服务器以及数据库3个部分组成,交互流程如图1所示。
图1 室内定位系统框架
随着智能手机的发展,几乎所有搭载Android系统的智能手机都具有 WiFi功能,这使得利用Android智能手机来进行室内定位系统的开发变得可能。
Tomcat是一个由SUN公司开发的Servlet容器,具有开源、稳定以及高效等特点,是开发 Java Web应用的最佳选择之一。本文系统服务器端利用Servlet组件来实现,客户端与服务器之间采用HTTP方式进行通信。
MySQL数据库由于开源、使用免费、性能稳定等特点,在中低端市场占据很大份额,因此本文系统的数据库部分采用MySQL来实现,用来存储参考位置的指纹信息。为使Tomcat能访问并操作MySQL数据库,首先必须利用Java数据库连接(Java Data Base Connectivity,JDBC)来连接 Java程序与数据库,在程序中加载并注册JDBC的方法具体如下:Class.forName(“com.mysql.jdbc.Driver”)。
3.2 客户端设计
安卓客户端利用Eclipse来进行开发[12],采用的手机型号为Google Nexus S。在进行客户端开发前,应先安装Java语言的软件开发工具包(Java Development Kit,JDK),并对环境变量进行配置。客户端实现了用户登录、上传参考位置指纹信息和请求定位等功能。用户在登录模块输入用户名、密码以及服务器IP地址,根据IP地址将参数传送至服务器,若连接成功,则进入训练模块和定位模块。训练模块负责建立位置指纹信息数据库,供定位阶段进行参考和计算。定位模块负责将待定位置指纹信息发送至服务器,并发起定位请求,等待服务器返回定位结果并将定位结果显示在客户端。客户端流程如图2所示。
图2 客户端流程
在客户端中,共设计 Main,Data_collection和Start_location这3个Activity,分别为对应登录模块、训练模块和定位模块。
登录模块利用Http的POST方法,将username与password参数传给服务器,通过服务器返回的值来判断是否登录成功。若登录不成功,则无法进入训练模块和定位模块进行下一步操作。
训练模块负责将参考位置的指纹信息以及该位置的ID与物理坐标发送至服务器,在将数据录入数据库前,先查询该ID是否已经存在,若存在,则让用户手动选择是否覆盖原有数据。在扫描通信范围内AP信息时,用到以下接口和类:ScanResult,WifiInfo和WifiManager。其中,ScanResult用来描述检测到的所有AP的地址、名称、频率以及信号强度等信息;WifiManager提供了大部分用来操作WiFi的API。对获得的原始数据,利用自定义的比较器按照信号强度大小由大到小依次排序。信号扫描界面如图3所示。
图3 信号扫描界面
定位模块负责将待定位置的指纹信息发送至服务器,服务器通过对比数据库的信息,利用改进的K最近邻匹配算法计算出待定位置的信息并将定位结果返回给客户端。在该模块中,通过分别获取发起定位时的时间和获得位置信息时的时间来计算时间差,该差值即为定位消耗时间。
由于客户端App涉及到对互联网的访问以及对WiFi的操作,因此要在AndroidMainfest文件中进行如下配置,以获得相应的操作权限。
3.3 服务器端设计
服务器端利用 MyEclipse进行开发,并通过Tomcat的Servlet来实现所有功能。本文设计采用的 Tomcat版本为 6.0.16。在使用 Tomcat前,需配置相关的环境变量,创建变量名为 CATALINA_HOME的系统变量,变量值为tomcat的安装路径。
在服务器端,共设计以下主要的类来满足相应客户端的要求:Login_Servlet,Collection_Servlet,Query_Servlet,Location_Servlet,分别对应验证模块、指纹信息录入模块、ID查询模块以及定位模块,每个Servlet对应一个模块。客户端的不同模块访问的Servlet不一样。在本文系统中,客户端的登录模块将参数传递至服务器端时,调用的是服务器验证模块对应的Login_Servlet,客户端在进行离线数据库建立的过程中,调用的是服务器指纹信息录入模块对应的Collection_Servlet,客户端在发起定位请求时,调用的是服务器定位模块对应的 Location_Servlet。Servlet工作模式如图4所示。
图4 客户端调用Servlet的流程
验证模块用来验证用户的登录信息,通过doPost获取 username和 password参数,若验证正确,则通过PrintWrite向客户端返回确认信息,表示验证通过,客户端可继续调用其他模块进行操作。
指纹信息录入模块用来接收并录入参考位置指纹信息,通过doPost方法获取参考节点ID、X轴位置、Y轴位置、通信范围内符合条件的AP的MAC地址以及RSSI值。在对数据库进行插入操作前,先对该ID进行查询,若该ID在数据库中不存在,则将数据插入表格,并通过PrintWrite向客户端返回确认信息,若改ID已经存在,则不进行数据插入操作,并通过向客户端返回相应信息,由客户端来确认是否进行强制替换操作。
查询模块用来查询相应ID的参考位置指纹信息,若该ID存在,则向客户端返回该ID在数据库中对应的指纹信息。
定位模块用来完成客户端发出的定位请求,通过doPost方法获取客户端发送过来的待定位置指纹信息,将所得信息与数据库的参考节点进行对比,利用改进的K最近邻匹配算法计算出待定位置的物理坐标,最后将位置信息返回给客户端。
数据库采用MySQL进行开发,版本为5.5.35。新建表格location_books用于存放参考位置的相关信息,格式具体如下:
ID X Y MAC1 LEVEL1 MAC2 LEVEL2 MAC3 LEVEL3 MAC4 LEVEL4 MAC5 LEVEL5
其中,ID表示参考位置的编号;X与Y表示参考位置的物理坐标;MAC与 LEVEL表示 AP的MAC地址与该AP的RSSI值。
对于HTML或JSP文件,它们的URL与文件路径之间存在对应关系,而对于Servlet,需要在web.xml文件中对其映射 URL,具体由web.xml文件中的<url-pattern>元素来指定。
4 系统测试与结果分析
本文系统的测试地点为江南大学物联网工程学院C516附近4个房间及走廊,测试区域大小为14.2 m ×16.1 m,选定 5个固定 AP。采用网格布局,每隔1 m设定一个参考位置,共选取224个参考位置。每个参考位置进行50次采样,取中间值录入数据库。定位阶段在待定位置进行5次采样,取中间值进行定位计算,测试记录如表1所示。
通过以上多组测量数据可得最小测量误差为0.250 0 m,最大误差为1.952 3 m,测量值与实际值的平均误差为0.960 0 m,定位平均耗时为3.45 s,定位效果较理想。
表1 系统测试数据记录
5 结束语
本文设计Android客户端和Tomcat服务器,利用MySQL数据库存储参考节点的数据信息,采用改进的位置指纹算法,搭建一个室内定位系统。该系统在现有WiFi的基础上,无需添加额外的设备,成本较低。测试结果表明,该系统定位精度较高、定位速度较快,具有较高的实用价值。今后步将采用贝叶斯等概率及扩展定位范围等方法进一步改进室内定位精度。
[1] 谢 翔,荆 昊,郭际明.室内环境下手机GPS定位精度研究[J].测绘通报,2012,8(2):95-98.
[2] 卢恒惠,刘兴川,张 超,等.基于三角形与位置指纹识别算法的 WiFi定位比较[J].移动通信,2010,34(10):72-76.
[3] 方 震,赵 湛,郭 鹏,等.基于RSSI测距分析[J].传感技术学报,2007,20(11):2526-2530.
[4] 詹 杰,刘宏立,刘述钢,等.基于RSSI的动态权重定位算法研究[J].电子学报,2011,39(1):82-88.
[5] 容晓峰,杨 娜.RSSI位置指纹的定位误差分析与仿真[J].西安工业大学学报,2010,30(6):574-578.
[6] Mok E,Retscher G.Location Determination Using WiFi Fingerprinting Versus Wifi Trilateration[J].Journal of Location Based Services,2007,1(2):145-159.
[7] 都伊林.一种模糊聚类KNN位置指纹定位算法[J].微型机与应用,2012,31(23):55-58.
[8] 赵庆贺,邓 平,陈 佳.一种基于 AP ID过滤的WLAN位置指纹定位算法[J].通信技术,2012,45(10):61-63.
[9] Wu Xuewen,Tang Dunye,Qian Xinhong.A Centralized Location Algorithm Based on RSSIin Large-scale Wireless Sensor Network[J].Procedia Engineering,2011,15(1):2004-2009.
[10] 张晓亮,赵 平,徐冠青,等.基于一种优化的KNN算法在室内定位中的应用研究[J].电子设计工程,2013,21(7):44-46.
[11] Huang Chih-Ning,Chan Chia-Tai.ZigBee-based Indoor Location System by K-nearest Neighbor Algorithm with Weighted RSSI[C]//Proceedings of the 2nd International Conference on Ambient Systems,Networks and Tcchnologies.Amsterdam,Holland:Elsevier,2011:58-65.
[12] 李 炜,金 亮,陈 曦.基于Android平台的室内定位系统设计与实现[J].华中科技大学学报:自然科学版,2013,41(S1):426-428.