張良承,顧留碗,李曉明,母曉敏,楊濤,湯婕
( 滁州學院 地理信息與旅游學院, 安徽 滁州 239000 )
位置信息已經成為現代社會發展依賴的重要信息資源之一[1],位置服務逐漸由室外向室內發展. 當前室外定位已有成熟的技術,如美國的GPS[2]、中國的北斗衛星導航系統(BDS)等[3],已經基本滿足人們的日常需求. 但是室內環境錯綜復雜,鋼筋混凝土墻壁對衛星信號有著巨大的干擾,使得室內定位存在較大的偏差,針對這一情況,其他科研團隊陸續開發出了Wi-Fi[4]、藍牙[5]、超寬帶(UWB)[6]等室內定位系統[7]. 如美國蘋果公司開發了基于無線局域網(WLAN)的iBeacon[8]室內定位系統,香港科技大學提出了基于射頻識別(RFID)的LANDMARC定位系統[9]等,基本實現了在復雜室內環境中的定位,但是上述方法或者單一的接收信號強度指示(RSSI)算法存在成本高昂、計算量相對較大,定位精度較低等問題.
基于上述問題,本文以成本較低的Wi-Fi為信號源,對三角定位算法和位置指紋定位算法進行研究,提出了一種基于RSSI的室內聯合定位算法. 該算法以K近鄰位置指紋匹配算法為基礎,加入三角定位輔助算法,得出小范圍定位參考區域,然后利用K近鄰算法在該參考區域內進行位置指紋匹配,有效地減少了單一RSSI算法需匹配的位置指紋計算數量,最后將計算得到的位置指紋的參考坐標輸出為最終估計位置.
Wi-Fi作為一種電磁波,符合電磁波的傳播規律,其通信距離可達76~122 m[10]. 本文基于RSSI與距離的相關性,利用Wi-Fi的信號強度RSSI作為測距的信息量,將獲取的多個接入點(AP)的RSSI信號強度值代入RSSI定位算法,得到當前的最佳估計位置.
三角定位方法[11]利用幾何學原理,根據定位目標與各個AP之間距離,使用幾何法計算估計位置坐標. 圖1中已知參考點A、B、C的坐標分別為(xa,ya)、(xb,yb)、(xc,yc),測得參考點到待定點D的距離分別為da、db、dc,通過式(1)可得到D點的坐標

圖1 三角定位法示意圖

位置指紋定位法[12]分為離線訓練和在線定位兩個階段,離線訓練階段獲取定位環境中各個AP的網絡名稱、RSSI、MAC地址以及參考位置信息,存儲并構成位置指紋數據庫. 如圖2所示,當用戶進行定位時,終端實時獲取RSSI等AP信息,并與位置指紋庫中的位置指紋進行匹配,將獲取相似度最高的位置作為估算位置.

圖2 位置指紋法示意圖
由于RSSI信號易受室內錯綜復雜的環境影響,尤其是建筑自身結構造成的多徑干擾,從而產生時延擴展造成誤差,故在訓練階段采集位置指紋時,需對信號進行濾波處理,本文采用均值濾波方法對信號進行處理,以減弱RSSI信號由于多徑干擾產生的誤差.如式(2)所示

近鄰算法(NN)[13]是基于RSSI最基本的指紋定位算法,在測試區域內測得p個位置指紋,記作{F1,F2,···,Fp},每個位置指紋與現實位置{T1,T2,···,TP}有一對一的映射關系. 在線定位階段,一個位置指紋樣例記為W,它包含有來自n個AP的RSSI的平均值,即W=(w1,w2,···,wn). 位置指紋數據庫里,每個位置指紋表示成Fi=(r1i,r2i,···,rni),其中,rni表示第i個位置指紋里包含的來自第n個AP的RSSI的平均值. 其計算公式為

最后,使用當前位置的RSSI與位置指紋數據庫中的位置指紋進行匹配,得出與當前真實位置歐氏距離最小的位置指紋,其存儲的真實位置坐標即為定位位置. 其計算公式為

K最近鄰分類算法(KNN)[14]先使用NN計算出目標點與各個參考點的歐式距離,然后篩選出距離目標點最近的K個參考點,用這K個參考點對應的坐標取平均值,以此估算出目標點的位置. 目標點的坐標可由式(5)得出:

式中,(x,y)為K個近鄰參考點中第i個參考點的坐標.
KNN分類算法計算量較大,耗時長,影響定位的效率,但其精度比三角定位算法高;三角定位只需進行簡單計算即可得出定位大致區域,因此計算量較小,但其精度也有所降低.
本文在KNN分類算法的基礎上加入三角定位算法,按離線階段、定位階段實現聯合定位方法[15].在離線階段,采集位置指紋信息的同時,存儲該位置RSSI最強的3個AP信息,生成聯合指紋數據庫;在定位階段,首先獲取待測位置最強的5個Wi-Fi信息,并以其中最強的3個AP進行三角定位,得出估計范圍;然后遍歷聯合指紋數據庫中處于三角定位范圍內的AP點位置指紋記錄,剔除其他無關的位置數據;最后通過KNN分類算法計算得出最優AP點并輸出其位置坐標,作為最終估計位置,圖3為流程圖.

