如何用藍(lán)牙實(shí)現(xiàn)無(wú)線定位--系統(tǒng)原理及信號(hào)塔設(shè)置
一、系統(tǒng)原理
1. 簡(jiǎn)介
本項(xiàng)目將利用多個(gè)BLE4.0藍(lán)牙模塊,配合主控板、OLED顯示屏等,構(gòu)建一個(gè)無(wú)線定位系統(tǒng)。
本項(xiàng)目的系統(tǒng)構(gòu)成為:3個(gè)信號(hào)塔,1個(gè)中控臺(tái),2個(gè)被定位的目標(biāo)。

? ? ? ?無(wú)線定位的用途有很多。比如,我們可以把固定的目標(biāo)1看作等待救援的人或物,把可移動(dòng)的目標(biāo)2看作前來(lái)救援的機(jī)器人,就可以虛擬出一個(gè)救援場(chǎng)景模型。
? ? ? ?而現(xiàn)實(shí)中使用藍(lán)牙技術(shù)進(jìn)行無(wú)線定位,多見(jiàn)于商場(chǎng)、圖書(shū)館等室內(nèi)環(huán)境的定位和導(dǎo)航。比如,在商場(chǎng)內(nèi)安裝數(shù)個(gè)藍(lán)牙信號(hào)發(fā)射源;在商家門(mén)口安裝藍(lán)牙定位設(shè)備;對(duì)于顧客,則可以直接使用其智能手機(jī)的藍(lán)牙模塊,再配合一個(gè)商場(chǎng)專用的手機(jī)App或者小程序,就可以讓顧客非常方便的在商場(chǎng)內(nèi)部尋找自己想要到達(dá)的商家等。
2. 定位原理
(1)rssi無(wú)線接收信號(hào)強(qiáng)度
? ? ? ?Received Signal Strength Indication接收的信號(hào)強(qiáng)度指示,通過(guò)接收到的信號(hào)強(qiáng)弱測(cè)定信號(hào)點(diǎn)與接收點(diǎn)的距離,進(jìn)而根據(jù)相應(yīng)數(shù)據(jù)進(jìn)行定位計(jì)算的一種定位技術(shù)。
? ? ? ?RSSI是射頻信號(hào)理論術(shù)語(yǔ),主要應(yīng)用于發(fā)射機(jī)和接收機(jī)之間的距離測(cè)量。該方法是依據(jù)接收信號(hào)能量強(qiáng)度確定距離,對(duì)通信信道參數(shù)要求較高。其測(cè)距理論是:依據(jù)無(wú)線電波或聲波在介質(zhì)中傳輸,信號(hào)功率是隨傳播距離衰減的原理。根據(jù)信標(biāo)節(jié)點(diǎn)已知信號(hào)的發(fā)射功率和節(jié)點(diǎn)接收的信號(hào)功率,通過(guò)信號(hào)與距離之間的衰減模型,就可以計(jì)算出節(jié)點(diǎn)間的距離。由于信號(hào)傳播的過(guò)程中,受到距離和障礙物的影響。信號(hào)的功率強(qiáng)度隨之衰減,間接影響精度。所以要求得到良好的精度,短距離才會(huì)體現(xiàn)這一點(diǎn)。
? ? ? ?RSSI的定位技術(shù)相比于TOA、TDOA、AOA、GPS具有成本低、容易實(shí)現(xiàn)等優(yōu)勢(shì)。如果室內(nèi)定位精度要求不高,基于RSSI的定位技術(shù)完全可以滿足。而且,現(xiàn)階段對(duì)于作為節(jié)點(diǎn)的傳感器,都能夠完成發(fā)射測(cè)試信號(hào)功率的任務(wù)。主要進(jìn)行實(shí)驗(yàn)時(shí),節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,也獲取RSSI的測(cè)量值。該定位技術(shù)既無(wú)需額外硬件,又能完成復(fù)雜信息的分析處理,減小通信消費(fèi),節(jié)約成本,比較適用于無(wú)線傳感器網(wǎng)絡(luò)的定位系統(tǒng)。
幾種測(cè)距方式對(duì)比 :

