参考:http://network.chinabyte.com/376/12363876.shtml
1. 引言
位置信息在人们的日常生活中扮演着重要的作用。在郊外、展览馆、公园等陌生环境中,使用定位导航信息可为观众游览提供更便捷的服务;在仓储物流过程中,对物品进行实时定位跟踪将大大提高工作效率;在监狱环境中,及时准确地掌握相关人员的位置信息,有助于提高安全管理水平,简化监狱管理工作。
目前全球定位系统( GPS , GlobalPositioning System)是获取室外环境位置信息的最常用方式。近年来,随着无线移动通信技术的快速发展,GPS 和蜂窝 络相结合的A-GPS(Assisted Global Positioning System)定位方式在紧急救援和各种基于位置服务(LBS,Location-Based Services)中逐渐得到了应用。但由于卫星信 容易受到各种障碍物遮挡,GPS/APGS 等卫星定位技术并不适用于室内或高楼林立的场合,目前无线室内定位技术迅速发展,已成为GPS 的有力补充。
一般来讲,使用无线信 强度获取目标位置信息的过程,就是建立无线信 强度和位置信息稳定映射关系的过程。现有室内无线定位系统主要采用红外、超声波、蓝牙、WiFi(Wireless Fidelity)、RFID(Radio FrequencyIdentification)等短距离无线技术。其中基于WiFi 络的无线定位技术由于部署广泛且低成本较低,因此备受关注。其中由微软开发的RADAR 系统是最早的基于WiFi 络的定位系统。它采用射频指纹匹配方法,从指纹库中查找最接近的K 个邻居,取它们坐标的平均作为坐标估计。而文献[5]介绍的室内定位系统则基于RSSI 信 的统计特性,采用贝叶斯公式,通过计算目标位置的后验概率分布,来进行定位。
2. 系统设计
本系统可为移动终端客户在展馆、商场、校园等应用场景提供定位服务。鉴于移动终端受到计算能力、存储容量和电池电量等诸多限制,所以仅完成简单的信 采集工作,定位计算由定位服务端完成。
定位系统的架构体系如图1 所示。服务端主要负责定位计算和响应终端的定位请求。基于负载均衡考虑,响应位置请求的Web 服务器和运行定位计算的定位服务器分离,数据交换方式采用客户端和Web 服务器相同的数据交换方式。客户端依附于具体对象,主要负责采集周边AP 的无线信 强度,并向服务端提交信 特征,服务器使用客户端采集的信 特征进行定位计算,获得移动终端的位置估计。
客户端和服务端通信采用标准的HTTP协议,编程方便,可扩展性好,客户端程序功能可根据需要进行扩充。
图2 移动终端与服务器间的信息交互3. 系统实现
3.1. 客户端设计
本系统客户端采用Android 系统手机。
Android 系统是Google 在2007 年发布的基于Linux 平台的开源手机操作系统。近年来,基于此平台的手机市场占有率不断提高,加上其良好的开放性和丰富的API 接口,可以很方便地开发各种应用程序。
3.1.1. Android 系统架构简介
Android 系统架构见图3,它建立于Linux内核之上,包含了各种设备驱动和管理模块,囊括了非常齐全的类库和框架,包括轻量级数据库SQLite、浏览器Webkit 等。整个系统建立在Dalvik 虚拟机上,应用程序使用Java 语言编写。Android 系统提供了丰富的框架(活动管理、位置管理等)来管理系统的软、硬件资源,整合了常用的应用程序(联系人、电话本等),并开放了很全面的API 供用户使用,整个平台具有良好的开放性和扩展性。
图4 Activity 生命周期
onCreate()方法在活动开始时调用,并依次调用onStart()方法和onResume()方法,Activity 处于运行状态,如有新活动启动,则调用onPause(),活动转入后台;如内存不足,活动进程则被关闭。退出程序则会依次调用onStop()和onDestroy()。
活动管理器对Activity 的管理体现在不同生命周期对以上几个方法的调用上,用户可根据自己的需要重载这几个方法。一般来讲,主程序类继承Activity 类,用户的功能代码在重载这些方法中实现。
3.1.3. 获取周边AP 信 强度
参见图5 示例代码片段。首先建立包含响应扫描结果的接收器(reciever) 并重载onReceive()方法,此方法即为收到WiFi 信 的回调函数,用户自定义功能在此实现;再通过registerReceiver()方法将receiver 向Android 系统进行注册,getSystemService()方法用于获得操作WiFi 设备的句柄;最后用startScan()方法启动扫描,当获得扫描结果后,系统会触发注册的回调函数,完成用户代码功能。
图6 程序流程图
3.1.5. 获取周边AP 信 强度
参见图5 示例代码片段。首先建立包含响应扫描结果的接收器(reciever) 并重载onReceive()方法,此方法即为收到WiFi 信 的回调函数,用户自定义功能在此实现;再通过registerReceiver()方法将receiver 向Android 系统进行注册,getSystemService()方法用于获得操作WiFi 设备的句柄;最后用startScan()方法启动扫描,当获得扫描结果后,系统会触发注册的回调函数,完成用户代码功能。
图5 扫描示例代码
实验结果表明,从给出扫描指令,至接收到扫描结果,耗时约400-500ms,考虑到后台服务器算法运算及 络通信开销,定位过程耗时将超过500ms.
3.1.6. 程序流程
从程序的功能来看,客户端需完成3 个功能:定期扫描并获得周围AP 的信 强度指纹特征,向服务器提交指纹特征信息,得到定位结果后更新界面显示。程序流程如图6 所示。
首先程序初始化并建立更新回调函数,获得WiFi 服务句柄后注册此回调函数,最后启动扫描进程周期扫描,直至系统结束程序。
其中,回调函数首先获取扫描结果,并格式化为字符串,然后通过GET 请求提交给服务端,获得定位结果后再更新显示界面。
图6 程序流程图
3.2. 服务端软件设计
3.2.1. Web 服务器
Web 服务器用于对外通信,接收外界的请求,并返回相应的位置信息。
Web 服务器运行Apache Tomcat 6.0.20,响应 络的定位请求,相应的软件设置参数为:在%TOMCAT_HOME%webapps 目录下建立目录:ExServletWEB-INF,建立web.xml描述文件和classes 文件夹,web.xml 文件是描述文件,classes 存放后台处理的类文件。
web.xml 中定义了外部引用此服务的名字和对应的类文件,内容片段见图7。
图8 定位服务器web.xml 代码片段
3.3. 3客户端与服务端通信
客户端与服务端都接入Internet,通过标准的HTTP 协议通信,简化设计的同时,也为以后Web 方式的应用留下了设计空间。
服务端Servlet 用于响应客户端的请求,客户端只需在GET 请求中提交指纹信息即可获得定位结果。图9 列出了客户端从定位服务器中获取位置信息的Java 示例代码。其中url包含了服务器的IP 地址和RSSI 指纹信息,getConnection()方法是向服务器发出GET 请求,服务器将返回位置信息,获得输入流后读出位置信息,并更新界面显示即完成整个通信过程。由于使用HTTP 协议,实现方法简单,适用于多种编程语言。
图10 信 强度的时变特性
指纹匹配方式定位算法建立在实验数据基础上,它主要包括离线训练和在线定位两个阶段,其中离线训练阶段的任务是建立射频信 强度向量和客户端位置间的一一对应关系,形成一个指纹库(radio map),定位阶段则使用实时采集的信 强度向量去匹配训练阶段构建的指纹库,从而获得目标的位置估计。
现有的基于射频指纹匹配定位方法主要包括确定型和概率型两种。其中确定型定位算法一般在指纹库中选择与实时采集的射频指纹距离最小的几个点的质心作为目标的位置估计。确定型定位算法的计算效率较高,但精度较低。概率型定位算法一般采用贝叶斯估计理论,通过不同的似然函数,如基于核函数的似然函数,计算目标位置的后验概率,并取后验概率最大的位置点作为目标的最终位置估计。概率型定位算法具有较高的定位精度和定位鲁棒性,但计算量相对较大。
4.1. 算法描述
指纹特征采用每个AP 的RSSI 均值,即:
对每个扫描到的AP 的RSSI 值,设定一个选择区间[RSSI-Σ,RSSI+Σ],Σ为多次实验的经验值,在指纹库中查找满足此区间范围的位置点,若有n 个位置点落在此区间范围,则这些位置点分别取权值为1/n,其他的位置点则取权值为0;对所有AP 做如上处理后,选出权值最大的位置点为估计位置。如有多个位置点权值一样,则比较信 强度距离,取最小者。
4.2. 算法分析
图12 实验环境
本实验主要为验证定位准确性,所以定位时采用多次扫描的均值作为信 特征。共选取了6 个位置点作为实验的位置点。测试次数约为50 次,扫描周期为2s,运行界面见图13.
图14 各实验位置点定位结果
6. 总结
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!