羅 娟 章翠君 王 純
(湖南大學信息科學與工程學院 長沙 410082)
隨著物聯網技術的快速發展和移動智能終端的廣泛普及,在市場消費級、企業級應用的需求推動下,人們對于基于位置的服務(location based services, LBS)需求日益劇增,精準的室內外定位和導航服務在日常生活中重要性日漸凸顯.室外,全球定位系統(global positioning system, GPS)和北斗定位系統發展成熟可提供準確的位置服務.室內,隨著大型建筑高度不斷攀升以及建筑物內部結構越加復雜,目前仍缺少成熟的多樓層室內定位技術.無線局域網(wireless local area network, WLAN)的廣泛部署和基礎設施的完備,基于接收信號強度(received signal strength indication, RSSI)的WLAN指紋的定位技術因其無需額外的硬件設施,具有成本低、部署簡單、穿透力強、接入方便等優勢,受到廣大科研工作者的青睞.
基于RSSI指紋定位方法也稱匹配定位法,該方法不需要接入點(access point, AP)位置的先驗知識,但需要在離線階段劃分網格,在位置區域中設置固定數量的采樣點,記錄每一樓層每一網格內的RSSI值,構建“樓層-位置-信號強度”指紋庫,如圖1所示.傳統指紋庫的構建過程依賴專業人員的現場勘測,耗時費力.同時由于室內多徑效應,無線信號在傳播過程中存在波動性,RSSI值需要隨著室內物理環境的動態變化而進行周期性的更新,增加了指紋庫的維護成本.
眾包的基本思想是將冗余繁重的指紋數據采集任務隱式分配給多個普通用戶,很大程度上減少指紋采集的時間成本和勞動成本.近年來,智能手機、智能手表等可穿戴式設備通常都內置了慣性傳感單元(inertial measurement unit, IMU),配置有氣壓計、加速度傳感器、角速度傳感器、陀螺儀等傳感器,此類智能設備的廣泛普及使得人群比以往任何時候都更容易參與眾包.
本文基于眾包提出了一種多樓層指紋庫構建方法——MCSLoc,根據室內地圖構建室內語義拓撲圖,利用卡爾曼濾波(Kalman filter, KF)融合智能手機內置加速度傳感器和氣壓計的值進行高度測量,劃分傳感器數據到各個樓層,利用智能手機內置傳感器獲取眾包用戶相對軌跡和RSSI序列,使用隱馬爾可夫(hidden Markov model, HMM)模型和軌跡匹配維特比(track matching Viterbi, TM-Viterbi)算法將用戶相對軌跡和室內語義地圖相匹配,從而獲取軌跡絕對路徑為RSSI標注物理位置,構建多樓層指紋庫.

