1. 引言
目前全球定位系統( GPS , GlobalPositioning System)是獲取室外環境位置信息的最常用方式。近年來,隨著無線移動通信技術的快速發展,GPS 和蜂窩網絡相結合的A-GPS(Assisted Global Positioning System)定位方式在緊急救援和各種基于位置服務(LBS,Location-Based Services)中逐漸得到了應用。但由于衛星信號容易受到各種障礙物遮擋,GPS/APGS 等衛星定位技術并不適用于室內或高樓林立的場合,目前無線室內定位技術迅速發展,已成為GPS 的有力補充。
一般來講,使用無線信號強度獲取目標位置信息的過程,就是建立無線信號強度和位置信息穩定映射關系的過程。現有室內無線定位系統主要采用紅外、超聲波、藍牙、WiFi(Wireless Fidelity)、RFID(Radio FrequencyIdentification)等短距離無線技術。其中基于WiFi 網絡的無線定位技術由于部署廣泛且低成本較低,因此備受關注。其中由微軟開發的RADAR 系統是最早的基于WiFi 網絡的定位系統。它采用射頻指紋匹配方法,從指紋庫中查找最接近的K 個鄰居,取它們坐標的平均作為坐標估計。
本文同樣基于WiFi 網絡,設計和實現了一種無線室內定位系統,但與上述定位方法不同,本文采用了基于權值選擇的定位算法,在一定程度上減少了RSS.信號隨機變化引起的定位誤差,實驗結果表明,該系統可獲得較好的定位精度(4 米)。
2. 系統設計
本系統可為移動終端客戶在展館、商場、校園等應用場景提供定位服務。鑒于移動終端受到計算能力、存儲容量和電池電量等諸多限制,所以僅完成簡單的信號采集工作,定位計算由定位服務端完成。
定位系統的架構體系如圖1 所示。服務端主要負責定位計算和響應終端的定位請求。基于負載均衡考慮,響應位置請求的Web 服務器和運行定位計算的定位服務器分離,數據交換方式采用客戶端和Web 服務器相同的數據交換方式。客戶端依附于具體對象,主要負責采集周邊AP 的無線信號強度,并向服務端提交信號特征,服務器使用客戶端采集的信號特征進行定位計算,獲得移動終端的位置估計。
客戶端和服務端通信采用標準的HTTP協議,編程方便,可擴展性好,客戶端程序功能可根據需要進行擴充。
?
圖1 定位系統網絡結構
圖2 為本定位系統的信息交互流程圖。移動終端向Web 服務器提交GET 請求,GET 請求中包含了信號強度特征向量,Web 服務器收到請求后,以同樣的方式傳達給定位服務器,定位服務器查詢數據庫,并進行相關的定位運算操作,從而得到移動終端的位置估計。
?
圖2 移動終端與服務器間的信息交互3. 系統實現
3.1. 客戶端設計
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 系統上運行的應用程序一般包含一個或多個Activity,主要由活動管理器進行管理,Activity 是Android 系統分配和管理資源的基本單位。每個Activity 都有其對應的生命周期(圖4)。
?
圖4 Activity 生命周期
onCreate()方法在活動開始時調用,并依次調用onStart()方法和onResume()方法,Activity 處于運行狀態,如有新活動啟動,則調用onPause(),活動轉入后臺;如內存不足,活動進程則被關閉。退出程序則會依次調用onStop()和onDestroy()。
活動管理器對Activity 的管理體現在不同生命周期對以上幾個方法的調用上,用戶可根據自己的需要重載這幾個方法。一般來講,主程序類繼承Activity 類,用戶的功能代碼在重載這些方法中實現。
3.1.3. 獲取周邊AP 信號強度
本文采用基于射頻指紋的定位方法,移動終端需要獲得周圍AP 的RSSI 指紋特征,Android 系統提供的接口可以很方便地實現這一功能。
參見圖5 示例代碼片段。首先建立包含響應掃描結果的接收器(reciever) 并重載onReceive()方法,此方法即為收到WiFi 信號的回調函數,用戶自定義功能在此實現;再通過registerReceiver()方法將receiver 向Android 系統進行注冊,getSystemService()方法用于獲得操作WiFi 設備的句柄;最后用startScan()方法啟動掃描,當獲得掃描結果后,系統會觸發注冊的回調函數,完成用戶代碼功能。
?
圖5 掃描示例代碼
實驗結果表明,從給出掃描指令,至接收到掃描結果,耗時約400-500ms,考慮到后臺服務器算法運算及網絡通信開銷,定位過程耗時將超過500ms.
3.1.4. 程序流程
從程序的功能來看,客戶端需完成3 個功能:定期掃描并獲得周圍AP 的信號強度指紋特征,向服務器提交指紋特征信息,得到定位結果后更新界面顯示。程序流程如圖6 所示。
首先程序初始化并建立更新回調函數,獲得WiFi 服務句柄后注冊此回調函數,最后啟動掃描進程周期掃描,直至系統結束程序。
其中,回調函數首先獲取掃描結果,并格式化為字符串,然后通過GET 請求提交給服務端,獲得定位結果后再更新顯示界面。
?
圖6 程序流程圖
3.2. 服務端軟件設計
3.2.1. Web 服務器
Web 服務器用于對外通信,接收外界的請求,并返回相應的位置信息。
Web 服務器運行Apache Tomcat 6.0.20,響應網絡的定位請求,相應的軟件設置參數為:在%TOMCAT_HOME%webapps 目錄下建立目錄:ExServletWEB-INF,建立web.xml描述文件和classes 文件夾,web.xml 文件是描述文件,classes 存放后臺處理的類文件。
web.xml 中定義了外部引用此服務的名字和對應的類文件,內容片段見圖7。
?
圖7 web 服務器web.xml 代碼片段
3.2.2. 定位服務器
定位服務器用于運行算法,硬件配置參數為,CPU:Intel Core2 Duo E7500 2.93GHz,內存:2G,網卡:Marvell Yukon 88E8057 PCI-EGigabit Ethernet Controller.軟件配置參數為,操作系統:Windows XP Professional SP3,Web服務器:Apache Tomcat 6.0.20.相應的軟件配置參數與web 服務器類似,web.xml 中代碼片段見圖8.
?
圖8 定位服務器web.xml 代碼片段
3.3. 客戶端與服務端通信
客戶端與服務端都接入Internet,通過標準的HTTP 協議通信,簡化設計的同時,也為以后Web 方式的應用留下了設計空間。
服務端Servlet 用于響應客戶端的請求,客戶端只需在GET 請求中提交指紋信息即可獲得定位結果。圖9 列出了客戶端從定位服務器中獲取位置信息的Java 示例代碼。其中url包含了服務器的IP 地址和RSSI 指紋信息,getConnection()方法是向服務器發出GET 請求,服務器將返回位置信息,獲得輸入流后讀出位置信息,并更新界面顯示即完成整個通信過程。由于使用HTTP 協議,實現方法簡單,適用于多種編程語言。
?
圖9 客戶端獲取位置信息的通信示例代碼
4. 定位算法
由于室內環境復雜,WiFi 無線信號具有較強的時變特性圖10.無線信號傳播衰減模型難以很好的表征距離與信號強度間的映射關系,本文采用基于射頻指紋匹配定位方法,它具有較好的定位魯棒性。
?
圖10 信號強度的時變特性
指紋匹配方式定位算法建立在實驗數據基礎上,它主要包括離線訓練和在線定位兩個階段,其中離線訓練階段的任務是建立射頻信號強度向量和客戶端位置間的一一對應關系,形成一個指紋庫(radio map),定位階段則使用實時采集的信號強度向量去匹配訓練階段構建的指紋庫,從而獲得目標的位置估計。
現有的基于射頻指紋匹配定位方法主要包括確定型和概率型兩種。其中確定型定位算法一般在指紋庫中選擇與實時采集的射頻指紋距離最小的幾個點的質心作為目標的位置估計。確定型定位算法的計算效率較高,但精度較低。概率型定位算法一般采用貝葉斯估計理論,通過不同的似然函數,如基于核函數的似然函數,計算目標位置的后驗概率,并取后驗概率最大的位置點作為目標的最終位置估計。概率型定位算法具有較高的定位精度和定位魯棒性,但計算量相對較大。
本文采用快速選擇的定位算法,訓練階段指紋特征采用RSSI 均值,定位階段采用逐次累加的RSSI 均值與指紋庫匹配的方法,從而大大降低了運算的復雜度。
4.1. 算法描述
指紋特征采用每個AP 的RSSI 均值,即:
?
也就是,訓練階段對同一位置點采集的每個AP 的多次數據取平均,定位階段也是如此,區別在于訓練階段采集數據多,以便得到盡量多的信息,定位階段采集的數據少,減少定位延時,一定程度上提高了實時性。
指紋匹配采用快速選擇的方式。偽碼如下:
?
對每個掃描到的AP 的RSSI 值,設定一個選擇區間[RSSI-σ,RSSI+σ],σ為多次實驗的經驗值,在指紋庫中查找滿足此區間范圍的位置點,若有n 個位置點落在此區間范圍,則這些位置點分別取權值為1/n,其他的位置點則取權值為0;對所有AP 做如上處理后,選出權值最大的位置點為估計位置。如有多個位置點權值一樣,則比較信號強度距離,取最小者。
4.2. 算法分析
本文的算法是建立在RSSI 統計特性相對穩定的基礎上,從圖11 中可以看出,RSSI 值的直方圖分布與正態分布曲線近似,因此均值在一定程度上代表了RSSI 特征。這也避免了單次掃描的信號強度中某個AP 的RSSI 不穩定造成的定位結果偏差。
?
圖11 RSSI 的統計特性
時間復雜度分析:一次掃描有m 個AP,前期訓練階段有n 個位置點,則要進行m 次選擇,每次選擇遍歷n 個位置點,時間復雜度為O(m*n),遇到權值一致的情況,要進行二次選擇,最壞情況再比較n 次,時間復雜度為O(n),所以總的時間復雜度為O(m*n)。
5. 實驗
5.1. 實驗過程
實驗在計算所6 層進行,見圖12,在南北兩側走廊總共采集了24 個位置點,距離約4米,加上在645 房間,總共25 個位置點的數據。掃描周期1s,掃描次數120 次。采集數據耗時約1 小時。
?
圖12 實驗環境
本實驗主要為驗證定位準確性,所以定位時采用多次掃描的均值作為信號特征。共選取了6 個位置點作為實驗的位置點。測試次數約為50 次,掃描周期為2s,運行界面見圖13.
?
圖13 手機終端顯示
5.2. 實驗結果
各實驗位置點的結果見圖14.各個隨機測試位置點的定位準確率都較高。
?
圖14 各實驗位置點定位結果
6. 總結
本文基于Android 智能手機平臺,設計并實現了一種基于WiFi 信號的移動終端定位系統,并提出了一種基于權值選擇的定位算法,一定程度上克服RSSI 信號隨機擾動帶來的定位誤差,經過實際環境的測試,多次定位實驗的精度在4 米左右,適當調整AP 的布置可以進一步定位精度。本系統可方便地部署到展館、校園等實際場景中。
評論
查看更多