顧青濤,孫書良
(1.北京衛星導航中心,北京100094; 2.衛星導航系統與裝備技術國家重點實驗室,河北 石家莊 050081)
根據近幾年的統計,人們的生活時間有80%~90%處于室內環境中,包括在商場、機場、圖書館和大學校園等場所[1],同時70%的移動電話和80%的蜂窩數據傳輸來自于室內[2],這些引起了人們對基于位置服務與位置感知的室內定位的濃厚興趣,例如對建設中的建筑物進行導航與規劃、資產跟蹤,還有一些老年人輔助生活等[3]。
傳感器技術與網絡技術的發展為室內定位方法的拓展與應用提供技術支撐[4]。無線網絡的普及使得基于WiFi技術的室內定位方法得以實施,但WiFi信號多徑效應又限制了其單一方法的定位精度[5];地磁匹配技術作為定位方法已有多年發展歷史[6],但室內磁場環境受建筑特點及環境因素影響,出現磁場分布異常現象[7],單一地磁無法達到室內人員定位的精度需求[8]。
圍繞上述單一定位方式局限性,本文將RSSI與地磁匹配方法融合,利用移動端固有的WiFi模塊與地磁傳感器模塊開展室內組合定位算法的設計與測試。提出將平面位置坐標、最近與次最近RSSI、WiFi數據和地磁數據組成聯合指紋,分別基于Android平臺和javaEE開發移動端并搭建服務器[9],服務器端接收移動端提供的最近和次最近的RSSI后與數據庫信息進行粗匹配,利用求解得到的地磁數據hausdorff距離開展精匹配并向移動端提供室內位置信息[10]。
通過采集WiFi信號和地磁數據,篩選最強與次最強RSSI并結合室內平面坐標組成聯合指紋,通過Android平臺和javaEE開發平臺搭建移動端和服務器端[11]。
由圖1所示的系統框架可看出,室內定位系統由移動端和服務器端構成,移動端包括交互層、業務邏輯層和控制層[12],交互層為用戶提供操作界面并顯示室內平面地圖及定位位置,業務邏輯層負責處理平面坐標數據,控制層完成與服務器的數據通信;服務器端包括控制層、業務邏輯層和數據庫層,數據庫層保存采集的數據,業務邏輯層負責處理RSSI與地磁數據匹配解算等業務邏輯,控制層負責完成與移動端的數據通信。

圖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回調函數中處理服務器返回數據。
利用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數據庫的聯合指紋進行查詢并反饋結果。
為獲取聯合指紋庫中的最近與次最近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}]
基于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軸垂直當地水平面并指向天。
通過分析多種地磁匹配技術的優缺點與適用性[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)
基于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后返回給移動端,完成對移動端用戶位置信息請求的答復。
基于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,能夠滿足個人室內定位需求。
基于Android和javaEE平臺設計并實現RSSI與地磁融合的室內定位系統。通過繪制實驗室平面圖,事先利用移動端采集WiFi與地磁數據并上傳至服務器端后建立數據匹配指紋庫,通過實時定位過程中移動端采集的人員運動信息上傳服務器后,與建立的數據庫開展粗匹配和精確匹配并獲取最佳位置。設計并實現系統對移動端與服務器端模塊后搭建測試環境,實驗結果表明系統定位誤差控制在3 m內,能夠滿足一般室內定位精度要求。相對于其他單一室內定位技術而言,該方法融合了室內RSSI和地磁數據定位方法的優勢且操作方便、成本低廉且可靠性高,適用于智能手機的室內定位服務。