Fig. 1 Traditional fingerprint database construction process圖1 傳統指紋庫構建過程
本文的主要貢獻包括3個方面:
1) 提出一種“分段式”適用于眾包場景的用戶軌跡獲取方法,設計拐角檢測算法,以拐角劃分軌跡子段,動態獲取用戶步長,消除眾包用戶步長異質以及智能手機內置傳感器航向漂移問題;
2) 將隱馬爾可夫模型應用到眾包用戶軌跡匹配,提出改進的維特比地圖匹配算法TM-Viterbi,相鄰節點之間加以公共的觀測狀態限制,保證匹配后的軌跡節點序列在語義地圖上的節點連續性;
3) 提出一種RSSI眾包指紋位置標記方法,利用時間戳為無標簽RSSI序列標記樓層標簽以及物理位置標簽,獲取用戶軌跡絕對坐標.
眾包概念提出后,越來越多的研究學者致力于以眾包的方式構建RSSI指紋庫,按照用戶的參與程度,眾包技術可以分為主動眾包和被動眾包.主動眾包要求參與者主動貢獻數據信息.Yang等人提出的FreeLoc系統要求參與者貢獻記錄的指紋數據,并將位置標簽上傳到服務器.Zheng等人通過用戶主動提供的圖像數據、WiFi樣本以及IMU感應數據構建視覺導航系統Travi-Navi.相比于主動眾包,與智能手機內置IMU相結合的被動眾包技術應用更加廣泛,被動眾包用戶通常是無意識或弱意識參與,對系統的干預較少.LiFS系統利用用戶的移動性,無需人工現場勘測實現房間級別的定位,該系統是國內基于眾包定位的突破,但是定位精度不高.PiLoc利用智能手機內置IMU,根據行人航位推(pedestrian dead reckoning, PDR)算法估計用戶軌跡,將用戶位移和RSSI信號相結合,實現WiFi指紋庫構建,定位精度較高,但系統需要用戶初始位置先驗知識.MPiLoc在PiLoc的基礎之上,通過氣壓傳感器對用戶軌跡進行聚類劃分樓層,構建多樓層指紋庫.
有研究表明,將用戶軌跡與室內地圖匹配可以顯著提高定位系統的性能,基于HMM的室內定位已經被證明為一種有效的方法.如基于HMM的室內地圖匹配定位、基于HMM的WiFi信號光線跟蹤3維路徑匹配定位、基于HMM和網格的貝葉斯聯合跟蹤室內移動終端定位.隨著IMU的發展,出現了HMM與慣性傳感器數據融合定位,該類方法通常面臨HMM狀態數過大,算法復雜度較高問題.為減少狀態數,Lu等人以拐角特征作為PDR軌跡上下文,使用HMM將其與數據庫中的上下文相匹配,獲得行人位置.該方法能夠快速確定行人的起始點,具有良好的穩定性和魯棒性.
本文結合眾包和HMM技術,采集眾包用戶跨樓層走動時的智能手機內置傳感器信息,提出分段式用戶軌跡獲取方法獲取用戶相對軌跡,建立HMM模型,利用TM-Viterbi算法將用戶軌跡與地圖匹配,構建多樓層指紋庫,MCSLoc可以去除指紋庫構建階段的專業人工勘測,無需眾包用戶初始位置先驗知識.
MCSLoc方法研究架構圖如圖2所示,系統由離線階段和在線階段2部分組成.離線階段構建多樓層指紋庫,為在線階段用戶的位置請求提供服務,本文的主要工作在于離線階段的基于眾包的多樓層指紋庫的構建,下面將具體描述這部分關鍵過程.

Fig. 2 MCSLoc method research framework圖2 MCSLoc方法研究框架
G
(Q
,V
),其中路段表示室內地圖可行走區域的主要路徑,V
={v
,v
,…,v
}表示路段集;節點表示路徑的拐角點以及路徑的端點(起始點和終止點),Q
={q
,q
,…,q
}表示節點集.
()描述語義地圖如圖3所示:
(1)
其中,w
表示節點q
到節點q
之間的位移長度,即路段長度,當節點q
和q
是相同節點,w
=0,當節點q
和q
不相鄰或者不在一條直線上,w
為無窮.n
表示節點的數量,m
表示路段的數量.

Fig. 3 Indoor floor plan and semantic map圖3 室內平面圖及語義地圖示意圖

