無線傳感器網(wǎng)絡(luò)用于監(jiān)測系統(tǒng)中的定位算法
摘要:從硬件設(shè)計入手,介紹了自主設(shè)計的以片上系統(tǒng)(SOC)STM32W108為核心的WSN節(jié)點,在此基礎(chǔ)上采用了一種基于RSSI的加權(quán)質(zhì)心定位算法實現(xiàn)了節(jié)點的自定位。該算法將RSSI測距和質(zhì)心定位算法相結(jié)合,用測得的RSSI值作為質(zhì)心定位的加權(quán)因子,合理體現(xiàn)了不同錨節(jié)點對定位未知節(jié)點的約束力。通過測試證明,該定位方法在較少的通信開銷情況下具有較高的定位精度,且易于實現(xiàn)。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);接收信號強度指示;節(jié)點定位;加權(quán)質(zhì)心定位
無線傳感器網(wǎng)絡(luò)主要用于監(jiān)測系統(tǒng),大多數(shù)情況下,監(jiān)測到的數(shù)據(jù)必須結(jié)合實際的位置信息才有價值,這些位置信息主要包括事件發(fā)生的位置和WSN節(jié)點的位置,節(jié)點的位置是定位事件發(fā)生位置的基礎(chǔ)。獲取節(jié)點位置信息最直接的方法是采用人工部署或GPS定位,但是對于大規(guī)模的無線傳感器網(wǎng)絡(luò),由于成本的制約和應(yīng)用條件的限制,以上兩種方法實現(xiàn)起來都不理想。因此有必要采取相應(yīng)的定位算法措施來解決目前大多數(shù)應(yīng)用場合對位置信息的需求。
依據(jù)是否需要通過測量節(jié)點的距離信息把定位方法分為兩類:基于測距(rang—based)和不基于測距(rang—free)。前者是利用測量得到的距離或角度信息來進(jìn)行位置計算,主要有TOA、TDOA、AOA和RSSI;后者是利用節(jié)點的連通性和多跳路由信息交換等方法來估計節(jié)點間的距離或角度,并完成位置估計,主要有DV—Hop、質(zhì)心算法等。兩類定位算法各有優(yōu)點,相比之下,基于距離的定位算法測量精度較高但是需要額外的硬件,不基于距離的定位算法對硬件要求較低但是定位誤差較大。本設(shè)計在自主設(shè)計的節(jié)點硬件基礎(chǔ)上,采用了將RSSI測距和質(zhì)心定位方法結(jié)合起來,實現(xiàn)了節(jié)點的自定位,避免了使用單一定位方法的不足,提高了定位精度。
1 WSN節(jié)點硬件設(shè)計
1.1 節(jié)點設(shè)計方案的確定
WSN節(jié)點設(shè)汁有兩種方式:一種是NCP(network eoprocessor)——核心處理器和Zigbee網(wǎng)絡(luò)處理器分開,另一種是SOC(system on chip) ——使用包含無線射頻功能的核心處理器。傳統(tǒng)的設(shè)計大部分采用了NCP的方式,這種方式的優(yōu)勢在于應(yīng)用程序和Zigbee協(xié)議間可以分開設(shè)計,核心處理器的選擇很靈活,可以是8位的單片機,也可以是運行嵌入式操作系統(tǒng)的高級ARM,但是由于需要兩個處理器,就意味著增加了成本,且增加了節(jié)點的功耗,對于電池供電的無線傳感器網(wǎng)絡(luò)來說,增大了功耗就使得整的網(wǎng)絡(luò)的壽命減少。而SOC的方式,大大減小了功耗和成本,且隨著芯片工藝的進(jìn)步,SOC內(nèi)部的資源已經(jīng)不再是限制其使用的瓶頸。故本設(shè)計采用了SOC的方式,選用了意法半導(dǎo)體最新推出的射頻SOC—STM32W108。
1.2 STM32W108簡介
STM32W108是意法半導(dǎo)體推出的一款WSN專SOC。該芯片采用32位ARM Cortex—M3內(nèi)核,具有較強的處理能力,內(nèi)部集成了符合IEEE80 2.15.4標(biāo)準(zhǔn)的2.4 GHz射頻收發(fā)器,且芯片內(nèi)部帶有功率放大器,最大輸出功率可達(dá)7 dB,芯片內(nèi)部同化了Zigbee 2007 Pro協(xié)議棧,用戶根據(jù)ST官網(wǎng)提供的API函數(shù)就可實現(xiàn)Zigbee網(wǎng)絡(luò)節(jié)點間數(shù)據(jù)的收發(fā)。
1.3 節(jié)點硬件設(shè)計
實際設(shè)計中,選用了由上海沁科公司基于STM32W108生產(chǎn)的Zigbee模塊——EMZ3018A,該模塊采用了類似郵票孔的焊盤,可以很方便的焊接在PCB板上。圍繞著該模塊實現(xiàn)了外圍電路的設(shè)計,主要包括:電源模塊、SD卡存儲模塊、藍(lán)牙模塊、接口擴展模塊,下面分別進(jìn)行詳細(xì)介紹:
(1)電源模塊
由于STM32W108的工作電壓要求是2.1~3.6 V,而SD卡和藍(lán)牙模塊要求是33 V供電,故選擇了3.3 V輸出的低壓差線性穩(wěn)壓芯片SP620 1-3.3,它的輸出電流能達(dá)到200 mA,滿足節(jié)點正常工作的需要,而且僅需要300 mV的壓差,3.6 V的鋰電池即可滿足要求。電源電路如圖1所示。
(2)存儲模塊
考慮到節(jié)點在后期的實際監(jiān)測中需要存儲大量的數(shù)據(jù),一般的存儲芯片容量較小且價格較高,故本設(shè)計選用了大容量的存儲設(shè)備SD卡,而且SD卡支持FAT32文件系統(tǒng),存儲的數(shù)據(jù)可以直接在PC上瀆取,實際應(yīng)用中方便人工現(xiàn)場取數(shù)。同時SD卡支持SPI接口,操作方便。電路如圖2所示。
(3)藍(lán)牙模塊
藍(lán)牙模塊只在中心節(jié)點上安裝,主要是為網(wǎng)關(guān)與中心節(jié)點通信服務(wù)的。本設(shè)計選用的是BMX藍(lán)牙模塊,其操作很方便,通過串口和STM32 W108連接,網(wǎng)關(guān)通過藍(lán)牙配對成功后即可實現(xiàn)和中心節(jié)點的數(shù)據(jù)透傳。藍(lán)牙模塊電路如圖3所示。
(4)接口擴展模塊
考慮到節(jié)點的體積和實際應(yīng)用中的不同需求因而選用不同的傳感器,故將I2C接口、SPI接口、和STM32W108的內(nèi)部12位AD的6路接口引出來,做成插針封裝。使用時,在PCB上焊接雙排插針母座,然后根據(jù)需要單獨做出傳感器板插接到節(jié)點上,即可實現(xiàn)大部分傳感器的采集。
2 基于RSSI測距的加權(quán)質(zhì)心定位原理
在無線傳感器網(wǎng)絡(luò)中,根據(jù)節(jié)點的位置是否己知,將節(jié)點分為未知節(jié)點和信標(biāo)節(jié)點。未知節(jié)點表示節(jié)點在無線傳感器網(wǎng)絡(luò)的位置需要定位,而信標(biāo)節(jié)點也稱為錨節(jié)點,表示其位置已經(jīng)確定。信標(biāo)節(jié)點是通過人工事先放置好或者在節(jié)點上增加GPS模塊得到自身位置。信標(biāo)節(jié)點是未知節(jié)點定位時的參考點,但是由于功耗和成本的限制,信標(biāo)節(jié)點不能太多。
2.1 RSSI測距原理
RSSI (received signal strength indicator)測距原理:利用節(jié)點接收信號強度與節(jié)點距離成反比的關(guān)系,通過測量接收到的信號強度和已知的信道衰落模型,估算出節(jié)點之間的距離。無線信號的發(fā)射功率和接收功率之間的關(guān)系可以用式(1)表示
PR是無線信號的接收功率,PT是無線信號的發(fā)送功率,d是收發(fā)單元之間的距離,n是傳播因子,數(shù)值大小取決于無線信號傳播的環(huán)境。給上式兩邊取對數(shù)得
10lgPR=10lgPT-10n·lgd (2)
當(dāng)距離d=1 m時,PR=Pr,令10 lg RT=10 lg R=A,即是距離發(fā)射節(jié)點1 m遠(yuǎn)處的信號接收強度,將(2)式化簡為
PR(dBm)=A-10*nlgd (3)
可以看出常數(shù)A和n決定了接收信號強度和傳輸距離的關(guān)系。A值為無線收發(fā)節(jié)點相距1 m時接收節(jié)點接收到的無線信號強度值,n值是無線信號的傳播因子,這兩個值都是經(jīng)驗值,和具體使用的硬件節(jié)點和無線信號傳播的環(huán)境密切相關(guān),所以測距前必須在應(yīng)用環(huán)境中把兩個經(jīng)驗值標(biāo)定好,然后根據(jù)(3)式就可以求出距離d。
2.2 質(zhì)心定位原理
質(zhì)心定位的原理是:未知節(jié)點以所有在其通信范圍內(nèi)錨節(jié)點組成的幾何形狀的質(zhì)心作為自己的估計位置。質(zhì)心坐標(biāo)就是多邊形各頂點坐標(biāo)的平均值。
具體實現(xiàn)過程為:錨節(jié)點周期性的向鄰居節(jié)點廣播一個信標(biāo)信號,信號中包含有錨節(jié)點自身的ID和位置信息,未知節(jié)點接收到信標(biāo)信號以后將其存儲起來。當(dāng)未知節(jié)點在一段偵聽時間內(nèi)接收到來自某個錨節(jié)點的信標(biāo)信號數(shù)量超過預(yù)設(shè)的門限后,就認(rèn)為該錨節(jié)點與自身連通,最終該未知節(jié)點將自身位置確定為所有與之連通的錨節(jié)點所組成的多邊形的質(zhì)心。假設(shè)網(wǎng)絡(luò)中的n個固定錨節(jié)點坐標(biāo)為(Xi,Yi),其中1≤i ≤n,未知節(jié)點M的估測位置坐標(biāo)為(Xm,Ym),那么質(zhì)心定位計算未知節(jié)點的坐標(biāo)公式如下:
2.3 基于RSSI的加權(quán)質(zhì)心定位
傳統(tǒng)的質(zhì)心定位算法忽略了不同距離的錨節(jié)點對質(zhì)心定位精度的影響,針對傳統(tǒng)質(zhì)心定位算法的缺陷,將RSSI信息引入可以起到輔助信息的作用。其基本思想是:在確定了未知節(jié)點所在的多邊形以后,首先根據(jù)未知節(jié)點和錨節(jié)點通信時獲取到的RSSI值計算出未知節(jié)點和各個錨節(jié)點之間的距離d,然后以wi=1/di作為加權(quán)質(zhì)心定位算法中的權(quán)值,計算未知節(jié)點的坐標(biāo)。
假設(shè)網(wǎng)絡(luò)中的n個同定錨節(jié)點坐標(biāo)為(Xi,Yi),其中1≤i≤n,未知節(jié)點M的估測位置坐標(biāo)為(Xm,Ym),那么加權(quán)質(zhì)心計算公式5如下:
這樣選擇加權(quán)因子能夠體現(xiàn)出與未知節(jié)點距離不同的錨節(jié)點對未知節(jié)點定位的決定權(quán)的大小,其約束力符合加權(quán)質(zhì)心算法的要求。
3 節(jié)點定位的實現(xiàn)
3.1 定位系統(tǒng)的工作原理
節(jié)點的定位計算主要是在網(wǎng)關(guān)上完成的。本定位系統(tǒng)中采用了Android平板電腦做網(wǎng)關(guān),網(wǎng)關(guān)通過監(jiān)牙通信和中心節(jié)點上的藍(lán)牙模塊建立連接,藍(lán)牙配對成功后,中心節(jié)點將未知節(jié)點上傳的與之通信錨節(jié)點的RSSI值和對應(yīng)錨節(jié)點ID信息通過藍(lán)牙模塊無線透傳給網(wǎng)關(guān),在網(wǎng)關(guān)上進(jìn)行計算。定位系統(tǒng)原理如圖4所示。
3.2 定位實現(xiàn)的步驟
(1) RSSI值的獲取
在成功組建Zigbee網(wǎng)絡(luò)后,錨節(jié)點周期性的向周同廣播一個包含自身ID的信標(biāo)信號,在通信范圍內(nèi)的未知節(jié)點接收到信標(biāo)信號以后,通過調(diào)用API函數(shù)獲取與自己通信錨節(jié)點的RSSI值和對應(yīng)的錨節(jié)點ID號,使用的API函數(shù)主要包括:emberIneoming MessageHandler主要是處理節(jié)點接收到的信息,在這個函數(shù)里面再調(diào)用API函數(shù)emberGetSender,獲取發(fā)送節(jié)點編號(node ID):調(diào)用API函數(shù)emberGetLastHopRssi,獲取目前接收信息的信號強度;調(diào)用API函數(shù)emberSendUnicast將接收到的數(shù)據(jù)發(fā)送給中心節(jié)點,最終在中心節(jié)點調(diào)用API函數(shù)emberSerialPri ntf將數(shù)據(jù)通過串口發(fā)送給網(wǎng)關(guān)。獲取RSSI值的部分代碼如下:
在PC機上測試獲取到的RSSI值和ID節(jié)點信息,如圖5所示。
(2)定位的計算
在Android平板上提取出來與未知節(jié)點通信超過所設(shè)閾值的錨節(jié)點ID號和RSSI值,并對RSSI值求平均值,根據(jù)事先標(biāo)定出的A值和當(dāng)前環(huán)境傳播因子n,通過式計算出未知節(jié)點和每個錨節(jié)點之間的距離di,最后通過式(5)計算出未知節(jié)點的坐標(biāo)。
4 定位的測試
基于RSSI測距時需要標(biāo)定出(3)式中的常數(shù)A和傳播因子n。標(biāo)定這個兩個因素可通過星型Zigbee網(wǎng)絡(luò)來實現(xiàn),成功組網(wǎng)后將中心節(jié)點通過USB轉(zhuǎn)串口線和PC機相連,通過串口調(diào)試器觀察中心節(jié)點獲取的RSSI值和對應(yīng)子節(jié)點ID號。
4.1 A值的標(biāo)定
A值即距離發(fā)射節(jié)點1m遠(yuǎn)處接收到的信號強度,為了減小誤差,同時測量了距離中心節(jié)點1 m遠(yuǎn)的三個不同方向上中心節(jié)點和子節(jié)點通信的RSSI值,如圖6所示。
共測試了9組數(shù)據(jù),測試結(jié)果如表1所示。
經(jīng)過計算,中心節(jié)點在1 m遠(yuǎn)處接收到終端節(jié)點的RSSI平均值是-73.1052632,故取A=-73dBm。
4.2 n值的標(biāo)定
基于已標(biāo)定的A,來標(biāo)定n值,,選擇測量直線相距發(fā)射節(jié)點5 m遠(yuǎn)處接收到的信號強度,共測量20組數(shù)據(jù),如表2所示。
經(jīng)過計算得n的平均值為2.5037,故選擇n=3。
4. 3 定位的測試
定位測試在一片空曠的場地上進(jìn)行的,選擇了6個無線傳感器網(wǎng)絡(luò)節(jié)點組建Zigbee網(wǎng)絡(luò),1個中心節(jié)點、1個未知節(jié)點和4個錨節(jié)點,節(jié)點的發(fā)射功率設(shè)置為0 dBm。4個錨節(jié)點提前人工布置于一塊8 mx8 m的正方形地面四角,未知節(jié)點位于正方形中心,中心節(jié)點布置在正方形外圍,整個節(jié)點布局如圖7所示。
測試中發(fā)現(xiàn)一個錨節(jié)點沒有入網(wǎng),未知節(jié)點與3個錨節(jié)點通信,接收到RSSI值如下表3所示:
已知與未知節(jié)點通信的三個錨節(jié)點的相對坐標(biāo)為: (0,0)(0,8)(8,8),A=-73,n=3,經(jīng)過計算得:未知節(jié)點和與之通信的3個錨節(jié)點通信的RSSI均值分別為-92.6、-93.2、-92.1,未知節(jié)點和錨節(jié)點之間的距離分別為:d1=4.501;d2=4.713;d3=4.332;未知節(jié)點的坐標(biāo)為: (x,y)=(3.391,3.535)。
4.4 誤差分析
實際情況下,未知節(jié)點的相對坐標(biāo)應(yīng)該是(4,4),實際箅出來的坐標(biāo)是(3.391,3.535),所以實際測量是存在誤差的。誤差計算如下式:
5 結(jié)束語
本文基于無線傳感器網(wǎng)絡(luò)節(jié)點的自主設(shè)計,采用基于RSSI的加權(quán)質(zhì)心算法實現(xiàn)了WSN節(jié)點的自定位。通過實際測試證明,相對于單一的質(zhì)心定位算法,該算法利用得到的RSSI作為權(quán)值來修正質(zhì)心定位的結(jié)果,提高了定位精度,且易于實現(xiàn),能夠滿足大多數(shù)的實際應(yīng)用中定位的需求。另一方面,在實際測試中發(fā)現(xiàn),RSSI值易受到多徑、障礙物等環(huán)境因素的影響,故存RSSI測距中引進(jìn)了較多的誤差,基于RSSI測距的精度還有待進(jìn)一步的提高。