(2)rssi三點(diǎn)定位算法的基本原理
? ? ? ?三點(diǎn)定位算法在需要進(jìn)行定位的空間放置3個(gè)AP(無(wú)線訪問(wèn)接入點(diǎn)),并且3個(gè)AP的位置已知,如果知道該空間內(nèi)某位置的信號(hào)強(qiáng)度則可建立信號(hào)衰減模型,根據(jù)該信號(hào)強(qiáng)度計(jì)算出該位置到三個(gè)AP的距離。使用某位置移動(dòng)設(shè)備的信號(hào)強(qiáng)度即可估算出其到附近AP的距離,如果能確定若干AP的位置,即可確定該移動(dòng)設(shè)備的位置。由于障礙物的存在,信號(hào)衰減模型在實(shí)際使用時(shí)會(huì)存在一定誤差。
已知三個(gè)點(diǎn)的坐標(biāo)和未知點(diǎn)到這三個(gè)點(diǎn)的rssi的信號(hào)值,求解未知點(diǎn)的坐標(biāo)。
首先是將rssi信號(hào)轉(zhuǎn)換為距離:
其中d為距離,單位是m。
RSSI為rssi信號(hào)強(qiáng)度,為負(fù)數(shù)。
A為距離探測(cè)設(shè)備1m時(shí)的rssi值的絕對(duì)值,最佳范圍在45-49之間。
n為環(huán)境衰減因子,需要測(cè)試矯正,最佳范圍在3.25-4.5之間。
? ? ? ?在獲取未知點(diǎn)到三個(gè)點(diǎn)的距離后,剩下的就是求解未知點(diǎn)的坐標(biāo)。我們都知道兩個(gè)圓會(huì)相交于一個(gè)或者兩個(gè)點(diǎn)(如果相交),那么三個(gè)圓如果相交的話,必然會(huì)交于一個(gè)點(diǎn)(三個(gè)探測(cè)設(shè)備在一條直線上的情況下有可能相交于兩個(gè)點(diǎn),這里不考慮),所以我們要求解的未知點(diǎn)便是以三個(gè)已知點(diǎn)為圓心,以他們與未知點(diǎn)之間的距離為半徑畫(huà)出的三個(gè)圓的交點(diǎn)。那么這個(gè)問(wèn)題就轉(zhuǎn)化為了求三個(gè)已知圓的交點(diǎn),然后如果根據(jù)圓的方程:
求解的話,是非常難求出未知點(diǎn)的坐標(biāo)的。
這里介紹另一種程序容易實(shí)現(xiàn)的計(jì)算方法:
①、判斷任意兩個(gè)圓是否相切(內(nèi)切或外切),這里可以設(shè)定一個(gè)誤差允許值d,也就是,滿足上述公式時(shí)就認(rèn)為兩個(gè)圓相切,其中d為誤差值,可以是正數(shù)或者負(fù)數(shù)。如果兩個(gè)圓相切的話,那么交點(diǎn)就比較好求解了:
;
;
? ? ? ?求解到x和y的坐標(biāo)后,只需要用第三個(gè)圓進(jìn)行驗(yàn)證,即求出這個(gè)點(diǎn)到第三個(gè)圓的圓心的距離,再和第三個(gè)圓的半徑做比較,如果在誤差允許范圍內(nèi),那么就可以認(rèn)為求得的x,y是三個(gè)圓的交點(diǎn),也就是未知點(diǎn)的坐標(biāo)。
②、沒(méi)有任意兩個(gè)圓相切,那么就先用兩個(gè)圓求解兩個(gè)交點(diǎn),如下圖:

