一种基于WiFi的室内定位系统设计与实现[图]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于WiFi的室内定位系统设计与实现[图]
1. 引言
位置信息在人们的日常生活中扮演着重要的作用。在郊外、展览馆、公园等陌生环境中,使用定位导航信息可为观众游览提供更便捷的服务;在仓储物流过程中,对物品进行实时定位跟踪将大大提高工作效率;在监狱环境中,及时准确地掌握相关人员的位置信息,有助于提高安全管理水平,简化监狱管理工作。
目前全球定位系统(GPS , GlobalPositioning System)是获取室外环境位置信息的最常用方式。近年来,随着无线移动通信技术的快速发展,GPS 和蜂窝网络相结合的A-GPS(Assisted Global Positioning System)定位方式在紧急救援和各种基于位置服务(LBS,Location-Based Services)中逐渐得到了应用。但由于卫星信号容易受到各种障碍物遮挡,GPS/APGS 等卫星定位技术并不适用于室内或高楼林立的场合,目前无线室内定位技术迅速发展,已成为GPS 的有力补充。
一般来讲,使用无线信号强度获取目标位置信息的过程,就是建立无线信号强度和位置信息稳定映射关系的过程。现有室内无线定位系统主要采用红外、超声波、蓝牙、WiFi(Wireless Fideli ty)、RFID(Radio FrequencyIdentification)等短距离无线技术。其中基于WiFi 网络的无线定位技术由于部署广泛且低成本较低,因此备受关注。其中由微软开发的RADAR 系统是最早的基于WiFi 网络的定位系统。它采用射频指纹匹配方法,从指纹库中查找最接近的K 个邻居,取它们坐标的平均作为坐标估计。而文献[5]介绍的室内定位系统则基于RSSI 信号的统计特性,采用贝叶斯公式,通过计算目标位置的后验概率分布,来进行定位。
本文同样基于WiFi 网络,设计和实现了一种无线室内定位系统,但与上述定位方法不同,本文采用了基于权值选择的定位算法,在一定程度上减少了RSS.信号随机变化引起的定位误差,实验结果表明,该系统可获得较好的定位精度(4 米)。
2. 系统设计
本系统可为移动终端客户在展馆、商场、校园等应用场景提供定位服务。鉴于移动终端受到计算能力、存储容量和电池电量等诸多限制,所以仅完成简单的信号采集工作,定位计算由定位服务端完成。
定位系统的架构体系如图1 所示。服务端主要负责定位计算和响应终端的定位请求。基于负载均衡考虑,响应位置请求的Web 服务器和运行定位计算的定位服务器分离,数据交换方式采用客户端和Web 服务器相同的数据交换方式。客户端依附于具体对象,主要负责采集周边AP 的无线信号强度,并向服务端提交信号特征,服务器使用客户端采集的信号特征进行定位计算,获得移动终端的位置估计。
客户端和服务端通信采用标准的H TTP协议,编程方便,可扩展性好,客户端程序功能可根据需要进行扩充。
图1 定位系统网络结构
图2 为本定位系统的信息交互流程图。移动终端向Web 服务器提交GET 请求,GET 请求中包含了信号强度特征向量,Web 服务器收到请求后,以同样的方式传达给定位服务器,定位服务器查询数据库,并进行相关的定位运算操作,从而得到移动终端的位置估计。
图2 移动终端与服务器间的信息交互3. 系统实现
3.1. 客户端设计
本系统客户端采用Android 系统手机。
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 系统上运行的应用程序一般包含一个或多个Activi ty,主要由活动管理器进行管理,Activity 是Android 系统分配和管理资源的基本单位。每个Activity 都有其对应的生命周期(图4)。
图4 Activi ty 生命周期
onCreate()方法在活动开始时调用,并依次调用onStart()方法和onResum e()方法,Activity 处于运行状态,如有新活动启动,则调用onPause(),活动转入后台;如内存不足,活动进程则被关闭。退出程序则会依次调用onStop()和onDestroy()。
活动管理器对Activity 的管理体现在不同生命周期对以上几个方法的调用上,用户可根据自己的需要重载这几个方法。一般来讲,主程序类继承Activi ty 类,用户的功能代码在重载这些方法中实
现。