寧天敏
(東華大學計算機科學與技術學院,上海 201620)
隨著4G/5G 網絡在國內的普及以及國家“提速降費”政策的推動,移動終端和移動互聯網業務在國內的滲透率達到了空前高度,越來越多的個性化需求應運而生。 其中,基于位置的服務(Location Based Services)能夠根據移動設備和用戶的位置提供個性化服務[1]。 在這個移動信息時代,人們越來越依賴于LBS,其應用前景非常廣泛。 現如今社會,人們每天在室內工作、學習和生活的時間占全天時間的80%左右,遠遠超過身處室外的時間,因此,室內定位在人們的日常生活中起到了重要的作用。
由于GPS 信號容易被建筑物遮擋,因此GPS 在室內定位的精度不高。 常見的室內定位技術包括射頻識別定位、WiFi 定位、藍牙定位、磁場定位、超聲波定位、紅外定位、行人航位推算[2]。 其中,射頻識別定位不便于整合到移動設備中,且作用距離短。WiFi、藍牙、磁場的指紋定位方式,不依賴于額外的基礎設施,可以達到2 ~5 m 的定位精度。 然而,環境變化以及附近行人或物體會影響其定位效果,需要經常更新指紋數據庫,這非常耗費人力。 超聲波定位和紅外定位的定位精度能夠達到厘米級別,但是需要額外的基礎設施,導致成本較高。 行人航位推算利用慣性傳感器計算航向和步長,不依賴于額外的基礎設施,但是由于累積誤差的存在,在長距離定位下其效果并不理想。
因此,提出一個低成本、高精度、易擴展的室內定位系統具有重要的現實意義。 本文考慮利用智能手機的慣性傳感器和圖像傳感器對室內環境下的用戶進行位置定位,以達到不依賴于其他額外的基礎設施的目的。
本文主要用到了加速度傳感器、陀螺儀傳感器、磁力傳感器、圖像傳感器,在安卓平臺下,前三者使用標準的三軸坐標系來表示數據值。 對于標準的三軸坐標系,當設備正面朝上平放于桌面時,可相對于設備屏幕來定義坐標系。其中,x軸指向設備屏幕右側,y軸指向設備屏幕前方,z軸垂直于設備屏幕向上延伸。 當設備的屏幕方向改變時,坐標軸不會轉換,也就是說,傳感器的坐標系不會隨著設備的移動而改變。
光流最早由美國心理學家Gibson[3]在十九世紀四十年代提出。 光流是視覺場景中由觀察者(比如眼睛、攝像頭)和場景之間的相對運動引起的物體、表面和邊緣的表觀運動[4],這種相對運動包括觀察者運動、場景運動或二者同時運動。 光流估計是計算機視覺研究中的一個重要方向,具有廣泛的用途,包括目標對象分割、運動檢測、立體視差測量等。 智能手機光流估計利用圖像傳感器拍攝的連續圖像序列的相鄰2 幀在空間、時間上的相關性與變化情況,計算出像素點在相鄰2 幀中的速度矢量、即光流。對圖像每個像素計算光流稱為稠密光流,對圖像的部分像素(即具有明顯特征的角點)計算光流稱為稀疏光流。 考慮到稠密光流的計算開銷明顯超過稀疏光流,因此,可以根據需求選擇合適的方法。 本文使用的是稀疏光流。
本文提出了一個室內定位方法,也是一種行人航位推算方法,行人航位推算是在已知當前時刻位置的條件下,通過測量移動的距離和方位,推算下一時刻位置的方法。 本文提出的室內定位方法的核心思想是,利用Madgwick 算法[5]對加速度、陀螺儀、地磁傳感器數據計算得出姿態航向,利用Shi-Tomasi 角點檢測算法[6]和Lucas 稀疏光流算法[7]對手機后置攝像頭拍攝得到的視頻幀序列計算得到位移,從而確定行人的位置。 具體來說,當行人以相對于地面固定的高度在身前平握手機步行時,通過計算地面區域的光流和腳部區域的光流再乘以一定比例可以得出行人的位移,結合給定的初始位置可以計算出行人的位置。 下文介紹本文為了準確地將光流估計轉換為位移估計所提出的方法。
為了通過將稀疏光流算法應用到智能手機后置攝像頭拍攝的視頻圖像中來估計行人位移,必須首先獲得像素距離比,即行人以相對于地面固定的高度平握智能手機時,放置在地面上的實際物體的大小與圖像中的像素數的比率。 本文獲取像素距離比的方法如下。 在地面上放置一個二維碼,二維碼的實際寬度為0.08 m,行人平握智能手機拍攝2 s 地面的視頻,通過OpenCV[8]識別出二維碼邊框所在的位置,計算出二維碼在圖像平面的像素大小,則該像素距離比為二維碼實際寬度/二維碼平均像素寬度。 如圖1 所示,藍色框內容為檢測到的二維碼,記i幀二維碼在圖像中的4 個頂點的坐標為(xi,j,yi,j),n為二維碼視頻幀數,w0為二維碼現實寬度,則像素距離比r為:

圖1 被檢測到的二維碼Fig. 1 The detected QR code
本文提出的室內定位方法要求行人將智能手機平握在身體前面,考慮現實情況下,行人不可能保持完全水平握住手機的狀態,必然會導致智能手機在某些時刻出現傾斜狀態。 手機傾斜、即后置攝像頭傾斜,那么拍攝得到的視頻幀也是傾斜的。 當視頻幀傾斜時,圖像平面不與地面平行,這會影響光流的估計效果。 因此,本文考慮對視頻幀進行姿態補償,以盡量達到圖像平面與地面平行的效果。 Madgwick姿態估計算法能夠計算出智能手機的橫滾角(?)、俯仰角(θ) 和偏航角(ψ),可以應用透視變換于橫滾角和俯仰角對圖像進行姿態補償,透視變換矩陣M通過以下公式得出:
其中,P是三維到二維的投影矩陣;T是將像平面平移至焦平面的平移矩陣;R是像平面的旋轉矩陣;S是二維到三維的投影矩陣;(μ0,ν0) 分別是視頻幀水平和垂直方向像素點個數的一半;ρx,ρy分別為圖像傳感器水平和垂直方向單個像素點的長度。
后置攝像頭的視野里包含地面、行人的腳和腿區域,當行人步行時,地面靜止,地面區域的光流估計可以直接用于計算行人位移,然而,行人的腳和腿區域會擺動,那么這些區域的光流估計存在異常值。另外,腿部區域與攝像頭的距離低于地面與攝像頭的距離,這會導致事先獲得的在地面區域的像素距離比不適用于腿部區域。 因此,必須移除腿部區域的角點,使其不參與光流估計。 在室內環境下,瓷磚是很常見的地面材質,而這些比較均勻的材質有時候會檢測不出較多的角點,因此,必須盡可能考慮到更多的區域以檢測更多的角點。 相比于室內常見的均勻材質,行人的鞋并不均勻,這會使得鞋區域的角點數大量存在,因為行人的腳部與地面會周期性地接觸,至少會有一只腳固定在地面上,那么這只固定的腳對應的鞋區域非常適合用于計算角點。 因此,本文考慮地面和鞋區域,并將這2 個區域劃分為上區域和下區域。 當行人步行速度較快時,一般腳部擺動會增大,如果是固定比例劃分,那么會導致上區域出現腳部。 因此,本文設計了依據光流估計得出的速度進行自適應上下區域劃分的計算方法:
其中,h為上區域像素高度;h0為視頻幀像素高度;r為像素距離比;ν為上一幀計算得到的y軸方向光流;△t為視頻幀間隔時間。 對于上區域,本文選擇的用于Shi-Tomasi 角點檢測算法的角點質量閾值為0.1,下區域的為0.7。
考慮現實情況,腳部區域會在行人行走過程中擺動,那么腳部區域光流的y軸分量可能向前、也可能向后。 對于某只固定在地面上的腳,該區域光流的y軸分量是向前的,因此,對于y軸分量向后的光流、即ν <0,本文不考慮該像素點對應的光流,從而減少向后光流對位移估計的影響。 行人行走過程中,在短時間內近似于直線運動,那么光流x軸與y軸分量的角度必然在一定范圍內。 因此,本文不將該角度超過一定閾值的像素點光流用于光流估計。具體來說,當atan2(|ν |,|μ |)>π/9 時,放棄該角點的光流。 另外,行人在室內環境的步行速度并不會太大,一般不超過1.8 m/s,因此,對于某些光流速度過大的角點,事先在中值濾波前剔除掉。
得到上下區域多個角點的光流后,本文分別對上下區域的光流使用中值濾波,再取上下區域光流的平均值作為當前幀時間內的光流。 接著,本文需要利用公式將每一幀的光流估計轉換為導航坐標系下的位移:
其中,△xi,△yi分別表示視頻第i幀在導航坐標系下的關于x,y軸的位移;(μi,νi) 表示視頻第i幀的光流估計;ψi表示視頻第i幀時智能手機的偏航角;r表示像素距離比。 因此,智能手機在第k幀時的位置為:
其中,x0,y0為給定的初始位置,本文將其設置為(0,0)。
計算定位誤差需要獲取行人位置的基準值,本文事先設定測量好的參考軌跡,在參考軌跡的某些點貼標記,本文設定的這些標記的間隔距離一般為2 m,通過激光測距儀等測量工具得到標記點的位置,實驗時嚴格按照這些標記點水平握住手機步行。本文開發了一個名為LuffyDataset 的安卓應用程序,如圖2 所示,能夠同時記錄加速度傳感器、陀螺儀傳感器、地磁傳感器和圖像傳感器數據,且能夠記錄下到達標記點的時間。 本文實驗設定的前3 種傳感器的記錄頻率均為60 Hz,而圖像傳感器設定的錄制分辨率為1 280×720,幀率為30 fps,實驗時步行速度在0.8 ~1.1 m/s,收集數據的手機是Xiaomi 12S Pro。 本文標記了4 種軌跡:長度為60.41 m 的直線軌跡;寬度為38.73 m、高度為16.39 m 的矩形軌跡;周長59.98 m 的箭頭軌跡;半徑為8 m 的圓形軌跡。本文對4 種軌跡進行10 次重復實驗,并與3 種定位方法FlexPDR[9]、Poulose[10]和Jongtaek[11]進行了對比。