Fig. 4 Process of segmented trajectory acquisition method圖4 分段式軌跡獲取流程
P
=(t
,dirc
,rss
,acc
,pres
),分別有時間戳、陀螺儀方向數據、RSSI序列、加速度值、氣壓值.主要分為3個步驟:傳感器數據所屬樓層劃分、拐角檢測、子段長度獲取.2.2.1 傳感器數據所屬樓層劃分
由于眾包參與者為跨樓層行走,采集的傳感器數據為多樓層連續型數據,按照分層思想,首先將傳感器數據劃分到各個樓層.采用文獻[15]中提出的高度測量方法(Kalman filter and floor change detection, KF_FCD)劃分傳感器數據,即利用KF融合智能手機內置加速度傳感器和氣壓計的值進行高度測量,利用樓層變化檢測算法對KF輸出的值進一步修正,根據實時測量的高度和時間戳判斷傳感器數據所屬樓層.
2.2.2 拐角檢測
根據傳感器數據估計眾包用戶在相應樓層的軌跡.航向角的大小反映了行人行走的方向,航向角的偏移導致的誤差會隨著時間累積,但是短時間內航向角偏移較小,即行人軌跡的行走方向相鄰2步之間角度的誤差較小.假設眾包用戶在室內沿直線行走且拐彎呈直角,由室內地圖的構造可知,用戶在拐彎處有左拐或右拐.即可通過航向角獲知用戶是否拐彎.據此,設計了一種拐角檢測算法檢測軌跡拐角.設定角度變化允許的上下限閾值分別為thMin
,thMax
,其中thMin
為陀螺儀允許的最大角度誤差,通過經驗將其設為50°,thMax
為相鄰2步角度變化最大值,根據經驗將其設為180°.
算法具體步驟算法1所示,輸入陀螺儀角度數組ω
,其中ω
[i
]為第i
步的行走角度,算法時間復雜度為O
(n
).
算法1.
拐角檢測算法.輸入:陀螺儀角度數組ω
、閾值thMin
,thMax
;輸出:拐角方向數組Ψ
(1代表右拐、-1代表左拐).
① fori
=1:n
-2 do②nextS
=abs(ω
[i
-1]-ω
[i
]);③tnextS
=abs(ω
[i
]-ω
[i
+1]);④ if (nextS
>180°)∨(tnextS
>180°)⑤next
=360°-nextS
;tnext
=360°-tnextS
;⑥ end if
⑦/
*比較角度變化值nextS
和tnextS
與閾值的大小*/
if (nextS
>thMin
∧nextS
<thMax
∧tnextS
>thMin
∧tnextS
<thMax
)⑧ if (ω
[i
+1]-ω
[i
]>0)/
*右拐*/
⑨Ψ
[i
+1][0]=ω
[i
+1];⑩ end if





.
2.
3 子段長度獲取子段為拐角檢測算法檢測到一條軌跡相鄰2個拐角間的距離,n
個拐角即可劃分n
-1條子段.
那么軌跡D
可由m
條子段組成,D
={d
,d
,…,d
},獲取各子段的長度d
(1<j
<m
=n
-1),即可得到眾包用戶預估軌跡.
根據拐角時刻時間戳獲取相鄰拐角時間間隔內傳感器數據,以此估計各子段長度.
研究表明,行人在行走過程中,加速度具有周期性類正弦波特性,波峰檢測法根據此特性對波形的峰值波谷進行計數,可有效估計行人的步頻.
此外,也可有效估計行人步長,為減少行人運動狀態影響,選擇合加速度作為特征值.
公式為
(2)
其中,a
(t
)表示時刻t
的合加速度,a
(t
),a
(t
),a
(t
)分別表示3軸加速度傳感器在X
軸、Y
軸和Z
軸的加速度,g
表示重力加速度,其值為9.
81 m/s.受智能手機內置傳感器本身精度的制約以及行人身體抖動等外部因素的影響,加速度傳感器采集的數據通常含有噪聲.有限脈沖響應(finite impulse response, FIR)數字濾波器為高保真低通濾波器,它可以同時滿足幅頻特性和線性相位特性.為了去除高頻噪聲降低誤檢率,采用FIR數字濾波器最優化設計方法設計低通濾波器,其中,采樣頻率f
=500 Hz,期望幅頻特性的頻率向量=(4,0,2,3,500)/f
,幅值向量=(1,1,0,0),加速度傳感器合加速度濾波前后對比如圖5所示.
低通濾波后的偽波峰基本消除,噪聲干擾大大減少.

