顧一凡,戴麗華
(蘇州工業(yè)職業(yè)技術(shù)學(xué)院,江蘇蘇州, 215104)
為了追逐智能化,便捷化,微型化的潮流。為了解決一些復(fù)雜空間內(nèi)人員容易迷路走失的情況和導(dǎo)游式游覽導(dǎo)致的聽不到、聽不全介紹等問(wèn)題。便設(shè)計(jì)了iBeacon智能導(dǎo)游系統(tǒng)。它是基于Android平臺(tái)開發(fā)的App,利用iBeacon作為信標(biāo),組成信標(biāo)覆蓋網(wǎng)絡(luò),采集相關(guān)數(shù)據(jù)傳輸給終端,通過(guò)終端對(duì)相關(guān)數(shù)據(jù)的處理從而實(shí)現(xiàn)定位導(dǎo)游的作用
它可以很好地解決以上問(wèn)題。同時(shí)可以在適當(dāng)?shù)膮^(qū)域進(jìn)行人性化的提示和講解(如:提示消息臺(tái)階、地滑等)。為用戶的安全提供了一定的保障,也兼顧身體殘疾的特殊用戶。使用戶進(jìn)行無(wú)障礙游覽的同時(shí)獲取某個(gè)區(qū)域一定的相關(guān)知識(shí)。該技術(shù)可以面向很多場(chǎng)景??梢詾楣鞠蛐氯私榻B環(huán)境,為游客游覽場(chǎng)館提供了高效、便捷的智能服務(wù),實(shí)現(xiàn)了導(dǎo)航介紹一體化。
圖1為系統(tǒng)的框圖設(shè)計(jì)。整個(gè)系統(tǒng)分為三個(gè)模塊,分別是,數(shù)據(jù)處理模塊、UI顯示模塊、數(shù)據(jù)庫(kù)模塊,數(shù)據(jù)處理模塊主要通過(guò)RSSI算法,蟻群算法等實(shí)現(xiàn)對(duì)傳輸過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理最后得到我們所在是位置坐標(biāo)。依據(jù)數(shù)據(jù)坐標(biāo)利用相關(guān)算法實(shí)現(xiàn)對(duì)多個(gè)路徑的智能篩選,從而實(shí)現(xiàn)智能導(dǎo)航的目的。UI模塊主要是起人機(jī)互動(dòng)的作用,它以通俗易懂的顯示方式告知用戶所在位置,同時(shí)它集成了多種輔助功能(如:自定義節(jié)點(diǎn)添加、地圖導(dǎo)入等)可以適應(yīng)用戶的各種要求。數(shù)據(jù)庫(kù)模塊主要是存儲(chǔ)數(shù)據(jù)、地圖以及相關(guān)參數(shù)的,為數(shù)據(jù)處理提供后臺(tái)支持。三個(gè)模塊相互配合實(shí)現(xiàn)整個(gè)導(dǎo)游系統(tǒng)
圖1 系統(tǒng)設(shè)計(jì)框圖
在整個(gè)算法設(shè)計(jì)上,主要注意數(shù)據(jù)的準(zhǔn)確性,為了提高數(shù)據(jù)的準(zhǔn)確性,引入了多組數(shù)據(jù)處理篩選的算法,同時(shí)對(duì)已經(jīng)接收處理過(guò)的數(shù)據(jù)進(jìn)行逆運(yùn)算比對(duì)進(jìn)一步鞏固數(shù)據(jù)的可靠性,最后利用人工智能中的蟻群算法實(shí)現(xiàn)智能篩選路線的作用。
想要實(shí)現(xiàn)系統(tǒng)的定位與導(dǎo)游,就必須測(cè)算出信標(biāo)與終端之間的直線距離。本系統(tǒng)通過(guò)接收RSSI信號(hào)值推算信標(biāo)與終端的相對(duì)距離。
RSSI信號(hào)之所以可以測(cè)距是因?yàn)樾盘?hào)在傳輸過(guò)程中必定會(huì)有損耗,電磁信號(hào)也不例外。而測(cè)距就是利用的這一點(diǎn)。無(wú)線電波在介質(zhì)中傳播,隨著距離的不斷增加信號(hào)的強(qiáng)度也不斷地減弱。根據(jù)iBeacon信標(biāo)發(fā)出的固定功率和接收器接收的功率,通過(guò)信號(hào)與距離之間的衰減模型,就可以較為準(zhǔn)確地算出iBeacon信標(biāo)和信號(hào)接收器之間的距離。他們的衰減模型如圖2所示。
圖2 衰減模型
根據(jù)電磁低噪水平締造公式可以得出RSSI的無(wú)線信號(hào)衰減信號(hào)模型公式,如下所示:
其中,ρ(d)為距離信號(hào)發(fā)射器距離為d的接收器接收到的RSSI信號(hào)值,d則為發(fā)射器與接收器之間的距離。ρ(r)為距離信號(hào)發(fā)射器距離為r的接收器接收到的RSSI信號(hào)值,其為參考值一般不會(huì)變動(dòng)。r為參考距離。η為環(huán)境因子,與傳播介質(zhì)有關(guān),有障礙物時(shí)變動(dòng)明顯。
三角定位算法是用來(lái)通過(guò)RSSI值以及SQLite數(shù)據(jù)庫(kù)中的信標(biāo)坐標(biāo),計(jì)算出用戶所在坐標(biāo)的一種定位方式。三邊定位則是用來(lái)檢驗(yàn)的,原理是對(duì)用戶移動(dòng)產(chǎn)生的變化坐標(biāo)進(jìn)行取樣,利用三組或者三組以上的采樣坐標(biāo)進(jìn)行逆推導(dǎo),推導(dǎo)信標(biāo)坐標(biāo),與SQLite數(shù)據(jù)庫(kù)中的坐標(biāo)對(duì)比,從而判斷數(shù)據(jù)是否準(zhǔn)確。
假設(shè)三個(gè)信標(biāo)坐標(biāo)為A(xα,yα),B(xβ,yβ),C(xγ,yγ),需要計(jì)算的終端坐標(biāo)為M(x,y),建立定位數(shù)學(xué)模型如圖3所示。
圖3 三角定位模型
通過(guò)之前的RSSI算法可以知道AM,BM.CM的距離為1r,2r,3r。列出三個(gè)距離公式:
這個(gè)方程組的解集即為終端M的坐標(biāo)。但是為了使坐標(biāo)更加的準(zhǔn)確,利用線性代數(shù)的方法做回歸分析,充分發(fā)揮每一個(gè)數(shù)據(jù)的價(jià)值,具體方法如下:
將第一個(gè)方程減第三個(gè)方程,第二個(gè)方程減第三個(gè)方程得:
寫成Ax=B的形式:
最后利用最小二乘估計(jì)法(Least square estimation)得到終端M坐標(biāo)。
在整個(gè)iBeacon信標(biāo)定位網(wǎng)絡(luò)中,會(huì)設(shè)立幾個(gè)固定的信標(biāo)驗(yàn)算測(cè)試點(diǎn),這些測(cè)試點(diǎn)均勻分布在網(wǎng)絡(luò)內(nèi),并且它們與附近幾個(gè)信標(biāo)的距離為定值寫入數(shù)據(jù)庫(kù)中,假設(shè)測(cè)試點(diǎn)坐標(biāo)為A(xα,yα),當(dāng)用戶帶著終端在網(wǎng)絡(luò)中移動(dòng)時(shí),系統(tǒng)會(huì)每隔一秒對(duì)終端所在坐標(biāo)和此時(shí)的RSSI值進(jìn)行取樣一次。將樣本中最近兩次取得的坐標(biāo)記為B(xβ,yβ),C(xγ,yγ),建立驗(yàn)算數(shù)學(xué)模型如圖4所示。
圖4 三邊定位算法模型
利用距離公式算出任意兩點(diǎn)之間的距離r,計(jì)算公式如下:
假設(shè)需要計(jì)算的信標(biāo)的坐標(biāo)為D(xδ,yδ) (未知),AD 長(zhǎng)度可以直接在數(shù)據(jù)庫(kù)中查的為L(zhǎng)?,BD長(zhǎng)度通過(guò)取樣的RSSI值得Lι,CD長(zhǎng)度通過(guò)取樣的RSSI值得Lκ。通過(guò)余弦定理就可以求出∠ADB、∠BDC、∠CDA的值,推導(dǎo)過(guò)程如下:
以點(diǎn)A;B;D確定一個(gè)圓O2,并設(shè)其坐標(biāo)O2(x2,y2)。半徑為r2,通過(guò)等腰三角形的特性,可得:
根據(jù)圓的特性列以下方程組:
注:圓心坐標(biāo)O2(x2,y2),半徑為r2。
同理可以算出圓心O1(x1,y1)和O3(x3,y3);半徑r1和r3,再通過(guò)上述三邊定位算法即可得到D點(diǎn)終端坐標(biāo)。將D點(diǎn)終端坐標(biāo)和數(shù)據(jù)庫(kù)中終端坐標(biāo)對(duì)比,在一定誤差范圍內(nèi)則定位準(zhǔn)確,超出范圍則定位錯(cuò)誤,自動(dòng)舍棄定位結(jié)果,并上報(bào)維修人員。
有了坐標(biāo)接下來(lái)就是擬合最優(yōu)導(dǎo)游路線,本系統(tǒng)使用蟻群算法擬合最優(yōu)路徑。
算法大致是這樣的:首先會(huì)有幾只第一批螞蟻放入地圖當(dāng)中,這些螞蟻會(huì)邊移動(dòng)邊釋放信息素。當(dāng)他們遇到分叉路口時(shí),會(huì)隨機(jī)選擇其中一條路徑行走。在不同的路徑上行走會(huì)釋放不同的信息素。當(dāng)選擇的路徑距離長(zhǎng)時(shí),螞蟻釋放的信息素的濃度就會(huì)低。接著第二批螞蟻會(huì)釋放到地圖中,當(dāng)它們遇到岔路口時(shí),將根據(jù)前面一批螞蟻留下的信息素濃度進(jìn)行選擇,他們會(huì)選擇信息素濃度高的地方行進(jìn)。最后信息素最多的那條路徑即為最佳路徑。詳細(xì)步驟如下:
第一步:初始化變量,首先初始化問(wèn)題規(guī)模(信標(biāo)個(gè)數(shù)),其次定義完全圖的賦權(quán)鄰接矩陣,然后計(jì)算設(shè)置信息素矩陣,并計(jì)算啟發(fā)因子,最后設(shè)立迭代器,分別更新迭代次數(shù),路線長(zhǎng)度,路線最佳路線,平均路線。
第二步:利用隨機(jī)函數(shù)將m個(gè)螞蟻隨機(jī)投放入n個(gè)信標(biāo)中。
第三步:m只螞蟻依照概率函數(shù)選擇將要前往的下一個(gè)地點(diǎn),完成自己的循環(huán)。記錄已訪問(wèn)信標(biāo)(自己所在信標(biāo)不算),計(jì)算帶訪問(wèn)信標(biāo)的概率分布。螞蟻選擇概率大的路徑,形成對(duì)應(yīng)的概率原則并且前往下一個(gè)地點(diǎn)。地點(diǎn)經(jīng)過(guò)螞蟻個(gè)數(shù)累加。
第四步:記錄本次迭代的最佳路線。計(jì)算出本輪螞蟻?zhàn)哌^(guò)的最短路徑并迭代最佳路徑和路徑平均值。
第五步:更新信息素,開始時(shí)信息素為n*n的0矩陣,之后在循環(huán)中增加(i, j)路徑上的信息素和整條路徑上的信息素。并更新信息素,以免信息素?fù)]發(fā)。
第六步:當(dāng)?shù)螖?shù)達(dá)到了預(yù)先輸入的迭代次數(shù)后,整個(gè)禁忌表清空。
第七步:輸出結(jié)果。
通過(guò)這些步驟,系統(tǒng)就可以擬合出一條比較節(jié)約時(shí)間的道路,從而實(shí)現(xiàn)自動(dòng)導(dǎo)游的效果。在MatLab上模擬結(jié)果如圖5所示。
圖5 導(dǎo)航節(jié)點(diǎn)優(yōu)化問(wèn)題優(yōu)化結(jié)果和平均值與距離最短值比較
本課題研究的是iBeacon的定位導(dǎo)游系統(tǒng),整個(gè)系統(tǒng)的運(yùn)行要經(jīng)過(guò):數(shù)據(jù)精細(xì)化處理,定位與核算,數(shù)據(jù)庫(kù)數(shù)據(jù)提取與存儲(chǔ),UI顯示等一系列過(guò)程。
對(duì)數(shù)據(jù)精準(zhǔn)化處理分為基站處理和數(shù)據(jù)包處理兩方面:
基站處理:首先判斷附近基站的個(gè)數(shù),本文利用.size方法,確定現(xiàn)在列表中基站的數(shù)量,然后通過(guò)數(shù)量進(jìn)行如下判斷:如果基站個(gè)數(shù)少于3個(gè)則返回不能定位,如果基站數(shù)量大于3個(gè)則取RSSI數(shù)值最大的3個(gè)進(jìn)行定位。
數(shù)據(jù)包處理:先對(duì)每一個(gè)擁有一樣Id的列表中的RSSI進(jìn)行冒泡排序,得到一個(gè)從小到大的RSSI的列表。如果RSSI數(shù)據(jù)個(gè)數(shù)小于三個(gè)則求其平均值。若RSSI數(shù)據(jù)個(gè)數(shù)大于等于3個(gè)則將新列表中的RSSI數(shù)據(jù)先去頭去尾,如果剩下的RSSI的值只有一個(gè),那么這一個(gè)RSSI值直接返回list對(duì)象。如果RSSI的值的個(gè)數(shù)小于4個(gè)大于1個(gè)則取其中位數(shù)并返回list對(duì)象。如果RSSI的值的個(gè)數(shù)大于4個(gè)則返回list對(duì)象的值為:
其中k為RSSI數(shù)據(jù)總數(shù)。in為第i個(gè)RSSI數(shù)據(jù)值。
通過(guò)上述處理好的RSSI數(shù)據(jù)組并結(jié)合SQLite數(shù)據(jù)庫(kù)中的信標(biāo)虛擬坐標(biāo),利用三角定位算法可以計(jì)算出用戶終端對(duì)應(yīng)坐標(biāo),系統(tǒng)會(huì)每隔一秒對(duì)終端所在坐標(biāo)和此時(shí)的RSSI值進(jìn)行取樣一次,利用兩個(gè)取樣的終端坐標(biāo)和一個(gè)測(cè)試點(diǎn)坐標(biāo)以及RSSI值,通過(guò)三邊定位算法回推信標(biāo)的實(shí)際坐標(biāo),最后通過(guò)信標(biāo)的實(shí)際坐標(biāo)和信標(biāo)在SQLite中的虛擬坐標(biāo)進(jìn)行比對(duì),如果在合理范圍內(nèi)則繼續(xù)輸出用戶坐標(biāo),如果超出范圍將自動(dòng)報(bào)告維修人員進(jìn)行檢修,并且不再采納上一組Id的信標(biāo)提供的數(shù)據(jù)。過(guò)程如圖6所示。
圖6 定位與核算
如圖7所示,數(shù)據(jù)庫(kù)最重要的兩個(gè)功能莫過(guò)于數(shù)據(jù)的存儲(chǔ)與提取,在整個(gè)系統(tǒng)中,把要被提取的數(shù)據(jù)分為兩大類:必要系統(tǒng)存儲(chǔ)信息和非必要便捷存儲(chǔ)信息。必要系統(tǒng)存儲(chǔ)信息對(duì)應(yīng)整個(gè)系統(tǒng)來(lái)說(shuō)是非常重要的,它關(guān)系到系統(tǒng)是否能正常運(yùn)作。在整個(gè)系統(tǒng)中信標(biāo)的虛擬坐標(biāo)、信標(biāo)的Id等信息都是必要系統(tǒng)存儲(chǔ)信息。而非必要便捷存儲(chǔ)信息則是為了方便用戶,實(shí)現(xiàn)人機(jī)交互等功能而存在的,它不會(huì)影響整個(gè)系統(tǒng)的運(yùn)行,但會(huì)影響整個(gè)用戶的體驗(yàn)。在整個(gè)系統(tǒng)中地圖存儲(chǔ)、下載功能對(duì)應(yīng)的數(shù)據(jù)等都是非必要便捷存儲(chǔ)信息的一部分。當(dāng)然,兩種存儲(chǔ)信息也有交集,例如下載模塊中的虛擬坐標(biāo)等。
圖7 數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)與提取
UI界面是底層代碼與用戶溝通的橋梁,一個(gè)優(yōu)秀的UI界面可以簡(jiǎn)潔明了地顯示用戶所需要的信息。將整個(gè)APP的UI被分為4個(gè)模塊,分別為設(shè)備模塊,地圖模塊,添加模塊,下載模塊。設(shè)備模塊是用來(lái)告知用戶自己所在位置的,例如在×××樓×層××房間,定位功能也是在這個(gè)模塊表達(dá)的。用戶不僅可以通過(guò)這個(gè)模塊知道自己所在位置,而且可以通過(guò)該模塊知道附近的建筑名稱、房間、相對(duì)用戶的距離等信息。地圖模塊是用來(lái)告知用戶自己所在的建筑在整個(gè)建筑群中的具體位置的。它可以方便用戶尋找目的地建筑,同時(shí)在地圖模塊中會(huì)以點(diǎn)的形式出現(xiàn)在地圖上,使方向感不好的用戶也不容易走錯(cuò)方向。UI界面如圖8所示。
圖8 設(shè)備模塊與地圖模塊
圖9 添加模塊和下載模塊
添加模塊是用來(lái)給用戶自定義的,其大大提升了該系統(tǒng)的應(yīng)用范圍,用戶可以通過(guò)自己輸入信標(biāo)的UUID,虛擬坐標(biāo)等信息實(shí)現(xiàn)信標(biāo)定位網(wǎng)絡(luò)的搭建。同時(shí)通過(guò)該功能也可以對(duì)已有網(wǎng)絡(luò)中信標(biāo)進(jìn)行重定義或更換,使信標(biāo)更換和重定義更加得方便快捷。下載模塊是為了提升系統(tǒng)應(yīng)用廣度的同時(shí)增加用戶群體,使看不懂參數(shù)不會(huì)DIY的用戶可以直接下載對(duì)應(yīng)地區(qū)的集成模塊使用。只需要知道所在環(huán)境的名稱,在下載模塊中尋找到這個(gè)模塊,一鍵下載就可以享受在該區(qū)域的定位導(dǎo)游服務(wù)。
整個(gè)研發(fā)過(guò)程中,對(duì)算法的要求比較高,主要研究了如何通過(guò)取樣后的逆向算法實(shí)現(xiàn)整個(gè)系統(tǒng)的自我檢測(cè),從而提高整個(gè)系統(tǒng)的精準(zhǔn)度和智能化水平,這也是本文的創(chuàng)新所在。在設(shè)計(jì)之前查閱了大多數(shù)的資料,基本上以往所有的iBeacon定位系統(tǒng)都沒有自我檢測(cè)的功能,大部分都只是通過(guò)計(jì)算平均值之類的方法不斷地加強(qiáng)數(shù)據(jù)的準(zhǔn)確程度。本文算法不僅采納了以往提升數(shù)據(jù)精度的方法,還提出了檢測(cè)的方法,軟件依賴信標(biāo)定位,同時(shí)可以反向檢測(cè)信標(biāo)的位置是否有問(wèn)題。
同樣在UI設(shè)計(jì)方面,改變了以往只有幾個(gè)按鈕的死板UI界面。加強(qiáng)了人機(jī)互動(dòng)的能力。同時(shí)添加了以往APP都沒有的下載功能。使整個(gè)APP的局限性被打破,不像以往的APP,每到達(dá)一個(gè)新的地方都需要下載一個(gè)新的APP。而本軟件可以多場(chǎng)景使用,只要下載功能中有該地方的地圖。當(dāng)然為了方便一些專業(yè)人士和電子愛好者,也設(shè)計(jì)出了開發(fā)者模式(添加設(shè)備模塊),用戶可以利用自己的iBeacon進(jìn)行測(cè)試研究。
為了彌補(bǔ)市內(nèi)衛(wèi)星導(dǎo)航的信號(hào)缺陷,降低復(fù)雜空間內(nèi)人工導(dǎo)游的成本,解決導(dǎo)游式游覽導(dǎo)致的介紹內(nèi)容聽不清、聽不全等問(wèn)題,提出并設(shè)計(jì)了iBeacon智能導(dǎo)游系統(tǒng)。它可以輕松實(shí)現(xiàn)一定范圍內(nèi)的導(dǎo)航定位,并且可以實(shí)時(shí)向外界推送消息,從而實(shí)現(xiàn)智能引路,智能介紹的功能。同時(shí)可以在適當(dāng)?shù)膮^(qū)域進(jìn)行人性化的提示和講解(如:提示消息臺(tái)階、地滑等)。為客戶的安全提供了一定的保障,也方便了一些身體殘疾的客戶。使客戶進(jìn)行無(wú)障礙游覽的同時(shí)獲取某個(gè)區(qū)域一定的相關(guān)知識(shí)。該技術(shù)可以面向很多場(chǎng)景??梢詾楣鞠蛐氯私榻B環(huán)境,為游客游覽場(chǎng)館提供了高效、便捷的智能服務(wù),實(shí)現(xiàn)了導(dǎo)航介紹一體化。