其中A,B是兩個(gè)圓心,坐標(biāo)分別為(,
)和(
,
),C,D是兩個(gè)圓的交點(diǎn),E為AB與CD的交點(diǎn)。
其中
其中
?? ? ?? ……………………1
?? ? ?? ……………………2
等式2轉(zhuǎn)換為
? ……………………3
等式3減去等式1:
于是可以根據(jù)以下公式求得CE
我們還可以獲取E點(diǎn)的坐標(biāo)
然后我需要求得AB和CD的斜率? 和
????? //這里要注意kAB為0的情況
然后求得CD和 x 軸的夾角
這時(shí)候就可以求得C 和D
的坐標(biāo)
//這里也要注意
和
為nan的情況。
? ? ? ?至此,我們就求得了兩個(gè)圓的兩個(gè)交點(diǎn)坐標(biāo),然后只需要用這兩個(gè)點(diǎn)去第三個(gè)圓做驗(yàn)證,就可以獲得三個(gè)圓的交點(diǎn),也就是我們要求的未知點(diǎn)。
? ? ? ?當(dāng)我們基于rssi的三點(diǎn)定位算法實(shí)現(xiàn)藍(lán)牙無(wú)線定位時(shí),可按如下圖所示位置放置藍(lán)牙信號(hào)發(fā)射塔。

? ? ? ?在理想情況下,以三個(gè)定節(jié)點(diǎn)為圓心,各自與盲節(jié)點(diǎn)的距離為半徑的圓會(huì)交于一點(diǎn),但是實(shí)際測(cè)量中,因?yàn)橛姓`差因素,導(dǎo)致三組方程出現(xiàn)6個(gè)解(即三圓兩兩相交,產(chǎn)生6個(gè)交點(diǎn),如上圖。選取靠?jī)?nèi)的三個(gè)交點(diǎn)(即圖中的紅色區(qū)域),取它們的坐標(biāo)的平均值作為最終定位的盲節(jié)點(diǎn)坐標(biāo),即可完成定位。
二、信號(hào)塔設(shè)置
1. 配置BLE4.0模塊
? ? ? ?根據(jù)三點(diǎn)定位原理,本項(xiàng)目需要使用3個(gè)信號(hào)塔。3個(gè)信號(hào)塔的主體均為BLE4.0模塊,需要把BLE4.0模塊的AT指令設(shè)置為“從設(shè)備”。
方法為:
(1)給控制板刷一套空的程序。初始打開(kāi)arduino IDE或新建,都是空程序。
(2)按下圖所示連接電路,錯(cuò)誤的連接會(huì)導(dǎo)致模塊損壞。將藍(lán)牙模塊使用杜邦線連接到Bigfish擴(kuò)展板上,并將擴(kuò)展板插到控制板上。


(3)打開(kāi)Arduino的串口監(jiān)視器,輸入AT指令。
測(cè)試查詢、設(shè)置主從模式

注:該指令執(zhí)行后,會(huì)導(dǎo)致模塊延時(shí)500ms重啟。
BLE4.0模塊的完整AT指令集可以參考如何使用探索者通信模塊【https://www.robotway.com/h-col-141.html】
(4)信號(hào)塔的三個(gè)BLE4.0a藍(lán)牙模塊都設(shè)為從設(shè)備后,使用以下命令直接進(jìn)行配置。在查詢模塊的MAC地址時(shí),可以將查詢到底地址統(tǒng)一記錄在一個(gè)文本文件中,以便后續(xù)編寫(xiě)使用。(可參考《藍(lán)牙配置說(shuō)明.txt》)
信號(hào)塔設(shè)備MAC地址:
以上地址可根據(jù)自己的BLE4.0a藍(lán)牙模塊進(jìn)行修改,詳細(xì)參考《藍(lán)牙配置說(shuō)明.txt》
2. 信號(hào)塔的安裝
將配置好的BLE4.0a藍(lán)牙模塊按照下圖所示與電池盒進(jìn)行連接,用于之后安裝在信號(hào)塔中(注:紅色正極線接藍(lán)牙模塊的3.3V,黑色負(fù)極線接藍(lán)牙模塊的GND,錯(cuò)誤的連接會(huì)導(dǎo)致模塊損壞)。


用零件將其固定。


這樣的信號(hào)塔需要做三個(gè)。
3. 資料下載
資料內(nèi)容:藍(lán)牙配置說(shuō)明.txt
資料下載鏈接:https://www.robotway.com/h-col-167.html
想了解更多機(jī)器人開(kāi)源項(xiàng)目請(qǐng)關(guān)注機(jī)器譜網(wǎng)站https://www.robotway.com