曾森烽,楊楓,王艷乾,邱樹偉
(韓山師范學(xué)院計(jì)算機(jī)與信息工程學(xué)院,潮州 521041)
基于WiFi指紋的室內(nèi)定位技術(shù)是當(dāng)前室內(nèi)定位的主流技術(shù),該技術(shù)在智慧樓宇建設(shè)中有著極其重要的作用。對(duì)智慧樓宇中的WiFi設(shè)備進(jìn)行定位是實(shí)現(xiàn)各項(xiàng)基于位置的服務(wù)的重要基礎(chǔ)。
當(dāng)前,基于WiFi的室內(nèi)定位技術(shù)已有較為成熟的研究與開發(fā)案例。潘有順等[1]設(shè)計(jì)了基于WiFi室內(nèi)定位的樓宇智能照明控制系統(tǒng),該系統(tǒng)通過無線信號(hào)測距技術(shù)對(duì)人員進(jìn)行定位,同時(shí)向照明設(shè)備分發(fā)開啟/關(guān)閉等控制指令,實(shí)現(xiàn)對(duì)照明設(shè)備的智能控制。朱正偉等[2]針對(duì)WiFi信號(hào)強(qiáng)度容易受室內(nèi)環(huán)境變化以及多徑效應(yīng)的影響這一問題,采用網(wǎng)格法劃分定位區(qū)域,用奇異譜分析方法消除采集數(shù)據(jù)中的波動(dòng)和干擾。同時(shí),采用高斯過程回歸算法構(gòu)建指紋數(shù)據(jù)庫,提高了定位精度。祝文飛等[3]指出,全球定位系統(tǒng)和蜂窩網(wǎng)絡(luò)系統(tǒng)無法滿足高精度的室內(nèi)定位需求。為解決這一問題,該文提出基于位置指紋的WiFi定位技術(shù),通過引入與AP信號(hào)強(qiáng)弱相關(guān)的目標(biāo)函數(shù),提高了定位精度。為提高出行效率,陳婷婷等[4]開發(fā)基于WiFi定位的地鐵到站提醒系統(tǒng)。該系統(tǒng)通過App實(shí)時(shí)監(jiān)測地鐵Wi Fi信號(hào)的MAC地址,實(shí)現(xiàn)地鐵定位和到站提醒服務(wù)。為提高地下停車位的利用率,陳曉玉等[5]基于WiFi位置指紋設(shè)計(jì)了一套地下停車場車輛定位系統(tǒng)。通過與App相結(jié)合,該系統(tǒng)能夠準(zhǔn)確定位車輛位置,方便用戶及時(shí)查看停車場空位信息,提高了地下車位的利用率。此外,為分析室內(nèi)大型活動(dòng)人群的移動(dòng)軌跡,徐洋等[6]提出了一種基于混合三邊測量和RSSI(re?ceived signal strength indication,RSSI)的 定 位方法,該方法可實(shí)現(xiàn)人員定位、人流量分析和人群劃分等功能,為大型室內(nèi)場館的管理人員提供決策支持。
上述技術(shù)方案主要以“服務(wù)端+移動(dòng)App”架構(gòu)為主,尚缺乏對(duì)小程序的支持。為了彌補(bǔ)這一空白,本文設(shè)計(jì)了基于Spring Boot和小程序的Wi Fi室內(nèi)定位系統(tǒng)。本系統(tǒng)前端采用微信小程序進(jìn)行開發(fā),服務(wù)端采用Spring Boot+MyBatis+Spring MVC進(jìn)行開發(fā)?;诒鞠到y(tǒng),用戶可通過微信小程序采集周圍WiFi信號(hào)的強(qiáng)度并將其傳輸給服務(wù)端,服務(wù)端實(shí)時(shí)地將用戶的位置計(jì)算出來,并將位置信息發(fā)送到前端進(jìn)行渲染和顯示。本系統(tǒng)的開發(fā)和應(yīng)用有助于提高WiFi室內(nèi)定位服務(wù)的便捷性。
系統(tǒng)的總體框架采用分層設(shè)計(jì),主要包括運(yùn)行環(huán)境、數(shù)據(jù)庫、數(shù)據(jù)層、業(yè)務(wù)層、表示層以及微信小程序。上述前四層運(yùn)行于服務(wù)端,后兩層運(yùn)行于前端。系統(tǒng)的總體框架如圖1所示。
圖1 系統(tǒng)的總體框架
系統(tǒng)工作流程主要包含兩個(gè)階段。
(1)建立WiFi指紋庫。在定位功能實(shí)現(xiàn)之前,需要先建立目標(biāo)區(qū)域中所選定的參考點(diǎn)的WiFi指紋庫,為后續(xù)位置估算奠定基礎(chǔ)。
(2)實(shí)時(shí)定位。用戶在目標(biāo)區(qū)域中的某個(gè)地點(diǎn)實(shí)時(shí)獲取各WiFi信號(hào)的RSSI并將這些RSSI數(shù)據(jù)傳輸?shù)椒?wù)端。服務(wù)端通過與指紋數(shù)據(jù)庫交互并調(diào)用定位算法(見1.2節(jié))計(jì)算出用戶當(dāng)前的位置,然后將位置信息傳送到前端進(jìn)行渲染和顯示。
本系統(tǒng)的核心是實(shí)現(xiàn)定位功能。定位功能位于本系統(tǒng)的業(yè)務(wù)層,該層包括用戶管理、WiFi指紋庫建設(shè)、位置計(jì)算以及誤差統(tǒng)計(jì),具體內(nèi)容如下:
(1)用戶管理。包括用戶注冊(cè)以及用戶授權(quán)登錄。
(2)Wi Fi指紋庫建設(shè)。在目標(biāo)區(qū)域中,先選取一些預(yù)定的參考點(diǎn),然后對(duì)每個(gè)參考點(diǎn)所在的位置進(jìn)行多次WiFi信號(hào)采集,再對(duì)這些信號(hào)進(jìn)行處理(如取平均值、取中位數(shù)或取眾數(shù)等),最后將處理后的信號(hào)存入WiFi指紋數(shù)據(jù)庫。
以(xi,yi)表示第i個(gè)參考點(diǎn)所在的位置,以R S Sij表示在位置i所獲得的第j個(gè)Wi Fi的信號(hào)強(qiáng)度信息,i=1,2,…,m;j=1,2,…,n。則所獲得的指紋數(shù)據(jù)庫可以表示為如下m×(n+1)矩陣:
其中,第1列表示m個(gè)參考點(diǎn)的位置坐標(biāo),第2至n+1列表示m個(gè)參考點(diǎn)所對(duì)應(yīng)的n個(gè)WiFi的信號(hào)強(qiáng)度值。建立好WiFi指紋庫之后,后續(xù)將以其為依據(jù)計(jì)算用戶的實(shí)時(shí)位置。
(3)位置計(jì)算。系統(tǒng)采用KNN(K-Nearest Neighbor)進(jìn)行位置計(jì)算,具體算法如下。
1)定位算法:KNN
2)算法輸入:當(dāng)前位置的Wi Fi信號(hào)強(qiáng)度向量R=(R1,R2,…,Rn)。
3)算法輸出:當(dāng)前位置的坐標(biāo)(a,b)。
①計(jì)算各參考點(diǎn)與當(dāng)前位置的WiFi信號(hào)強(qiáng)度的距離,計(jì)算公式為:
②根據(jù)d i(i=1,2,…,m)的值進(jìn)行升序排序,并選取前K個(gè)值所對(duì)應(yīng)的參考點(diǎn)坐標(biāo)。
③計(jì)算所選取的K個(gè)參考點(diǎn)的權(quán)值ω,計(jì)算公式為:
該權(quán)值反映了不同距離對(duì)位置估算結(jié)果的貢獻(xiàn)度,即貢獻(xiàn)大的距離其權(quán)值較大,而貢獻(xiàn)小的距離其權(quán)值較小。
④估算當(dāng)前位置(a,b),計(jì)算公式為:
其中,(xi,yi)為從指紋庫中所選取的K個(gè)參考點(diǎn)之一,i=1,2,…,K。
(4)誤差統(tǒng)計(jì)。誤差為實(shí)際坐標(biāo)(x,y)和所估算的坐標(biāo)(a,b)之間的距離,于是,兩者之間的誤差為:
系統(tǒng)服務(wù)端采用Spring Boot+MyBatis+Spring MVC框架進(jìn)行開發(fā)。開發(fā)工具采用IDEA 2019.3.3,編程語言為Java,運(yùn)行環(huán)境為JDK 1.8。系統(tǒng)由config、controller、dao、model、service以及resources共六個(gè)包組成,這些包所包含的子包、類、資源文件和配套文件及其作用見表1。
表1 服務(wù)端程序結(jié)構(gòu)
如前所述,用戶可通過微信小程序進(jìn)入本系統(tǒng)主頁面并進(jìn)行注冊(cè)和登錄。用戶登錄成功之后,可以進(jìn)行如下3種操作:建立WiFi指紋庫、實(shí)時(shí)定位和誤差統(tǒng)計(jì)。小程序的實(shí)現(xiàn)主要采用微信開發(fā)者工具,編程語言采用HTML、CSS和JavaScript。同時(shí),采用微信小程序所提供的API進(jìn)行開發(fā),主要API見表2。
表2 微信小程序API
此外,小程序端的核心JS文件為culWifi.js和wifi.js,其中,culWifi.js文件主要實(shí)現(xiàn)了計(jì)算WiFi信號(hào)強(qiáng)度的平均值、中位數(shù)、眾數(shù)的函數(shù);wifi.js文件實(shí)現(xiàn)了獲取WiFi列表的函數(shù)。
系統(tǒng)的實(shí)驗(yàn)環(huán)境位于本單位的工程中心,該中心已有WiFi接入點(diǎn)一個(gè),其周邊存在10個(gè)以上WiFi接入點(diǎn),這些接入點(diǎn)的位置未知。實(shí)驗(yàn)過程中小程序從這些Wi Fi接入點(diǎn)采集RSSI數(shù)據(jù)作為指紋數(shù)據(jù)庫,并利用指紋數(shù)據(jù)庫進(jìn)行實(shí)時(shí)定位。實(shí)驗(yàn)環(huán)境的布局如圖2所示。
圖2 實(shí)驗(yàn)環(huán)境平面圖和參考點(diǎn)示意圖
4.2.1 建立WiFi指紋庫
首先,在工程中心選取20個(gè)參考點(diǎn),相鄰參考點(diǎn)之間相距1 m。所選取的參考點(diǎn)如圖2所示。然后,由實(shí)驗(yàn)人員在各個(gè)參考點(diǎn)所在位置采集Wi Fi信號(hào)強(qiáng)度。分兩輪進(jìn)行,在第一輪中,每個(gè)參考點(diǎn)采集信號(hào)的次數(shù)為5次,在第二輪則采集20次,采集間隔為0.5 s。接著,對(duì)所采集到的WiFi信號(hào)強(qiáng)度進(jìn)行計(jì)算。系統(tǒng)采用三種計(jì)算方法,分別為:取平均值、取中位數(shù)和取眾數(shù)。最后,將計(jì)算結(jié)果發(fā)送到服務(wù)端進(jìn)行存儲(chǔ)。建立指紋庫的界面如圖3所示。
圖3 建立指紋庫界面
4.2.2 實(shí)時(shí)定位
(1)由實(shí)驗(yàn)人員在目標(biāo)區(qū)域中任意選取一個(gè)點(diǎn),再通過小程序采集該點(diǎn)所接收到的WiFi信號(hào)強(qiáng)度。與建立指紋庫的過程類似,定位實(shí)驗(yàn)也是分兩輪進(jìn)行,第一輪和第二輪分別采集5次和20次。
(2)對(duì)所采集到的WiFi信號(hào)分別取平均值、取中位數(shù)和取眾數(shù)。
(3)將計(jì)算結(jié)果發(fā)送到服務(wù)端與WiFi指紋數(shù)據(jù)庫進(jìn)行匹配和估算。所采用的定位算法為KNN,且K的取值為3。在得到實(shí)時(shí)坐標(biāo)值之后,該坐標(biāo)值會(huì)自動(dòng)返回到小程序界面并顯示所定位的位置。定位界面如圖4所示(紅點(diǎn)為實(shí)際位置,黑色點(diǎn)為服務(wù)端返回的位置)。
圖4 定位界面
4.2.3 誤差分析
服務(wù)端得到定位坐標(biāo)之后,計(jì)算與實(shí)際坐標(biāo)之間的距離,即可得到定位誤差。為了更客觀地反映定位誤差,本文分別對(duì)“取平均值”“取中位數(shù)”和“取眾數(shù)”等多種WiFi信號(hào)強(qiáng)度值處理方法進(jìn)行了誤差分析,同時(shí),對(duì)不同數(shù)據(jù)采集次數(shù)(如5次和20次)也進(jìn)行了定位和誤差分析。
本文對(duì)所設(shè)計(jì)的定位系統(tǒng)進(jìn)行多方面的測試,主要從RSSI值的計(jì)算方法和RSSI采集次數(shù)兩方面進(jìn)行實(shí)驗(yàn),每一種實(shí)驗(yàn)的次數(shù)為10次,在得到每次實(shí)驗(yàn)的誤差之后,取誤差的平均值作為平均誤差。實(shí)驗(yàn)結(jié)果見表3。
表3 實(shí)驗(yàn)結(jié)果
由表3的實(shí)驗(yàn)數(shù)據(jù)可知,定位方法1的平均誤差最低,為277.304 cm,而定位方法3的平均誤差最高,為500.31 cm。定位方法1和3的可視化效果如圖5和圖6所示(五角星表示實(shí)際坐標(biāo),圓形表示定位坐標(biāo),圖中僅顯示5個(gè)實(shí)驗(yàn)點(diǎn))。
圖5 定位方法1的可視化效果
圖6 定位方法3的可視化效果
值得說明的是,在實(shí)驗(yàn)過程中,誤差相對(duì)較大的點(diǎn)主要集中于障礙物(如桌子、墻體等)的位置附近,而在相對(duì)比較空曠的位置則誤差較小。
目前,已有的WiFi室內(nèi)定位系統(tǒng)主要以“服務(wù)端+App”架構(gòu)為主,對(duì)小程序的支持不足。針對(duì)這一問題,本文設(shè)計(jì)和實(shí)現(xiàn)基于Spring Boot和小程序的WiFi室內(nèi)定位系統(tǒng),該系統(tǒng)前端采用了微信開發(fā)者工具進(jìn)行開發(fā),服務(wù)端采用Spring Boot+MyBatis+Spring MVC集成框架進(jìn)行開發(fā)。系統(tǒng)采用KNN定位算法,定位過程中WiFi的RSSI處理方法分別采用“取平均數(shù)”“取中值”和“取眾數(shù)”等。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)的平均定位誤差介于277.304 cm~500.31 cm之間,可滿足大型室內(nèi)場館定位服務(wù)的需求。本系統(tǒng)在保證較高定位精度的同時(shí),極大地提高了用戶享受WiFi室內(nèi)定位服務(wù)的便捷性。