卞新玉,何圣超,王樹軍
(南京工業大學 浦江學院,江蘇南京,211200)
我國近年來大力發展汽車產業,頻繁出臺政策刺激汽車消費,在有效的政策驅動下汽車產業運行顯著上升,處于綠燈區。為滿足用戶的停車需求,商場、樂園等場所修建了大量的室內停車場。由于室內停車場正逐漸向大型化,多樓層化發展[1],并且停車場區域環境相仿,標志物較少,不易分清方向。用戶時常會面臨停車位難覓,尋車困難的問題。本文設計了一種基于BLE+位置指紋的停車場內導航系統。利用BLE+位置指紋的方式實現用戶定位。通過建立位置指紋庫的方式,記錄停車場中不同位置的RSSI 數值。用戶手機掃描到藍牙基站周期性發送的藍牙廣播,使用卡爾曼濾波處理數據。再使用KNN 最近鄰算法進行用戶位置的推算,并將推算結果上傳至服務端。服務端使用弗洛伊德算法實現出發點到停車位的最短路徑規劃,為用戶出行提供可視化的路線導航。
硬件系統設計上,在停車場現場布設監測端,檢測端使用高速Linux 單板計算機為核心的控制系統,外接攝像頭捕獲車牌圖像,調用車牌識別算法掃描識別,并將掃描識別的結果打包成數據包,通過數據傳輸單元上傳至服務器后臺。在停車場布設多個藍牙基站,基站基于CC26x2r1 芯片為核心開發,周期性地發送穩定的藍牙廣播,進入停車場的用戶移動設備接收基站廣播,采集基站藍牙信號強度RSSI 值,將搜集到的RSSI 數據實時上傳到云端服務器。系統整體框架如圖1 所示。

圖1 系統整體框架
在軟件設計上,云端獲取用戶APP 上發送的RSSI 數據,調用卡爾曼濾波、KNN、指紋庫對比等算法進行數據處理,計算用戶車輛位置,并將計算結果上傳至服務端,服務端以微服務框架為主要架構。客戶端向服務端實時發送數據獲取請求,進行位置數據獲取,客戶端獲取位置數據后,將用戶位置信息渲染至App 界面,實時展示用戶當前位置。
用戶在停車時,系統將會以最近原則推送附近的停車場信息、可用車位數量、收費標準等,供用戶選擇,幫助用戶找到合適的停車場,停放車輛。用戶進入停車場后,在手機應用程序中進入相應的停車場地圖[2]。在地圖顯示的可用車位中選擇自己所需的停車位,系統會自動將相關信息保存到本地記錄中,以便停車結束后找車時使用。用戶尋車時,系統以用戶當前位置的定位結果為起點,將存儲的停車位設置為終點,采用弗洛伊德路線規劃算法,計算出最短路徑,為用戶提供尋車的路徑導航。管理員在后臺可通過Web 端頁面實時查看可視化數據圖表,以便及時掌握停車場相關狀態,方便根據情況反饋系統管理員和及時動態調整停車場的管理調度。系統管理員可查看問題反饋,對所有停車場的整體數據情況進行導出操作,也可刪除或者添加普通管理員以及停車場信息。
詳細功能模塊劃分如圖2 所示。

圖2 系統功能模塊劃分
室內環境錯綜復雜,鋼筋混凝土墻壁對信號有著巨大的干擾。本系統通過移動端獲取藍牙基站的RSSI 值,再匹配位置指紋庫,最后確定目標的位置,減小環境因素對定位的影響。RSSI 值識別過程如圖3所示。

圖3 RSSI 值識別過程
系統在布設時首先確定藍牙基站在停車場中的位置,部署藍牙基站時要求藍牙信號盡可能覆蓋整個停車場。藍牙發出的廣播信號和RSSI 信號會隨著距離而衰減,所以需要對RSSI 信號要做離線采集處理,本文對停車場定位系統進行了部署實測,藍牙基站經測試調整后的布局圖如圖4 所示。

圖4 藍牙基站布局圖