Fig. 5 Contrast before and after acceleration FIR low pass filtering圖5 加速度FIR低通濾波前后對比圖
目前常用的行人步長估計方法有:常數步長模型、運動機械模型、線性模型、非線性模型以及人工智能模型等.
其中非線性模型通常在步頻與步長之間建立相應的非線性估計模型,該類模型僅與加速度、速度等特征變量有關,受行人自身身高、體重、腿長等因素影響較小.
結合更適合眾包場景的非線性模型Weinberg算法動態估計用戶每一步步長.
子段長度公式為
(3)
其中,1≤i
≤n
,d
表示子段的長度,S
表示本子段內第i
步的步長,K
為模型系數,取值為0.
42,a
max和a
min分別表示步頻檢測本子段第i
步中得到的最大加速度值和最小加速度值,n
表示本子段內的行走步數.
.
應用于本場景的Markov過程即是將未知起點的眾包用戶軌跡與語義地圖匹配獲取絕對軌跡過程.
在地圖匹配問題中,語義地圖的節點作為隱藏狀態;語義地圖的路段作為觀測狀態;智能手機內置傳感器數據獲取的眾包用戶軌跡子段的長度序列視為觀測序列.
根據HMM模型原理,地圖匹配過程遵循2個規則:1)任意時刻的隱藏狀態值依賴于前一時刻,即每個節點之間轉移的可能性為狀態轉移概率;2)任意時刻的觀測狀態只依賴當前時刻的隱藏狀態.
假設Q
={q
,q
,…,q
}是隱藏狀態的集合,即語義地圖節點集合,N
表示隱藏狀態數;V
={v
,v
,…,v
}是觀測狀態集合,即語義地圖中路段集合,M
表示觀測狀態數.
圖6是以圖2為對象建立的HMM模型示意圖.P
(q
|q
)表示轉移概率,即每一時刻節點之間轉移的可能性,P
(v
|q
)表示發射概率,即節點下觀測到路段的概率.
表示初始時刻隱藏狀態的概率向量.

Fig. 6 Hidden Markov model schematic diagram圖6 HMM示意圖
由于在未知起點下,用戶在任意一個節點位置的概率相等,因此.

(4)
=[a
]×表示節點之間轉移概率矩陣,由轉移概率組成,定義與節點q
處于一條路段上的節點的集合為Ψ
,集合Ψ
的節點數量之和為k
.
狀態轉換概率計算公式為
(5)
表示發射概率矩陣,即在某個節點下觀測到某個路段的概率.
將與節點直接相連的路段作為該狀態下的可觀測值.
定義節點q
可觀測的路段的集合為φ
,集合φ
中路段的數量之和為z
.
發射概率公式為
(6)
λ
=(,,)和觀測序列O
={o
,o
,…,o
},求對給定觀測序列條件概率最大的狀態序列,其基本思想是基于動態規劃尋找最優路徑的隱藏狀態序列.
MCSLoc利用TM-Viterbi算法求解語義地圖中與眾包用戶軌跡最相似的路徑,即輸入一條軌跡的子段長度序列O
=D
={d
,d
,…,d
},求語義地圖中最有可能出現該序列的節點序列.
TM-Viterbi算法對傳統Viterbi算法的改進主要有:1)傳統的Viterbi算法依賴概率矩陣,未考慮節點序列的物理連續性.因此,本文對節點的轉移加入物理約束,即尋找最優路徑時,本節點與下一個節點加以公共的觀測狀態限制,利用路段關聯節點.2)通過傳感器獲取的用戶軌跡子段長度與真實路段長度存在誤差,即存在觀測子段長度d
不屬于觀測狀態集合V.
為獲取該類觀測值的發射概率,使用高斯函數來表達誤差因素的發射概率.
計算公式為
(7)
其中,μ
表示路段集合φ
中與子段d
絕對值最小的路段長度,δ
表示誤差,取值為(μ
-1)/
4.
導入變量θ
和φ
,變量θ
(i
)為時刻t
概率最大值,變量φ
(i
)為時刻t
所有單個路徑中概率最大的路徑的第t
-1個節點.
TM-Viterbi算法步驟如算法2所示.傳統Viterbi算法的時間復雜度為O
(N
M
),N
表示隱藏狀態數,M
表示觀測狀態數,TM-Viterbi算法對節點的轉移加以約束,在尋找最佳路徑時,下一節點需為上一節點的鄰居節點,因此其TM-Viterbi算法時間復雜度為O
(NMγ
),γ
表示上一節點的相鄰節點數量.
分析可知,改進的TM-Viterbi算法時間復雜度明顯降低,且地圖匹配過程為離線階段,運行時間可容忍性強,時延要求低,該時間復雜度滿足需求.
算法2.
TM-Viterbi算法.輸入:HMM模型λ
=(,,)、子段序列O
={d
,d
,…,d
};
θ
(i
)=b
(d
),φ
(i
)=0,i
=1,2,…,N
;/
*初始化*/
② fort
=2:T
do③ ifd
?V
then
/
*誤差因素發射概率*/
⑥ ifb
(d
-1)>0,i
=1,2,…,N
;/
*判斷節點是否有連接*/

