徐鼎 +孟坤+李尚同



摘要: 為了在GPS定位系統無法定位的地方(如室內、地下通道、地鐵站等處)進行定位跟蹤,提出了一種基于Android智能手機的慣性導航算法,通過對安卓手機傳感器數據的采集,實現行人軌跡跟蹤,并實時顯示在手機屏幕上。在傳統慣性導航算法基礎上,該算法利用人行走過程中的周期性運動特點,對傳感器數據進行修正,精確度比傳統慣性導航算法平均提高5%。該算法不受時間、地域限制,用戶只需保持手機的正確姿態,正常行走即可獲得較為精準的數據,滿足了脫離GPS還能實現室內導航的需求。關鍵詞: Android;慣性導航;傳感器DOI: 10.11907/rjdk.162681 中圖分類號: TP312 文獻標識碼: A
0引言 現有的手機導航系統大多依賴GPS系統,目前民用GPS系統精度已經達到5m左右。但是GPS系統使用條件要求較高,必須保證在空曠的地方才具有較高精度,在室內或地下等地方無用武之地。 為了在GPS無法應用的地方實現導航功能,本文提出一種基于Android智能手機傳感器的慣性導航算法,實現在手機屏幕上實時跟蹤運動軌跡的慣性導航系統。
1慣性導航 慣性導航系統(INS,Inertial Navigation System)也稱作慣性參考系統,是一種不依賴于外部信息、也不向外部輻射能量(如無線電導航)的自主式導航系統。其工作環境不僅包括空中、地面,還可以在水下。慣性導航的基本原理是以牛頓力學定律為基礎,通過測量載體在慣性參考系的加速度,將它對時間進行積分,變換到導航坐標系中,得到在導航坐標系中的速度、偏航角和位置等信息。 慣性導航系統屬于推算導航方式,即從一已知點的位置根據連續測得的運動體航向角和速度推算出下一點位置[1]。慣性導航系統中的陀螺儀用來形成一個導航坐標系,使加速度計的測量軸穩定在坐標系中,并給出航向和姿態角;加速度計用來測量運動體的加速度,經過對時間的一次積分得到速度,速度再經過對時間的一次積分即可得到位移[2]。
2Android傳感器 大多數Android設備中都內置有各類傳感器,用來測量運動、方向和各種環境條件。這些傳感器能夠提供非常精確的原始數據,刻畫手機的各種狀態,用于監控設備的三維運動,或者設備周圍的環境變化等等。 Android平臺支持下列3類傳感器:①位移傳感器。沿3個軸線測量加速度和旋轉,包含加速度傳感器、重力傳感器、陀螺儀傳感器和矢量傳感器;②環境傳感器。測量各種環境參數,例如周圍的空氣溫度、壓力、光線和濕度,包含氣壓傳感器、光線傳感器和溫度傳感器;③位置傳感器。測量設備的物理位置包含方向傳感器和磁力傳感器。 開發過程中,通過使用Android傳感器提供的框架獲取原始數據。傳感器框架提供了一些類和接口,幫助開發者完成各種與傳感器有關的任務。
3加速度傳感器和方向傳感器 本文提出的算法依賴于上述傳感器中的加速度傳感器和方向傳感器實現。3.1加速度傳感器 加速度傳感器會返回X軸、Y軸和Z軸的加速度值,此處的三軸指傳感器本身表示方向的坐標軸,而不是手機位置的空間直角坐標軸。在Android系統中,用圖1所示的3條軸線來描述加速度方向。 當手機垂直放在桌面上時,X軸正向為沿著屏幕向右的方向,Y軸正向為沿著屏幕向上的方向,Z軸正向為與屏幕平面垂直向屏幕外的方向。 各軸的數值包含引力影響,單位是m/s2;將手機屏幕朝上平放在桌面上時,X軸默認為0,Y軸默認0,Z軸默認9.81;將手機屏幕朝下平放在桌面上時,X軸默認為0,Y軸默認0,Z軸默認為-9.81;將手機沿屏幕左側的邊為軸向左翻轉時,X軸為正值;將手機沿屏幕右側的邊為軸向右翻轉時,X軸為負值;將手機沿屏幕上側的邊為軸向上翻轉時,Y軸為負值;將手機沿屏幕下側的邊為軸向下翻轉時,Y軸為正值。
3.2方向傳感器 安卓方向傳感器是通過軟件模擬的基于加速度傳感器和地磁傳感器的虛擬傳感器。最底層數據來源仍是硬件傳感器。方向傳感器也有三條軸,返回的值為手機不同狀態的角度值。 傳感器本身三軸的數據含義說明:將手機平放在桌面上,帶圈的一端視為手機上邊,將手機視作一個平面矩形。以該矩形的中心為O點,手機縱向平行于側邊且過中點的直線為X軸,橫向平行于上下邊且過O點的直線為Y軸,垂直于手機屏幕且過O點的直線為Z軸,建立空間直角坐標系如圖2所示(此處的三軸為空間直角坐標軸,而不是傳感器自身的三軸)。
方向傳感器中的X:規定坐標軸中的X正半軸為北。手機頭部指向OF方向,此時X的值為0;如果手機頭部指向OG方向,此時X值為90;指向OH方向,X值為180;指向OE,X值為270。 方向傳感器中的Y:將手機沿著BC軸慢慢向上抬起,即以手機上邊為軸翻轉,直到AD落到BC右邊并落在XOY平面上,這期間Y的值將在0~180之間變動;如果手機沿著AD軸慢慢翻轉,直到BC落到AD左邊并且落在XOY平面上,Y的值將在0~-180之間變動。 傳感器中的Z:將手機沿AB軸向上翻轉,直到CD落到AB右邊并落在XOY平面上,Z值將在0~180之間變動;如果手機沿著CD軸翻轉,直到AB跑到CD左邊并且落在XOY平面上,Z值將在0~-180之間變動。
4Android端顯示軌跡算法 Android智能手機自帶的傳感器為實現慣性導航提供了必要的硬件支持。根據慣性傳感器收集的數據進行步態檢測、動態步長估計以及航向確定,并在步態檢測過程中采用多條件約束的波峰—波谷檢測方法減少偽步態識別[3]。據此,本文提出在Android手機端實現慣性導航算法。該算法包含3個部分:運動距離確定算法、運動角度確定算法、屏幕顯示軌跡算法。 在一次運動過程中,將該過程分割為多個相等的較小單位時間,分別得出每個單位時間內的運動距離和運動角度,并在每個單位時間結束時實時更新運動軌跡點,即可在屏幕上繪制出整個運動過程的軌跡。
4.1運動距離確定算法 假設手機持有者水平手持手機運動,手機上邊頭部方向與人面對方向一致。手機持有者運動前先輸入步長值,然后開始運動。運動過程中,首先通過傳感器獲得傳感器3個軸的加速度大小和方向。由于手機持有者每前進一步都會使得加速度傳感器的Z軸數據出現一次波動,每次波動情況非常接近,從而在整個運動過程中可以獲得一條運動的正弦曲線軌跡。然后對運動過程進行峰值檢測,與上一次記錄的加速度大小進行比較,得到加速度大小的變化量,從而判斷目前加速度的方向,并和上一次記錄的加速度方向進行比較,如果方向相反,則表示剛過峰值,此時執行計步邏輯開始計步,反之則舍棄數據。 在計步邏輯中,以一個峰值出現的周期為計步時間,在該時間內,將獲取到的加速度變化量進行二次積分,得出該時間內的位移。如果數據十分精確,這段位移應當與持有者的步長相差無幾,但實際情況下,手機加速度傳感器的采樣頻率不高,加上人類動作復雜,造成加速度傳感器的讀數誤差較大[4]。可在峰值檢測時加上閾值頻率判斷,過濾干擾數據。另一方面,將計算出的位移與持有者步長進行比較,如果差距較大,則取初始輸入的步長值為實際步長值,如果差距較小,則取兩者的平均值為實際步長值。最后將獲得的步數乘以實際步長值即可得出運動距離。
4.2運動方向確定算法 假設手機持有者在運動中水平手持手機,手機上邊頭部方向與人面對方向一致。手機持有者在轉彎時,通過讀取方向傳感器的X值獲得當前手機朝向。由于手機頭部朝向與人面對方向一致,因此該值即為手機持有者的運動偏轉角度。 轉向過程中手機的側面會不可避免地出現少許抬起,導致其它軸出現數據波動,因此應當舍棄這些波動數據。 4.3屏幕顯示軌跡算法 通過以上兩種辦法分別獲得運動過程中的距離與角度,同步調用安卓程序接口,在手機屏幕上繪制相關軌跡。 當手機持有者直線行走時,根據檢測到的峰值,將每個峰值在屏幕上繪制一條線段,該線段的長度與初始行走時輸入的步長形成一個固定比例,后續每次峰值出現,就按照該比例繪制一條線段,以每次峰值出現到下一次峰值出現為一個時間戳,重復繪制線段。 當手機持有者開始轉向時,方向傳感器便能讀取到X軸有較大變化,當方向傳感器的X軸穩定到一定程度不再出現較大變化時,轉向結束,應當立即讀取方向傳感器的角度值,并在屏幕上根據方向傳感器返回的角度立即朝新的方向繪制線段。運動結束時屏幕上即可顯示運動軌跡。 將事先制作好的地圖放在屏幕上作為背景圖片,即可顯示出地圖軌跡。
5算法測試 為驗證算法可行性,筆者根據該算法開發出了APP雛形,經過多次測試后,獲得了相關數據。
5.1測試環境 測試環境地圖如圖3所示。其中橙色星標部分為運動起點。初始狀態,手機持有者打開程序,保持手機平放在手掌中,面部朝向與手機頭部朝向保持一致,輸入步長為0.6m,從起點開始正常行走。
5.2測試結果 行走過程測試結束后,手機上繪制的路徑如圖4所示。 對測試過程進行數據取樣,摘取其中一段直線路徑的9組數據如表1所示。表1數據顯示了程序計算的距離和實際距離,將實際距離與計算距離的差值絕對值認為是一組數據的誤差,則10組數據的平均誤差為0.18m。
6結語 基于Android手機傳感器的慣性導航算法,利用Android手機的加速度傳感器和方向傳感器分別獲取運動時的加速度和運動角度,通過加速度的變化規律推測步數,利用加速度變化量計算步長,并通過與預設步長比較進行步長修正,再根據角度變化判斷運動轉向,從而繪制出運動軌跡,算法切實可行,可精確到0.2m以內,足以滿足室內導航需求。
參考文獻: [1] 王凡.智能車輛中基于GPS和陀螺儀的導航與定位[D].北京:北京工業大學,2013.
[2]賈振興.導彈飛行過程仿真軟件設計[D].北京:北京郵電大學,2011.
[3]王旭鳳.基于慣性導航的室內定位系統的研究[D].長春:吉林大學,2015.
[4]王鄭合.基于智能手機的慣性導航軌跡生成算法[J].工礦自動化,2015,41(5):8790.
[5]蘇亞光,吳亞峰,索依娜.Android平臺下傳感器技術開發計步器應用[J].電腦編程技巧與維護,2010(23):4046.
[6]段丙濤.基于慣性傳感器的機器人運動軌跡研究及實現[D].成都:電子科技大學,2012.
[7]齊保振.基于運動傳感的個人導航系統及算法研究[D].杭州:浙江大學,2013.
[8]尹博.基于GPS和加速度傳感器的運動類智能終端應用軟件的設計與實現[D].北京:北京郵電大學,2012.
[9]郝立果.基于加速度傳感器的運動信息采集和應用研究[D].天津:天津大學,2010.
[10]邸文華.基于iPhone的人員行走慣性導航系統的設計與實現[D].天津:天津大學,2012.(責任編輯:杜能鋼)