圖5 卡爾曼濾波前后的對比
停車場的定位指紋庫建立過程如下:
(1)所有的網關節點向其所覆蓋的網絡周期性發送廣播信息,包含自身節點 ID 及基站的坐標位置。網絡內的信標節點收到廣播信息后,對同一網關節點的 RSSI 取均值,并記錄與各網關節點的距離。
(2)所有的網關節點對信標節點回復的RSSI 數值進行濾波處理。
(3)各信標節點建立自己的優選信標節點列表。
(4)根據信標節點建立虛擬的信標節點列表并對各虛擬信標節點進行編號。
可以對經過離線處理的信標節點建立定位指紋庫,再進行在線使用,通過與指紋庫匹配就可以得到最合理的目標位置。
在現實復雜環境中,藍牙信號會受到其他信號源的干擾,其強度會動態變化,呈現不規則信號強度衰減,無法按照標準的無線電信號傳播模型進行計算。卡爾曼濾波算法在線性問題以及信號過濾方面卓有成效,因此,本系統選擇使用卡爾曼濾波算法對接收到的藍牙信號強度值RSSI 進行處理。
(1)多個藍牙基站獲取到同一移動設備的RSSI 數值,通過得到當前數據的高斯噪聲方差;
(3)計算出估計值:
RSSI 經過過濾后,波形較原始波形有了明顯的改善。得到的數據在濾除可能的誤差因素影響后,更加精確。
其他過濾方法,如均值濾波,連續采集一段時間,獲取短時間內的RSSI 均值。這些方法雖然可以在一定程度上減小干擾導致的誤差,但是在出現較大的波動時,依然將較大波動計算在內,會影響指紋采集的精確度。卡爾曼濾波算法以預測的形式,結合預測值和測量值,可以得到當前狀態(k)的最優化估算值,擬合出數值更加平滑,可以有效避免大的波動值對測量數據的影響。
本文系統考慮到藍牙信號在常規環境下衰減帶來的巨大誤差,往往產生10dbm 的偏移。因此系統在錄入位置指紋信息時,采用分割區域塊的方式進行。將停車場分割成多個長寬相等的正方形區域。測量單個區域塊時,通過移動藍牙設備采集當前區域塊藍牙信號最強的三個藍牙基站信號數據,實時上傳藍牙RSSI 數據信息。通過卡爾曼濾波處理后繪制圖像,當圖像穩定在0dbm~5dbm 左右時,則將當前三組數據作為當前區域塊的RSSI 特征值并進行數據持久化處理。后續則是將移動藍牙設備采集處理后的數據與特征值進行匹配,從而找到特征值所對應的區塊實現室內定位。
信號的RSSI 或者接收功率取決于接收器的位置。RSSI的獲取很簡單,因為它是大多數無線通信設備正常運行中所必需的。很多通信系統需要RSSI 信息用來感知鏈路的質量,實現切換,適應傳輸速率等功能。RSSI 不受信號帶寬的影響,因此RSSI 是一個很受歡迎的信號特征,并廣泛應用于定位中。在本文系統中我們通過RSSI 為基礎元素構建指紋庫,通過移動藍牙設備掃描獲取固定位置上的藍牙基站的藍牙RSSI 數值以每組50 個為單位共獲取10 組,通過卡爾曼濾波數據過濾后,用平均分獲得平均特征,傳遞給服務器。并錄入相關位置坐標服務器構建藍牙位置指紋庫。
效果如表1 所示。

表1 位置坐標信息
用戶在進入停車場后,手機端會收集各個藍牙信標的RSSI 數據值,然后將實時采集到的數據值與指紋庫中進行匹配算法的比較,選取指紋庫的最佳參考點。本文選取的匹配算法為KNN 最近鄰算法[1],選取K 個相似度最高的位置指紋所對應的參考點的坐標。其中K 值的取值十分重要,K值較小,整體模型就會變復雜,易發生過擬合現象,K 值較大,更多的點影響著實驗結果,增大了誤差,為此采取了交叉驗證來選定K 的最佳值,最終得出K=3 時系統誤差最小,示意圖如圖6 所示。

圖6 指紋對比示意圖
藍牙基站實時采集到的數據為[R1,R2,R3],Ri 為當前不同藍牙基站監測到的同一藍牙移動設備的RSSI 值。藍牙基站將采集到的R 值與數據庫中的參考點數據(S1、S2、S3)進行對比。計算當前采集值與參考值之間的歐氏距離D 為:
通過計算,可以得到多個歐式距離D,選取三個距離最小的位置指紋所對應的參考點,然后獲取該參考點在位置指紋庫記錄的位置坐標。
本文系統的路徑規劃主要采用的是弗洛伊德最短路徑規劃算法,首先采用路徑點法對路徑進行建模,將物理的數據路徑抽象為能進行路徑規劃計算的數據結構模型。本文系統將停車場平面圖中的關鍵節點標上序號,經過數字轉化得到圖7。

圖7 停車場關鍵節點數字化
接下來進行路徑規劃的第二個階段,路徑搜索。任意一點i 到另一點j 的路徑只有兩條,一種是i 點直接到達j 點,另一種則是i 點先到其他點再到j 點。定義二維數組G[i][j],設G[i][j]為點u 到點v 的最短距離。那么只需要設中間點K,對全部頂點進行遍歷,判斷任意一點i 到任意點j 的距離G[i][j]是否會大于經過點k 的距離G[i][k]+G[k][j],如果大于,那么就將G[i][j]重新賦值為G[i][k]+G[k][j]。最后遍歷G[i][j]獲取最短路線集。根據最優路徑中的路徑結果信息提供給用戶端,在地圖上顯示,進而提供給用戶導航指示。
本文設計了基于低功耗藍牙BLE+位置指紋實現定位的室內停車導航系統。采用建立指紋庫并輔以卡爾曼濾波算法、KNN 最近鄰算法,獲取用戶位置。通過弗洛伊德路線規劃算法進行最短路徑規劃。移動端APP 采用flutter 跨平臺開發框架,可以有效兼容當前手機,具有很好的便利性。用戶在停車過程中,可以根據停車場信息,選擇合適的停車位置。在完成停車后,系統進行車位記錄。尋車過程中主要實現了室內定位與最短路徑導航。綜上所述,系統能夠很好地解決室內停車場目標車輛的定位、導航問題,打通了室外與室內地圖信息的隔閡[5],具有良好的應用前景。