基于WiFi和地磁组合的网络化定位系统设计
2018-07-16顾青涛孙书良
顾青涛,孙书良
(1.北京卫星导航中心,北京100094; 2.卫星导航系统与装备技术国家重点实验室,河北 石家庄 050081)
0 引言
根据近几年的统计,人们的生活时间有80%~90%处于室内环境中,包括在商场、机场、图书馆和大学校园等场所[1],同时70%的移动电话和80%的蜂窝数据传输来自于室内[2],这些引起了人们对基于位置服务与位置感知的室内定位的浓厚兴趣,例如对建设中的建筑物进行导航与规划、资产跟踪,还有一些老年人辅助生活等[3]。
传感器技术与网络技术的发展为室内定位方法的拓展与应用提供技术支撑[4]。无线网络的普及使得基于WiFi技术的室内定位方法得以实施,但WiFi信号多径效应又限制了其单一方法的定位精度[5];地磁匹配技术作为定位方法已有多年发展历史[6],但室内磁场环境受建筑特点及环境因素影响,出现磁场分布异常现象[7],单一地磁无法达到室内人员定位的精度需求[8]。
围绕上述单一定位方式局限性,本文将RSSI与地磁匹配方法融合,利用移动端固有的WiFi模块与地磁传感器模块开展室内组合定位算法的设计与测试。提出将平面位置坐标、最近与次最近RSSI、WiFi数据和地磁数据组成联合指纹,分别基于Android平台和javaEE开发移动端并搭建服务器[9],服务器端接收移动端提供的最近和次最近的RSSI后与数据库信息进行粗匹配,利用求解得到的地磁数据hausdorff距离开展精匹配并向移动端提供室内位置信息[10]。
1 定位系统整体架构
通过采集WiFi信号和地磁数据,筛选最强与次最强RSSI并结合室内平面坐标组成联合指纹,通过Android平台和javaEE开发平台搭建移动端和服务器端[11]。
由图1所示的系统框架可看出,室内定位系统由移动端和服务器端构成,移动端包括交互层、业务逻辑层和控制层[12],交互层为用户提供操作界面并显示室内平面地图及定位位置,业务逻辑层负责处理平面坐标数据,控制层完成与服务器的数据通信;服务器端包括控制层、业务逻辑层和数据库层,数据库层保存采集的数据,业务逻辑层负责处理RSSI与地磁数据匹配解算等业务逻辑,控制层负责完成与移动端的数据通信。
图1 系统框架
1.1 移动端设计
1.1.1交互层
自定义MapImageView:基于安卓开发平台,继承ImageView控件,自定义加载图片控件MapImageView,该控件重写屏幕触摸事件onTouch并添加手势探测器GestureDetector,处理图片移动和缩放,方便用户采集数据时精确选择图上位置点。通过画布Canvas的drawBitmap函数,在图中绘制标志点,为自定义控件MapImageView添加addPoint函数与drawPosition函数,用于绘制图上关键点和定位位置。
UI界面实现:通过主界面布局文件添加竖向的LinearLayout线性布局,该布局中添加MapImageView和包含功能按钮的2个横向LinearLayout线性布局组成主界面UI[13]。在主界面MainActivity中注册功能按钮点击监听器OnClickListener,用于响应功能按钮的点击事件,处理用户的操作。
1.1.2业务逻辑层
为组成匹配需要的联合指纹库,移动端业务逻辑层处理采集路径的关键点、周期性采集的地磁数据、WiFi数据并分别保存到List集合中。用户通过点击下一段功能按钮,依据采集数据量,通过平均分配平面坐标位置x、y,结合每组的WiFi与地磁数据组成联合指纹,利用谷歌的Gson插件将联合指纹转换成json数据传递到控制层[14]。定位模式下获取控制层从服务器得到的坐标数据,根据当前图像的缩放比例得到图上距离,传递到交互层。
1.1.3控制层
利用http协议,移动端控制层将采集的数据传输到服务器,系统处于定位模式时,将采集的数据传递给服务器后获取最佳匹配位置并传递给业务逻辑层。本文提出采用okHttp框架,利用okHttpClient的newCall方法传递Request参数,Request参数中包含封装采集数据的RequestBody与服务器接口信息,并在Callback回调函数中处理服务器返回数据。
1.2 服务器设计
利用Spring、SpringMVC和Mabatis框架(SSM框架)搭建服务器开发环境。
1.2.1控制层
利用注解@Controller添加控制器IndoorController,利用注解@RequestMapping为控制器IndoorController添加saveindoorData、getPosition两个请求映射。通过服务器端控制层接收移动端的服务请求后,利用请求映射参数HttpServerletRequest获取数据并传递到业务逻辑层,利用HttpServerletRespose将业务逻辑层的处理结果返回到移动端。
1.2.2业务逻辑层
通过接收控制层saveindoorData请求映射中的数据,利用数据库层的Dao对象将采集的联合指纹保存到数据库。定位模式时,接收getPosition请求映射的数据,利用请求数据中的最近BSSID、次最近BSSID筛选数据库数据,解算筛选后的地磁数据的hausdorff距离进行精匹配获取坐标数据并返回。
1.2.3数据库层
依据SQL语句[15],实现通过最近与次最近BSSID、模糊查询等操作函数对保存在mysql数据库的联合指纹进行查询并反馈结果。
2 基于移动端的传感器信息获取
2.1 WiFi信息采集
为获取联合指纹库中的最近与次最近RSSI和WiFi数据,利用Android系统固有的WiFi模块采集WiFi信号,基于WiFi信号强度与传输距离成正比的特性,提出利用WiFi信号强度对采集的WiFi数据进行排序。以走廊两侧WiFi信号为采集目标,开启安卓系统WiFi信号接收服务,采集WiFi信号、筛选WiFi的AP地址BSSID、网络名称SSID、信号强度level过程如下:
① 通过getSystemService(Context.WIFI_ SERVICE)获取定位管理器WiFiManager,调用WiFiManager的setWiFiEnabled(true)方法开启WiFi;
② 利用WiFiManager的startScan()方法扫描WiFi信号;
③ 调用WiFiManager的getScanResults()方法得到扫描结果List
④ 通过ScanResult变量得到AP的BSSID、SSID和level的值,结合平面坐标并保存为:
X坐标:Xn;Y坐标:Yn;Ap数据:
[{“BSSID”:”f0:b4:29:52:d8:73”,”SSID”:”RS101”,”level”:-47},{“BSSID”:”f2:b4:29:1d:41:c6”,”SSID”:”RS103Visit”,”level”:-53},{“BSSID”:”f0:b4:29:1d:41:c4”,”SSID”:”RS103”,”level”:-54}]
2.2 基于磁传感器的信息采集
基于Android手机终端固有的地磁传感器在不同时刻条件下采集室内地磁数据如图2所示。
图2 地磁场信息比对
图2(a)是2次采集数据的三维分布;图2(b)、图2(c)和图2(d)分别是x、y、z轴的地磁数据分布特征比对,通过分析地磁数据特征分布可看出,不同时刻的地磁场分布特征稳定不变,保证利用地磁数据进行室内定位方法的可行性。基于Android平台获取地磁数据的过程如下:
① 调用getSystemService(Context.SENSOR_ SERVICE)方法获取传感器管理器SensorManeger,SensorManeger管理安卓平台传感器的操作;
② 调用SensorManeger的getDefaltSensor(Sensor.TYPE_MAGNETIC_FIELD)获取地磁传感器;
③ 调用SensorManeger的registerListener()方法注册地磁数据监听器SensorEventLitener,地磁数据变化时,系统回调SensorEventLitener的onSensorChanged()函数;
④ 在onSensorChanged(SensorEvent event)函数中event的values变量中获取地磁数据。
为避免数据采集过程中因手机摇摆引起的误差,设计将手机坐标系下获取的地磁数据转换到导航坐标系。其中,手机坐标系定义为x轴水平指向右、y轴垂直向上、z轴是指向屏幕正面向外[16],如图3所示。
图3 手机坐标系
SensorManeger提供getRotationMatrix()方法用于获取设备旋转矩阵,通过式(1)完成地磁数据到导航坐标系的转换。
(1)
式中,magx、magy、magz分别为手机端采集的三轴地磁数据;magx′magy′magz′为地磁数据在导航坐标系的表现形式;R为手机坐标系相对导航坐标系的旋转矩阵。getRotationMatrix()定义的导航坐标系如图4所示[17]。
图4 导航坐标系
图4中,x轴切向地面设备当前位置指向东、y轴切向地面设备当前位置指向磁北极、z轴垂直当地水平面并指向天。
3 融合定位算法在服务器端的实现
3.1 Hausdorff匹配算法
通过分析多种地磁匹配技术的优缺点与适用性[18],确定以Hausdorff距离为度量的地磁数据匹配方法,该方法不仅考虑2个目标之间的距离关系还涉及目标之间的形状差异[19]。针对Hausdorff距离用于测量2个点集的匹配程度并且不强调配对点,具有很强的抗干扰能力和容错能力。本文提出在建立地磁数据库时以每3 s保存一次地磁数据并组成点集M,在实际定位过程中每3 s采集一次地磁数据组成点集N(如式(2))。通过计算点集M、N的Hausdorff距离,以距离越小匹配程度越高为判断依据。
(2)
M、N两个点集的Hausdorff距离计算过程为:
H(M,N)=max(h(M,N),h(N,M)),
(3)
(4)
(5)
式中,‖·‖是定义在集合M和N的范数,以两点间几何最短距离为判定准则得到地磁数据范数计算公式:
(6)
点集M和N之间的Hausdorff距离为M点集所有点到N点集所有点最小距离的最大值maxM与N点集所有点到M点集所有点最小距离的最大值maxN中的最大值,即
H(M,N)=max(maxM,maxN)。
(7)
3.2 RSSI与地磁融合
基于RSSI与地磁定位原理的特征[20],设计以当前位置所有WiFi数据地址BSSID、信号强度level、网络名称SSID、最近BSSID、次最近BSSID、当前位置3 s内所有的地磁数据为联合指纹,如表1所示。
表1联合指纹数据
类别数据id233x694y199firstBSSID80:89:17:c4:66:1esecondBSSID14:e6:e4:2e:1c:caWiFiData[{“BSSID”:”80:89:17:c4:66:1e”,”SSID”:”108”,”level”:-47},{“BSSID”:”14:e6:e4:2e:1c:ca”,”SSID”:”GIS105”,”level”:-53},{“BSSID”:”14:e6:e4:2e:1c:ca”,”SSID”:”RS106”,”level”:-64},{“BSSID”:”10:c6:e4:2e:12:3a”,”SSID”:”免WiFi”,”level”:-68}]magData[{“mag”:[27.778625,-9.1796875,-24.119568]},{“mag”:[28.019714,-9.47876,-23.939415]},{“mag”:[28.318787,-9.599304,-23.399353]},{“mag”:[28.799438,-9.779358,-23.35684]}]
通过以3 s为周期不断循环采集数据,系统处于定位模式时的移动端向服务器请求匹配服务,服务器首先根据采集的最近和次最近BSSID与筛选数据库数据进行粗匹配;其次,以Hausdorff距离为度量对地磁数据进行精匹配并得到最佳匹配点坐标x、y后返回给移动端,完成对移动端用户位置信息请求的答复。
4 实验结果及分析
基于RSSI与地磁融合定位原理,搭建移动端和服务器端开发环境,根据系统需求设计的移动端UI界面主要由一个图片控件ImageView和功能按钮组成(路径、开始、下一段、停止、定位、清除、下一个点)。为验证系统稳定性与精度,本文搭建了实验楼测试环境,通过量边绘制室内实验建筑平面图并获取平面位置坐标,如图5所示。
图5 室内平面图
实验测试过程如下:
① 拖动MapImageView控件加载的室内平面图,以位于MapImageView中央位置不变的小旗子为标志点,通过拖动平面图并选取小旗对应的位置点为采集路径的关键点。基于Canvas的drawLine、drawBitmap函数绘制实验数据采集路线A—B—C—D—C—B—A和关键点,如图6所示。
图6 选择路径
② 手机平放胸前,在实验轨迹起始点A处点击开始按钮采集数据,依照计划路线匀速行走,到达B点时点击下一段,开始下一段数据的采集,依次采集每一路线段,最终返回A点结束采集。
③ 点击定位按钮开启定位模式,移动端控制层将采集的实时数据传递到服务器端进行匹配并获取待匹配位置点的坐标x、y,利用Canvas的drawBitmap函数绘制到当前平面图上。
图7 实验效果
如图7所示,通过采集实验楼数据搭建指纹库,选择定位模式后分别以图6中的A为起始点,途径B点、实验楼大厅中央,走到F室的前门后静止。可看出采用定位模式绘制的图上位置与实际相符,通过实际测量得到系统相对定位误差优于3 m,能够满足个人室内定位需求。
5 结束语
基于Android和javaEE平台设计并实现RSSI与地磁融合的室内定位系统。通过绘制实验室平面图,事先利用移动端采集WiFi与地磁数据并上传至服务器端后建立数据匹配指纹库,通过实时定位过程中移动端采集的人员运动信息上传服务器后,与建立的数据库开展粗匹配和精确匹配并获取最佳位置。设计并实现系统对移动端与服务器端模块后搭建测试环境,实验结果表明系统定位误差控制在3 m内,能够满足一般室内定位精度要求。相对于其他单一室内定位技术而言,该方法融合了室内RSSI和地磁数据定位方法的优势且操作方便、成本低廉且可靠性高,适用于智能手机的室内定位服务。