N
;/
*遞推計算最大概率*/

N
;/
*記錄路徑*/
⑨ end if
⑩ end for

/
*終止*/




/
*返回最優節點序列*/
a
(x
,y
)和b
(x
,y
)分別為軌跡的2個相鄰拐角坐標,t
和t
分別為用戶的智能手機記錄經過拐角的時間戳(單位為s),假設眾包用戶勻速行走,那么RSSI的位置標簽Crss
(x
,y
)為
(8)
其中,t
=1,2,…,t
-t
.
由此,即可為每一條RSSI值序列標記位置標簽,一條RSSI指紋構成:[F
,Crss
(x
,y
),RSSI
,RSSI
,…,RSSI
],其中F
表示樓層,n
表示AP的數量,RSSI指紋匯總即可構建多樓層指紋庫.
k
最近鄰(k
weighted nearest neighbor, WKNN)算法獲取最終位置坐標,其中k
=4.具體描述為:根據多分類LDA的樓層判別模型,分別對樓層和AP屬性進行兩兩分組,利用LDA方法求出各分組的廣義瑞利商J
最大化的目標值,根據分組中的最大值J
選擇最優分組進行兩兩樓層的判定,利用投票法選擇最終的樓層號,確定用戶所在樓層F
. 2維坐標獲取階段,采集待定位點RSSI指紋序列,在多樓層指紋庫F
層指紋中選取與待定位點RSSI指紋相似程度最高的k
個指紋的位置坐標,并根據相似程度賦予指紋位置坐標相應權值,最終加權平均得到待定位點2維位置坐標(x
,y
).

Fig. 7 Plan of experimental building圖7 實驗平面圖
為了評估MCSLoc的性能,實驗在真實3層實驗樓建立實驗場地,實驗樓3D平面圖如圖7所示,總面積4 800 m,其中1樓樓層高4.3 m,2樓樓層高2.64 m,3樓樓層高2.48 m.由室內平面圖轉換的語義地圖如圖8所示,共158個節點.使用了4種不同類型的安卓智能手機進行實驗,分別是:小米5 s、小米8、華為Mate 20 Pro、華為Mate 30 Pro.實驗過程中,為了盡可能模擬眾包場景,眾包參與者手持智能手機隨機從不同的位置(不指定起始位置)開始行走.采集10位眾包參與者使用不同型號手機的80條用戶軌跡數據.其中加速度傳感器的采集頻率為250 Hz,氣壓計的采樣頻率為100 Hz,陀螺儀和WiFi接收器的采樣頻率為1 Hz,實驗區域記錄可檢測到15個AP.

Fig. 8 Semantic map of experimental building圖8 實驗樓語義地圖
由2.2節可知,MCSLoc利用軌跡高度和時間戳劃分傳感器數據到所屬樓層.一條軌跡的高度測量情況如圖9所示,虛線為真實高度,實線為KF_FCD方法測量高度,由圖9可知,KF_FCD方法測量的高度幾乎與真實高度一致,誤差圖如圖10所示,平均誤差為0.11 m,最大誤差為0.31 m.由于實驗大樓樓層高度已知,1樓高度范圍為0~4.3 m,2樓為4.3~6.94 m,3樓為6.94~9.42 m.根據眾包參與者每一時刻測量的高度所屬的樓層范圍判定每時刻所屬樓層,結合時間戳劃分加速度傳感器、陀螺儀以及WiFi接收器的數據到各個樓層.需要說明的是,實驗未對樓梯之間的信號進行處理,因此上下樓過程中的采集的傳感器數據為無用數據,已將其剔除.

Fig. 9 Height measured by KF_FCD method圖9 KF_FCD測量高度

Fig. 10 Height error measured by KF_FCD method圖10 KF_FCD高度測量誤差
實驗選擇代表性軌跡進行分析說明,拐角檢測算法檢測到9個拐角,即可劃分10個子段,利用拐角檢測算法獲取的拐彎方向以及利用加速度值獲取的步數、子段長度與真實值對比如表1所示:

Table 1 Comparison of Measured Value and Real Value of Sub Segment
該軌跡中,實際總步數為233步,檢測總步數為236步,根據每一子段的步數的誤差,步數檢測精度為97%;該層軌跡總長度為90 m,測量總長度為91.27 m,子段長度平均誤差為0.905 m,拐彎方向檢測精度為100%.
為驗證TM-Viterbi地圖匹配算法性能,實驗分別獲取20條、40條、60條、80條軌跡的子段序列,將傳統的Viterbi算法與TM-Viterbi算法進行對比.匹配精度如圖11所示.當軌跡條數在40~80條時,傳統的Viterbi算法匹配精度穩定在66%左右,而TM-Viterbi算法匹配精度穩定在85%左右,精度將近提高了20個百分點.由圖11可知,當軌跡條數足夠多時,TM-Viterbi算法可以獲得足夠高的地圖匹配精度.

Fig. 11 Accuracy comparison of Viterbi map matching algorithm圖11 Viterbi地圖匹配算法精度對比
為驗證構建的多樓層指紋庫的性能,實驗采集了400個不同樓層不同待定位點的RSSI值進行精度分析.定位過程包括基于多分類LDA樓層判別與基于WKNN算法的2維坐標獲取.由圖12可知,平均定位誤差為1.87 m,82%的定位誤差在3 m以內,91%定位誤差在5 m以內,定位誤差主要是地圖匹配算法誤差導致的多樓層指紋庫“指紋-位置”根本性錯位偏差.由于MCSLoc指紋庫構建方法可操作性強、成本低,可實現指紋庫的定期更新,有效減少室內環境變化導致RSSI指紋的不穩定波動性對定位精度的影響,分析可知,構建的基于眾包的多樓層指紋庫可以滿足室內基本定位需求.

Fig. 12 Cumulative distribution function of location error in multi-floor fingerprint database圖12 多樓層指紋庫定位誤差累積分布圖

步數檢測精度∕%子段長度平均誤差∕m拐彎方向檢測精度∕%970.905100
本文將提出的基于眾包的多樓層定位方法-MCSLoc從定位精度、實驗面積、是否需要室內地圖以及是否為多樓層4個方面與其他前沿的基于眾包的WiFi指紋定位方法進行了比較.如表3所示:

Table 3 Comparison of System Performance表3 系統性能對比
LiFS達到的是房間級別的定位精度,MCSLoc的定位精度明顯優于LiFS系統.Zee利用拓撲圖和粒子濾波限制行人軌跡,但粒子濾波比較耗時,不適合運行在計算能力有限的智能手機平臺.定位精度與實驗面密切相關,與RCILS和Ma等人方法相比,MCSLoc部署范圍與實驗場景面積相之較大,結果更具說服力;UnLoc定位精度較高,但是需要在室內環境中部署一定數量的錨節點,這必然會增加定位成本.除此之外,MCSLoc針對多樓層場景,更加符合當前市場定位需求,應用范圍更廣.
本文基于眾包提出了一種融合智能手機傳感器數據的多樓層指紋庫構建方法MCSLoc,根據行人室內行走特點,設計分段式軌跡獲取方法,建立HMM模型,設計改進的Viterbi算法、TM-Viterbi算法,將用戶軌跡與語義地圖匹配,獲取絕對位置,有效構建多樓層指紋庫.與其他經典的基于眾包的定位方法相比,本文提出的方法效率更高、成本更低、適用范圍更廣.實驗結果表明,MCSLoc可達到米級定位精度,具有良好的穩定性.
未來,進一步的研究包括:設計眾包參與者運動狀態檢測算法,識別參與者快走、慢走、跑步等運動狀態;考慮眾包參與者智能手機的異質性;將語義地圖的主路徑抽取模式轉成網格化抽取模式,拓展應用場景至大型空曠室內場所.
作者貢獻聲明
:羅娟提出研究思路和創新點,進行論文模型方法設計和文字修改;章翠君設計研究方案,進行實驗和數據分析,起草論文;王純協助進行實驗和論文修訂.