孫 偉,王豐得,王 野,楊一涵
(遼寧工程技術大學 測繪與地理科學學院,遼寧 阜新 123000)
隨著移動通信技術的快速發展,基于位置的服務在日常生活中應用越來越廣泛[1]。在室外環境中全球定位系統(global positioning system,GPS)能夠提供全天候、高精度、實時的定位服務,但是在室內環境中由于墻體、門窗遮擋GPS無法提供精準的定位服務。然而研究表明,人類超過70 %的時間是在室內活動,隨著時代發展,室內服務設施大型化、復雜化,人們對于室內導航的需求不斷增加。因此,室內導航定位技術已成為許多高新技術企業和重點實驗室的研究重點。
文獻[2]在1977年就提出了行人航跡推算(pedestrians dead reckoning,PDR)原理;但由于當時科學技術有限,使得慣性測量單元的成本昂貴,而且體積大、不便于攜帶,因此限制了這項技術的發展。近十年來,隨著微機械電子技術的快速發展,慣性測量單元功能增強、體積減小、成本降低,并且可以集成在一個微小的芯片中。這使得基于慣性傳感器的行人航跡推算技術普及成為可能[3]。目前智能手機大多都內置了慣性器件,如加速度傳感器、方向傳感器、地磁傳感器、陀螺儀等[4]。
本文基于Android智能終端,利用智能終端里多種慣性傳感器,以行人航跡推算技術為定位方法,設計室內定位方案,并用JAVA語言在智能終端實現。
航跡推算原理如圖1所示:上一點坐標已知,根據行人行進的距離和方向可以推算出下一個點的坐標,這個過程為航跡推算。
圖中:P0、P1、P2為行人連續行走的航跡點;Nk、Ek(k=0,1,2)為各點的東向坐標和北向坐標;P0-P1、P1-P2對應行走步長;α0(t0)、α1(t1) 分別為相鄰2步行走與北向的夾角(航向角)。
基于PDR的行人位置公式為
(1)
式中:Ek和Nk分別為行人在第k步東北天坐標系下的東向和北向坐標;Sk為該步的步長;αk為航向。式(1)有個前提為:假設行人在一步(單步或復步)內的航向是不變的,即該步內走直線。
根據式(1)可知:定位結果的誤差來源于初始位置誤差、方向和距離誤差;方向和距離則通過對移動智能終端的傳感器輸出信號分析和處理得到;另外在傳感器輸出數據中帶有噪聲。因此對傳感器信號采集、減少噪聲干擾,提高步數和步頻檢測準確度等方面成為精確定位的關鍵。
2.1.1 行人行走姿態分析
據研究表明,人在行走過程中具有周期性和規律性[5]。在行走過程中,行人的步頻和步長基本保持不變,具有連續性和持續性的特點[6]。通過分析行人的行走姿態,在行走過程中,根據豎直方向重力加速度變化可將一個單步分解為2個階段:第一個階段腳離地開始擺動,人體重心上移,豎直方向重力加速度不斷增大;第二個階段,腳開始落地,人體重心從最高處下移,豎直方向重力加速度隨之減小。對于同一個人,在一個復步中,左腳和右腳的規律基本一致,所以在分析中只對右腳進行詳細分析。基于行人行走步態的周期性,對加速度計輸出信號的變化進行研究分析,找出信號中與步態一致的周期即可探測出行人的步頻。本文步態檢測方式使用峰值檢測法,即通過分析加速度計輸出信號,找出其中符合行人行走周期規律的波峰、波谷,便可確定為行走一步[7-10]。
2.1.2 信號處理
人體坐標系和加速度傳感器的坐標系不一致,為提高波形檢測的可靠度,對行人行走總加速度進行分析。總的加速度為
(2)
式中:a為三軸總加速度;ax為X軸方向加速度;ay為Y軸方向加速度;az為Z軸方向加速度。
為了提高步態檢測精度,需要對采集到的加速度數據進行處理,首先通過高通濾波器剔除重力加速度,然后對數據進行平滑處理。從處理后的波形(如圖2所示)可以清晰地看出波峰和波谷。
2.1.3 步態檢測
采用峰值過濾器加時間窗口過濾器實現步態檢測(如圖3所示)。
第一個過濾器是峰值過濾器。理想狀態下,一個完整的步伐中有一個波峰和波谷。實際情況中,一個步伐中可能會出現多個假的波峰和波谷,會干擾步頻檢測。因此峰值過濾器設置2個閾值,分別是波峰峰值Δ1以及波谷峰值Δ2,來判斷是否為一步。根據大量實驗數據設置Δ1和Δ2分別為1.0和0.5。當在2個邁步起點之間檢測到大于2個閾值的波峰和波谷時,即可初步認定2個連續邁步起點之間為一個正常步伐。
第二個過濾器為時間窗口過濾器,正常行人行走頻率為0.5~5 Hz,即行走一步的時間為0.2~2 s,因此如果2個連續的邁步起點大于2 s或者小于0.2 s可認定為不是真正的一步。峰值過濾器是初步檢測條件,可能會發生誤判,在它的基礎上使用時間窗口過濾器可以進一步提高步頻檢測準確率。如果檢測到2個連續邁步起點時間間隔小于給定最低閾值,就把這段波形認定為干擾波形,并把它組合到下一個波形中。當檢測到波形時間間隔大于給定最大閾值,即可視為這段時間行人處于原地,判定該波形不是真正的一步。
航跡推算算法中行進距離是由步數乘以步長計算得到,因此步長檢測的精度將直接影響最終的定位精度。非線性步長估算模型計算量小,且能夠適應行人不同運動狀態,常用Weinberg approach模型[11],即
(3)
式中:stepsize為步長;amax和amin分別為一個完整步伐中的最大加速度和最小加速度計值;k為步長估算參數。
采用基于慣性傳感器的相對定位技術,除了需要得到距離,還需要知道行人行走的方向[12-14]。行人行走方向的檢測精度將直接影響行人航跡推算的定位精度,因為角度誤差會隨著行走距離的增加導致定位結果與實際位置偏差越來越大。
在Android系統中,可以調用具體的API函數獲取方向傳感器數據,獲得的數據包括航向角(Azimuth)、傾斜角(Pitch)、旋轉角(Roll)。這3個角度是基于手機坐標系實現的。行人航跡推算主要利用手機正前方的朝向,即僅利用了航向角數值。
在行走時盡量保持移動終端Z軸正方向豎直朝上,使用方向傳感器能夠采集到Y軸方向與磁北方向的夾角。理論上,方向傳感器獲取的方向角度范圍為0°~360°,與地理坐標系的關系如圖4所示。
在航跡推算中,是以一步作為位置更新周期。在一個周期之內方向傳感器采集的數據有多個。理論上一個步伐中采集的航向角應該一致,但是行人在行走過程中會不可避免地左右擺動,因此一個周期采集的航向角也會在一定范圍內波動。如圖5為一個步伐周期內采集的方向角數據,最大值為111.7°,最小值為108.3°,最大最小值差值為3.4°。
針對這種波動的影響,計算一個周期內的航行角均值作為行人行走的航向。圖6中,橫坐標表示17個步伐周期獲取的513個航向角數據,縱坐標表示的是航向角值。實線是未處理的原始數據,從圖中可以看出波形抖動明顯,虛線表示處理后的數據,處理過后波形抖動明顯減小。
整個系統構建分為3層(如圖7所示):最底端是數據庫層,用來存儲程序需要處理的各種數據[15-16];業務處理層負責具體的邏輯處理,峰值檢測、動態閾值處理、步頻檢測、步長檢測、方向檢測等算法在這一層實現;視圖層即界面層,直接面向用戶,主要向用戶直觀展現步長、步數、行走距離以及行走軌跡信息。這3層結構符合常規設計中的模型-視圖-控制器(model-view-controller,MVC)開發模式,將功能分離能夠有效提升程序的可讀性和可維護性。
控制層是MVC 3層中的C層,也叫業務邏輯層。該層主要負責各種算法實現以及處理視圖層請求的業務邏輯。行人航跡推算系統中業務邏輯層需要完成慣性數據采集與預處理、步態檢測、步長檢測、航向檢測等算法實現。
設計StepDetector.java類完成波峰波谷檢測、動態調整閾值,并通過時間窗口檢測法和閾值檢測法檢測步數。
StepService.java類因為繼承了Service類,因此成為Android 4大組件之一的服務。在Android中,服務可以在后臺運行,不需要前臺界面;因此當屏幕鎖定或者退出該應用程序時,該類仍然會通過調用SetpDetector.java完成計步。
設計Steplength.java類計算步長。
設計StepDate.java類將步數、步長封裝為一個對象,便于管理和應用。
設計DbUtils.java類完成對數據庫的增刪查改操作。
數據庫模塊為MVC模型中的模型層,主要負責數據的存儲與讀取。系統中需要對采集到的慣性傳感器數據計算得到的位置信息進行存儲。使用數據庫可以實現快速存儲和讀取數據。Android平臺提供了一種輕量級的數據庫SQLite,它支持SQL語句查詢,而且占用內存小。使用SQLite需要首先創建數據庫,然后再進一步創建表、索引等,最后寫入。
為了存儲加速度傳感器、方向傳感器數據、位置信息,系統中需要建立3張表,分別是TB_acc、TB_dir、TB_point。Tb_acc表存放的是加速度傳感器采集的數據,包括三軸方向的加速度以及總加速度。TB_dir表存放方向傳感器數據。TB_point存放位置信息,如表1~表3所示。

