一种基于WiFi的室内定位系统设计与实现雷地球, 罗海勇, 刘晓明(中国科学院计算技术研究所, 普适计算研究中心, 北京 100190)摘要:本文设计及实现了一个基于WiFi射频信号强度指纹匹配的移动终端定位系统,并设计实现了一种基于权重值选择的定位算法。
该算法为每个扫描到的AP的RSSI设定了选择区间,指纹库中落在此区间的所有位置点设平均权值,最后选取权重值最大者为待定位点的位置估计,如有相同权重值,则比较信号强度距离,取最小者,这种算法在一定程度上克服了RSSI信号随机抖动对定位的影响,提高了定位的稳定性和精度。
经实验测试,此系统在4米范围内具有良好的定位效果。
可部署在展馆、校园、公园等公共场所,为客户提供定位导航服务。
定位算法运行于服务端,客户端为配备WiFi模块的Android手机。
借助该定位系统,基于Android系统的移动终端可方便地查询自身位置,并获取各种基于位置服务。
关键词:接收信号强度;无线室内定位;射频指纹;Android操作系统Design and Implement an Indoor Location System based on WiFiLei Diqiu, Luo Haiyong, Liu Xiaoming(Pervasive Computing Research Center, Institute of Computer Technology, Chinese Academy of Sciences, Beijing, 100190, China)Abstract: This paper designs and implements an indoor location system based on WiFi for mobile user with Android handset. A locating arithmetic based on Weight-Select is introduced to filter the random noise of RSSI. For each location in Radio Map, a weight is set if the RSSI of the AP scanned is in the interval preset. Then max-weighted location or the min-RSSI-distance among them will be selected as the estimated position. According to experiments, 4-metre locating precision is available. It can be used for locating and navigating in such scene as exhibition center, campus, park, and so on. Users equipped with Android handset could get its location and some intelligent services. It is also an open and extensible system. Some locating arithmetic also could be tested on this system.Key words: Received Signal Strength, Wireless Indoor Locating, Radio Map, Android Operating System1.引言位置信息在人们的日常生活中扮演着重要的作用。
在郊外、展览馆、公园等陌生环境中,使用定位导航信息可为观众游览提供更便捷的服务;在仓储物流过程中,对物品进行实时定位跟踪将大大提高工作效率;在监狱环境中,及时准确地掌握相关人员的位置信息,有助于提高安全管理水平,简化监狱管理工作。
目前全球定位系统(GPS,Global Positioning System)是获取室外环境位置信息基金资助:国家自然基金(60873244、60973310、60772070)、北京自然基金(4102059)联系作者:雷地球,E-mail:leidiqiu@ 的最常用方式。
近年来,随着无线移动通信技术的快速发展,GPS和蜂窝网络相结合的A-GPS(Assisted Global Positioning System)定位方式[1]在紧急救援和各种基于位置服务(LBS,Location-Based Services)中逐渐得到了应用。
但由于卫星信号容易受到各种障碍物遮挡,GPS/APGS等卫星定位技术并不适用于室内或高楼林立的场合,目前无线室内定位技术迅速发展,已成为GPS的有力补充。
一般来讲,使用无线信号强度获取目标位置信息的过程,就是建立无线信号强度和位置信息稳定映射关系的过程。
现有室内无线定位系统主要采用红外、超声波[2]、蓝牙、WiFi (Wireless Fidelity)、RFID(Radio Frequency Identification)等短距离无线技术。
其中基于WiFi网络的无线定位技术由于部署广泛且低成本较低,因此备受关注[3,4]。
其中由微软开发的RADAR系统是最早的基于WiFi网络的定位系统。
它采用射频指纹匹配方法,从指纹库中查找最接近的K个邻居,取它们坐标的平均作为坐标估计。
而文献[5]介绍的室内定位系统则基于RSSI信号的统计特性,采用贝叶斯公式,通过计算目标位置的后验概率分布,来进行定位。
本文同样基于WiFi网络,设计和实现了一种无线室内定位系统,但与上述定位方法不同,本文采用了基于权值选择的定位算法,在一定程度上减少了RSS.信号随机变化引起的定位误差,实验结果表明,该系统可获得较好的定位精度(4米)。
2.系统设计本系统可为移动终端客户在展馆、商场、校园等应用场景提供定位服务。
鉴于移动终端受到计算能力、存储容量和电池电量等诸多限制,所以仅完成简单的信号采集工作,定位计算由定位服务端完成。
定位系统的架构体系如图1所示。
服务端主要负责定位计算和响应终端的定位请求。
基于负载均衡考虑,响应位置请求的Web服务器和运行定位计算的定位服务器分离,数据交换方式采用客户端和Web服务器相同的数据交换方式。
客户端依附于具体对象,主要负责采集周边AP的无线信号强度,并向服务端提交信号特征,服务器使用客户端采集的信号特征进行定位计算,获得移动终端的位置估计。
客户端和服务端通信采用标准的HTTP协议,编程方便,可扩展性好,客户端程序功能可根据需要进行扩充。
图1 定位系统网络结构图2为本定位系统的信息交互流程图。
移动终端向Web服务器提交GET请求,GET请求中包含了信号强度特征向量,Web服务器收到请求后,以同样的方式传达给定位服务器,定位服务器查询数据库,并进行相关的定位运算操作,从而得到移动终端的位置估计。
图2 移动终端与服务器间的信息交互3.系统实现3.1.客户端设计本系统客户端采用Android系统手机[6]。
Android系统是Google在2007年发布的基于Linux平台的开源手机操作系统。
近年来,基于此平台的手机市场占有率不断提高,加上其良好的开放性和丰富的API接口,可以很方便地开发各种应用程序。
3.1.1.Android系统架构简介Android系统架构见图3,它建立于Linux 内核之上,包含了各种设备驱动和管理模块,囊括了非常齐全的类库和框架,包括轻量级数据库SQLite、浏览器Webkit等。
整个系统建立在Dalvik虚拟机上,应用程序使用Java语言编写。
Android系统提供了丰富的框架(活动管理、位置管理等)来管理系统的软、硬件资源,整合了常用的应用程序(联系人、电话本等),并开放了很全面的API供用户使用,整个平台具有良好的开放性和扩展性。
图3 Android系统架构图3.1.2.Activity生命周期Android系统上运行的应用程序一般包含一个或多个Activity,主要由活动管理器进行管理,Activity是Android系统分配和管理资源的基本单位。
每个Activity都有其对应的生命周期(图4)。
图4 Activity生命周期onCreate()方法在活动开始时调用,并依次调用onStart()方法和onResume()方法,Activity处于运行状态,如有新活动启动,则调用onPause(),活动转入后台;如内存不足,活动进程则被关闭。
退出程序则会依次调用onStop()和onDestroy()。
活动管理器对Activity的管理体现在不同生命周期对以上几个方法的调用上,用户可根据自己的需要重载这几个方法。
一般来讲,主程序类继承Activity类,用户的功能代码在重载这些方法中实现。
3.1.3.获取周边AP信号强度本文采用基于射频指纹的定位方法,移动终端需要获得周围AP的RSSI指纹特征,Android系统提供的接口可以很方便地实现这一功能。
参见图5示例代码片段。
首先建立包含响应扫描结果的接收器(reciever)并重载onReceive()方法,此方法即为收到WiFi信号的回调函数,用户自定义功能在此实现;再通过registerReceiver()方法将receiver向Android系统进行注册,getSystemService()方法用于获得操作WiFi设备的句柄;最后用startScan()方法启动扫描,当获得扫描结果后,系统会触发注册的回调函数,完成用户代码功能。
图5 扫描示例代码实验结果表明,从给出扫描指令,至接收到扫描结果,耗时约400-500ms,考虑到后台服务器算法运算及网络通信开销,定位过程耗时将超过500ms。
3.1.4.程序流程从程序的功能来看,客户端需完成3个功能:定期扫描并获得周围AP的信号强度指纹特征,向服务器提交指纹特征信息,得到定位结果后更新界面显示。
程序流程如图6所示。
首先程序初始化并建立更新回调函数,获得WiFi服务句柄后注册此回调函数,最后启动扫描进程周期扫描,直至系统结束程序。
其中,回调函数首先获取扫描结果,并格式化为字符串,然后通过GET请求提交给服务端,获得定位结果后再更新显示界面。
图6 程序流程图3.2.服务端软件设计3.2.1.Web服务器Web服务器用于对外通信,接收外界的请求,并返回相应的位置信息。
Web服务器运行Apache Tomcat 6.0.20,响应网络的定位请求,相应的软件设置参数为:在%TOMCAT_HOME%\webapps目录下建立目录:\ExServlet\WEB-INF,建立web.xml 描述文件和classes文件夹,web.xml文件是描述文件,classes存放后台处理的类文件。