圖3 聯合定位方法流程
需注意的是,本文算法建議在AP數量較多,且信號較穩定的環境中測試,若待測點AP數量少于5個,則定位階段的定位坐標只會顯示在初始位置,并不會進行定位.
文獻[16-18]采用C/S架構進行系統開發,對數據實時傳輸有著一定的影響,導致定位精度偏低. 故系統客戶端基于Android平臺,采用JDK、Android Studio、Android SDK的搭配進行系統開發,數據庫端采用對象關系映射(ORM)框架操作Android自帶的SQLite實現位置指紋數據庫的創建以及定位服務,所有功能都由Java語言實現,圖4為系統架構.

圖4 室內定位系統架構
主要功能包括地圖導入、掃描并采集周圍Wi-Fi信息、與數據庫端的交互、顯示定位結果和導出采集信息[19]. 圖5為AP信息采集頁面,圖6為定位結果界面.

圖6 定位結果
調用Wi-FiManager和Wi-FiInfo函數,封裝Wi-Fi網絡名稱SSID、MAC地址BSSID及RSSI,在采集信息和在線定位界面時載入封裝包. 位置指紋信息采集時,將采集到的Wi-Fi信息進行封裝,發給數據庫端并存儲到位置指紋數據庫中;在線定位階段,用戶通過移動設備獲取當前Wi-Fi位置信息,并傳輸到數據庫端進行處理,經過改進后的聯合定位算法匹配后,得到當前位置信息,返回客戶端顯示,圖7為具體定位流程.

圖7 系統定位流程
為保持室內定位系統的高效性和可靠性,本系統采用輕量級ORM框架操作Android自帶的SQLite軟件數據庫,盡可能減少對移動終端的能耗[20].
數據庫端主要分為位置指紋數據庫和定位服務兩部分. 位置指紋數據庫用于存儲位置指紋信息和接受客戶端傳輸的Wi-Fi位置指紋;定位服務用于接受實時Wi-Fi信息、訪問位置指紋數據庫,并進行算法匹配,獲取當前位置信息并返回客戶端展示,圖8為數據庫端功能結構圖.

圖8 數據庫端功能結構
為檢驗系統的可行性及定位精度,測試人員使用Android智能手機小米6A作為硬件平臺安裝室內定位系統,在滁州學院土木學院樓6樓某12 m×14 m場地進行測試,圖9為實驗場地和位置指紋采集點.

圖9 試驗場地平面圖及位置指紋采集點
在測試場地內,為防止位置指紋數量過于龐大而造成數據冗余,影響定位速率和精度,測試人員手持移動終端每隔1 m采集一個位置指紋,共采集137個位置信息,位置指紋分布如圖9所示.采集完成即存儲到數據庫端的位置指紋數據庫,位置指紋采集點時平面圖位置坐標為(591.416,911.923 8)處掃描到的5個信號AP如表1所示.

表1 掃描到的AP信息
Wi-Fi位置指紋采集完成后,測試人員沿609、607、601、602、608和小會議室的路線進行定位測試,系統每隔2 s進行一次定位,共定位28次,圖10為定位軌跡圖. 由圖10可知,測試位置與真實位置的偏差在1~3 m,說明該系統在此定位環境內具有較好的適應性. 測試結果也無偏離較大的情況,說明該系統也具有較高的穩定性.

圖10 定位軌跡圖
隨后測試人員在相同的位置采集了137個位置指紋,并在相同的位置以單一位置指紋匹配算法進行定位測試,圖11為分別計算兩種定位算法的定位誤差和誤差累積概率,表2中將兩種算法的各類數據進行統計.

圖11 2種算法定位誤差與誤差累積概率

表2 兩種算法定位數據對比
由圖11和表2實驗結果可知,本文基于RSSI的聯合算法優于單一定位算法:定位精度是2σ下的定位精度;單一算法的平均誤差為3.31 m,且誤差在2 m和3 m以內的可信度為0%和21.5%;而聯合算法的平均誤差為1.93 m,且誤差在2 m和3 m以內的可信度為50%和100%. 單一算法的最大誤差為4.58 m,聯合算法的最大誤差為2.86 m. 聯合算法的誤差均在3 m以下,而單一算法的誤差均在5 m以下.
通過以上實驗分析可知,聯合定位算法在定位精度與系統穩定性方面均有改善,誤差累積概率也有較好地提升. 說明聯合定位算法通過三角算法確定參考區域后,可以有效地剔除多余的位置指紋,進而提高定位精度.
基于RSSI聯合算法的室內定位系統利用移動終端即可進行較為精準的室內定位,無需其他設備支持,信號源僅使用Wi-Fi公共基礎設施,在可用性和成本上有著顯著的優勢. 本系統以ORM輕量級框架操作Android自帶的SQLite軟件數據庫,減少移動終端能耗,采用三角定位算法與K近鄰位置指紋匹配算法結合的聯合定位方法實現室內定位,有效地提高了定位精度,對文獻[21]LBS移動應用有一定的參考價值. 為進一步提高室內定位的精度,對文獻[22]提出的Wi-Fi技術與其他技術的融合技術需要進一步研究,以便更好地滿足用戶的使用需求.