表1 TB_acc表

表2 TB_dir表

表3 TB_point表
視圖層為MVC層中的V層,該層通過用戶界面直觀地向用戶展示步長、軌跡等信息。在界面設計時,首先設計布局文件,通過添加TextView、Buttton等組件然后調整布局達到設計的效果。圖8為系統設計界面,分別為慣性數據獲取界面、行人信息界面及行人軌跡顯示界面。
為了驗證系統的定位性能,本文進行了室內定位實驗。實驗地點選在遼寧工程技術大學餐廳一樓。本文中實驗測試采用小米廠商生產的紅米Note3,內置的傳感器為InvenSense生產的MPU-6050,表4為精度指標。圖9為行走路線示意圖,測試路徑為長74 m、寬51 m的矩形。實驗過程中,測試者按照圖9中的路線,沿著A—B—C—D—A的順序,按逆時針方向完成閉合路線測試。圖10展示了預定行走路線及實際運動軌跡對比曲線,其中黑色虛線為預定路線,實線為實際軌跡。從圖中可以看出系統計算位置與預定行走路線具有較高的重合度。測試結果,實際路線長250 m,系統測試長度為246.1 m,誤差占實際長度的1.5 %,閉合差為3.78 m。

表4 傳感器精度指標
圖11為航向角曲線圖,從圖中可以看出,系統記錄的航向角與實際行走方向相符。在直線行走時檢測的航向角數據在±5°范圍內波動。
圖12為偏移量曲線圖,從圖中可以看出,偏移量隨行走距離總體呈遞增趨勢。根據統計行走250 m,最大的偏移量為6.2 m,平均偏移量為3.3 m。
基于行人航跡推算原理,通過對智能終端輸出的加速計、陀螺儀、電子羅盤數據分析,得到行人的步頻、步長航向、位置信息,并采用JAVA語言在Android終端實現室內定位系統。該系統在室內環境內能夠提供較準確的定位,平均定位誤差約占行走總距離的1.3 %;但是由于慣性傳感器的誤差累計,定位精度會隨著距離而降低。下一步在此基礎上結合其他定位方法,在定位過程中對行人航跡定位結果進行修正,以減少誤差累計。
[1] 劉祺,朱秋月,馮莎.室內定位技術的研究綜述[J].計算機時代,2016,11(8):13-15.
[2] 蔡敏敏.基于行人航位推算的室內定位技術綜述[J].微型機與應用,2015,27(13):9-11.
[3] 陳春陽,郭英,畢京學.手機陀螺儀與加速度計聯合定位初步分析[J].導航定位學報,2014,2(4):74-77.
[4] 張世哲.基于慣性傳感器和WiFi的室內定位系統的設計與實現[D].北京:北京郵電大學,2012.
[5] 楊鵬,周立紅,陳玲玲,等.基于峰-谷分段積分算法的行走步態周期識別[J].計算機工程,2011,37(23):168-170.
[6] 周圓.基于慣性傳感器和Wi-Fi信號的室內定位算法研究[D].大連:大連理工大學,2015.
[7] 王克己.室內定位系統中的行人航跡推算研究[D].北京:北京郵電大學,2012.
[8] NIU X,WANG Q,LI Y,et al.Using inertial sensors in Smartphones for curriculum experiments of inertial navigation technology[J].Education Sciences,2015,5(1):26-46.
[9] 徐偉.基于Android手機的室內定位系統研究與實現[D].武漢:華中師范大學,2014.
[10] 羅利.基于Android的WIFI室內定位技術研究[D].成都:西南交通大學,2014.
[11] 陳偉.基于GPS和自包含傳感器的行人室內外無縫定位算法研究[D].合肥:中國科學技術大學,2010.
[12] 顧聰.基于Android平臺的室內LBS系統的研究與實現[D].湘潭:湘潭大學,2011.
[13] 陳國良,張言哲,汪云甲,等.WiFi-PDR室內組合定位的無跡卡爾曼濾波算法[J].測繪學報,2015,44(12),:1314-1321.
[14] 孫偉,李婉秋.基于誤差修正技術的井下人員MEMS定位方法[J].傳感器技術學報,2014,27(7),:898-904.
[15] 張立斌,余彥培.手機室內定位的應用與服務[J].導航定位學報,2014,11(4):27-30.
[16] 王立劍.基于Android平臺的手機室內定位及導航的設計與實現[D].青島:中國海洋大學,2013.