基于WiFi的便携式室内定位系统
齐雁飞1, 蒋新华2, 吴 赟1, 蒋学芹1
【摘 要】针对全球定位系统无法满足室内定位的问题,基于Android平台开发了利用WiFi信号特征的便携式室内定位系统.该系统由移动定位终端、服务器和数据库组成,移动定位终端和服务器联合完成定位功能.定位算法采用基于接收信号强度指示(RSSI)的指纹算法,以场景分析的手段估算出移动定位终端的坐标.在线定位阶段,采用欧氏距离平方倒数作为权重系数对K最近邻算法的权重系数进行改进,以减小在线阶段的误差.实验表明,系统便于携带,操作简单,单次定位速度小于3 s,并且系统3 m内的定位精度达到80%以上. 【期刊名称】上海师范大学学报(自然科学版) 【年(卷),期】2017(046)001 【总页数】5
【关键词】室内定位; 安卓平台; 指纹; WiFi
0 引 言
随着通信技术的迅速发展和智能移动设备的广泛应用,人们对室内定位的的需求越来越强烈.目前针对室内定位的研究主要有射频标签(RFID)定位[1]、紫峰(ZigBee)室内定位[2]、蓝牙室内定位、宽带室内定位(UWB)、红外线室内定位,但这些定位技术在便携性和使用成本方面不能满足大众需求.WiFi技术以其部署方便,成本较低,覆盖范围广等优点,成为室内定位技术的研究热点[3-4].因此本文作者借助安卓系统的开源特性,开发了一种基于WiFi的便携式室内定位系统.
1 系统总体设计
基于WiFi的便携式定位系统的总体设计框架如图1所示.系统由移动定位终端
(安卓手机)、服务器(PC)和数据库三部分组成.移动定位终端和服务器采用套接字(Socket)方式通信.在线阶段移动定位端读取各个无线接入点(AP)的接收信号强度指示(RSSI)值并发送给服务器,服务器通过定位匹配算法与离线阶段建立的指纹库相匹配后估算出移动终端位置坐标,并把位置坐标反馈到移动终端,进而在地图上显示位置信息.
2 定位算法实现
由于WiFi信号受传播距离、房间布局、建筑材料、人体吸收、气候等多方面因素的影响,WiFi信号在同一地点不同时间采集到的RSSI值不同[5-6].受这种RSSI值的时变特性和室内环境对RSSI值不可预知的影响,传统的路径损耗模型定位误差较大,而采用指纹法可以有效减小多径的干扰和阴影衰落[7].指纹定位法分为两个阶段:离线阶段和在线阶段.离线阶段主要建立位置指纹库,在线阶段则运用适当的匹配算法比对指纹库中的数据,估算出移动定位终端的位置坐标. 2.1 离线阶段指纹库的建立
离线阶段指纹库的建立将影响在线阶段的定位精度,为此采取如下方式建立指纹库:1) 鉴于采样点增加,离线阶段的工作量线性增加,系统采取间隔1 m的网格建立指纹库;2) 在采样点采集信号特征时,选择RSSI平均值大且取值稳定的AP;3) 基于空间和时间因素对RSSI值的影响,系统在每个参考点的4个方向(东、西、南、北)分别采集50次,然后去奇异值求平均.系统采用安卓手机开发的移动定位终端收集参考点的RSSI来建立指纹库,指纹库主要包含采样点的位置坐标、AP的MAC值和AP的RSSI值. 2.2 在线阶段的匹配算法
目前,基于RSSI指纹的定位算法主要分为确定型和概率型两种.确定型算法原理
简单,计算量小,速度快.概率型算法原理复杂,计算量大,速度慢,但定位精度高.考虑到系统定位的实时性,本系统采用确定型定位算法,来保证定位速度.
K最近邻 (KNN)匹配算法[9]是一种典型的确定型算法.KNN是计算在线阶段移动终端收集到的RSSI样本向量和指纹库中参考位置的RSSI向量的距离,设t时刻在线阶段收集的RSSI向量为fr,指纹库中位于参考点RPj处的RSSI向量为fj,两个向量间的距离为: (1)
式中fj=[f1,j,…,fL,j]T表示参考点RPj处接收来自L个AP的平均信号强度向量.选取K个距离最近的参考点,通过求均值估算移动终端的位置坐标,即: (2)
然而,不同最近邻参考点对测量点位置估算的贡献并不同,因此系统对每个最近邻参考点赋予不同的权重,即加权K最近邻(WKNN) 算法[10].目前,常用欧式距离倒序作为权重系数,尽管可以降低定位误差,但是各个参考点权重系数取决于其他参考点的欧式距离,不能充分利用自身的欧式距离,削弱自身的作用.本系统采用欧式距离平方倒数代替直接欧式距离倒序作为权重系数,即: 且 (3)
式中wi是权重系数,θ是很小的正数,防止分母为0.di是在线阶段测量点信号数据与第i个最近采样点的欧式距离,di2的大小反映权重的变化,di2越小,所占的权重越大.
3 系统开发
3.1 移动定位终端开发
基于WiFi的便携式室内定位系统
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)