圖2 LuffyDataset 應用程序Fig. 2 The LuffyDataset application
圖3 為直線軌跡定位誤差累積分布,從圖3 中可以看出本文提出的方法(Proposed)效果最好,Jongtaek 方法最差,本文方法具有最小的平均定位誤差0.12 m,而且最大定位誤差0.58 m 也是最小的,這說明簡單軌跡下本文方法基本不存在累計誤差,實現了高精度定位。

圖3 直線軌跡定位誤差累積分布圖Fig. 3 Cumulative distribution of straight trajectory positioning errors
圖4 為矩形軌跡定位誤差累積分布,從圖4 中可以看出本文方法的平均定位誤差為0.26 m,最大定位誤差為0.87 m,效果最好,Jongtaek 次之。 這說明即使在步行距離超過100 m 的情況下,本文方法的累積誤差仍然比較小,而其他3 種方法的最大定位誤差均超過2 m,受累積誤差的影響較大。

圖4 矩形軌跡定位誤差累積分布圖Fig. 4 Cumulative distribution of rectangular trajectory positioning errors
圖5 為箭頭軌跡定位誤差累積分布,從圖5 中可以看出本文方法的平均定位誤差為0.28 m,最大定位誤差為0.71 m,效果最好,Poulose 方法最差,這說明即使在多次轉彎后,本文方法的光流估計仍然是較為準確的。

圖5 箭頭軌跡定位誤差累積分布圖Fig. 5 Cumulative distribution of arrow trajectory positioning errors
圖6 為圓形軌跡定位誤差累積分布,從圖6 中可以看出本文方法的平均定位誤差為0.18 m,最大定位誤差為0.57 m,效果最好,Jongtaek 次之,這說明即使在連續轉彎的情況下,本文方法仍然具有很好的定位效果。

圖6 圓形軌跡定位誤差累積分布圖Fig. 6 Cumulative distribution of circle trajectory positioning errors
綜上所述,對于不同軌跡,本文方法的定位精度足以達到室內定位高精度的要求,同時能夠實現低成本、易擴展的優點。
傳統的行人航位推算一般使用加速度峰值法結合步長模型進行位移估計,而智能手機上的MEMS傳感器體積小、精度低,容易產生較大的累積誤差。然而,智能手機的圖像傳感器越來越受到重視,拍攝的圖像越來越細膩,本文創新性地將手機后置攝像頭獲取的視頻幀序列用于光流估計得出位移,使得位移估計較為準確,能夠在各種軌跡如直線、矩形、箭頭、圓形軌跡下達到高精度的定位效果,在60 m直線軌跡下的平均定位誤差為0.12 m,而且不受行人身高、體重的影響,低成本、易擴展,滿足室內定位的需求。 另外,本文開發了一個用于實驗數據手機的安卓應用程序LuffyDataset。
在此基礎上,本文仍存在需要改進的地方。 本文未評估行人以不同速度(如慢速、中速、快速)步行的定位效果,同時未評估行人使用不同手機步行時本文方法的定位誤差。 另外,本文方法目前僅能實現二維室內定位,將其擴展為三維室內定位還有待進一步研究。