基于TinyOS平臺(tái)的RSSI定位系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要 RSSI定位算法是無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)定位中一種常用的定位算法,文中以Crossbow公司提供的iris節(jié)點(diǎn)及MIB520接口板為硬件平臺(tái),以TrinyOS操作系統(tǒng)支持的NesC語言為軟件操作平臺(tái),設(shè)計(jì)了RSSI定位系統(tǒng)。分別在室內(nèi)和室外兩種環(huán)境下對(duì)其進(jìn)行實(shí)驗(yàn)驗(yàn)證,證明了系統(tǒng)的有效性。
關(guān)鍵詞 無線傳感網(wǎng)絡(luò);TrinyOS操作系統(tǒng);NesC語言;RSSI定位算法
WSN(Wireless Sensor Network)定位技術(shù)應(yīng)用廣泛,除可以反應(yīng)出事發(fā)地點(diǎn)外,還可跟蹤目標(biāo)、實(shí)時(shí)監(jiān)測(cè)目標(biāo)的行動(dòng)狀態(tài)、預(yù)測(cè)目標(biāo)的行動(dòng)軌跡等。目前的定位算法可分為兩類:基于測(cè)距的定位算法和無需測(cè)距的定位算法。由于基于測(cè)距的定位是采用實(shí)際測(cè)得節(jié)點(diǎn)間的距離或者角度,因此定位精度較高,對(duì)硬件也提出了一定的要求,在定位過程中相對(duì)消耗的能量較多。無需測(cè)距的定位算法不需要實(shí)際測(cè)量距離或角度信息,對(duì)節(jié)點(diǎn)不存在特殊要求,定位過程中無需考慮能量消耗問題,但定位精度及其節(jié)點(diǎn)覆蓋率卻有待提高。在基于測(cè)距的定位算法中,RSSI(ReceivedSignal Strength Indicator)定位算法相對(duì)而言通信開銷較小,對(duì)硬件要求較低,是一種較為實(shí)用的定位算法。文中在TinyOS軟件平臺(tái)下,利用Crossbow公司提供的硬件設(shè)施對(duì)RSSI定位系統(tǒng)進(jìn)行了實(shí)驗(yàn)驗(yàn)證,并結(jié)合實(shí)際情況對(duì)所得數(shù)據(jù)進(jìn)行了分析。
1 TinyOS操作系統(tǒng)及硬件平臺(tái)
1.1 TinyOS
TinyOS是UC Berkeley開發(fā)的一種用于無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的開源操作系統(tǒng),以其組件化的編程、事件驅(qū)動(dòng)的執(zhí)行模式、微型的內(nèi)核以及良好的移植性等特點(diǎn)作為目前WSN系統(tǒng)上的主流操作系統(tǒng)。TinyOS操作系統(tǒng)沒有進(jìn)程或線程管理,沒有虛擬內(nèi)存管理,沒有過于復(fù)雜的IO子系統(tǒng)及地址空間分配,這對(duì)于存儲(chǔ)資源有限的系統(tǒng)尤為重要。
1.2 NesC語言
加州大學(xué)伯克利分校在C語言的基礎(chǔ)上開發(fā)出一種適用于無線傳感網(wǎng)絡(luò)編程的NesC(C Language for Network Embedded Systems)語言,TinyOS操作系統(tǒng)和其上運(yùn)行的應(yīng)用程序用NesC語言開發(fā)。NesC是在C語言上做了一定的擴(kuò)展,提出了組件化的編程思想,把組件化/模塊化思想和基于事件驅(qū)動(dòng)的模型結(jié)合在了一起。其主要用處是幫助應(yīng)用程序設(shè)計(jì)者建立易于組合成完整、并發(fā)式系統(tǒng)的組件,并能夠在編譯時(shí)執(zhí)行廣泛檢查。
1.3 iris硬件特性
iris節(jié)點(diǎn)工作頻率為2.4 GHz,支持IEEE802.15.4協(xié)議的Mote模塊,用于低功耗無線傳感網(wǎng)絡(luò)。它具有3倍的作用距離,雙倍的存儲(chǔ)空間;在戶外測(cè)試不加放大器的情況下,節(jié)點(diǎn)間視距離可達(dá)500 m;使用直接序列擴(kuò)頻技術(shù),抗RF干擾、數(shù)據(jù)隱蔽性較好;基于IEEE80 2. 15.4/ZigBee協(xié)議的RF發(fā)送器,工作頻率2.4~2.483 5 GHz,兼容ISM波段。
2 RSSI定位算法
2.1 RSSI測(cè)距
節(jié)點(diǎn)間發(fā)送的信號(hào)在傳播過程中都會(huì)有衰減,RSSI無線傳感網(wǎng)絡(luò)定位算法的核心是根據(jù)節(jié)點(diǎn)間發(fā)送信號(hào)的衰減計(jì)算出節(jié)點(diǎn)之間的距離,然后依據(jù)節(jié)點(diǎn)之間的距離計(jì)算出盲節(jié)點(diǎn)的位置坐標(biāo)。無線信號(hào)的發(fā)射功率與接收功率之間的關(guān)系如式(1)所示,其中PR是無線信號(hào)的接收功率,PT是無線信號(hào)的發(fā)射功率,d為收發(fā)節(jié)點(diǎn)之間的距離;n為傳播因子,其值大小取決于無線信號(hào)傳播的環(huán)境
式中10lgPR是接收信號(hào)功率轉(zhuǎn)換為dBm的表達(dá)式,即RSSI值,其中A為信號(hào)傳輸1 m時(shí),接收信號(hào)的功率值。所以可得到盲節(jié)點(diǎn)與信標(biāo)節(jié)點(diǎn)之間的距離為
2.2 三邊測(cè)量法定位
三邊測(cè)量法是無線傳感器網(wǎng)絡(luò)定位算法中較為最典型的一種。在盲節(jié)點(diǎn)通過基于RSSI的測(cè)距方法獲取到3個(gè)或以上信標(biāo)節(jié)點(diǎn)的距離后,就可利用三邊測(cè)量法進(jìn)行自身定位。如圖1所示,已知3個(gè)信標(biāo)節(jié)點(diǎn)A、B、C的坐標(biāo)(x1,y1)、(x2,y2)、(x3,y3)。假設(shè)盲節(jié)點(diǎn)的坐標(biāo)為(x,y),根據(jù)盲節(jié)點(diǎn)接收到的RSSI值,得盲節(jié)點(diǎn)到A,B,C的距離分別為d1、d2、d3。
則根據(jù)三邊測(cè)量法原理,有式(4)成立
由式(4)可以求得盲節(jié)點(diǎn)的坐標(biāo)如式(5)所示
3 RSSI定位算法在操作平臺(tái)上的實(shí)現(xiàn)
在此環(huán)節(jié)中,主要用NesC語言在TinyOS環(huán)境下將RSSI定位算法具體實(shí)現(xiàn),編譯成功后將NesC程序分別燒寫到對(duì)應(yīng)的硬件節(jié)點(diǎn)中進(jìn)行實(shí)驗(yàn)。其實(shí)驗(yàn)結(jié)構(gòu)如圖2所示,信標(biāo)節(jié)點(diǎn)發(fā)送包含自身坐標(biāo)的數(shù)據(jù)包到盲節(jié)點(diǎn)及基站節(jié)點(diǎn)。盲節(jié)點(diǎn)接收信標(biāo)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)包解析出每一個(gè)的RSSI值,結(jié)合信標(biāo)節(jié)點(diǎn)的位置坐標(biāo)計(jì)算出自身坐標(biāo)值,并將結(jié)果發(fā)送至基站節(jié)點(diǎn)?;竟?jié)點(diǎn)接收一切數(shù)據(jù)包,并將其發(fā)送到XServe中轉(zhuǎn)站。
PC機(jī)上的XServe作為節(jié)點(diǎn)網(wǎng)絡(luò)和操作者之間通信的主要通道,它提供多個(gè)通信端口用于輸入信息,以便于網(wǎng)絡(luò)間數(shù)據(jù)傳送;操作者可以通過終端接口或XMLRPC命令接口與其進(jìn)行通信;它可以解析、轉(zhuǎn)換和處理節(jié)點(diǎn)傳送的數(shù)據(jù);在解析過程中,將原始格式的數(shù)據(jù)轉(zhuǎn)換到相應(yīng)的傳感器讀數(shù)測(cè)量單位;最后將轉(zhuǎn)換后的數(shù)據(jù)顯示于XSniffer界面中。PC機(jī)上的XSniffer可以顯示出XServe傳送的所有數(shù)據(jù);能夠讓操作者監(jiān)測(cè)到網(wǎng)絡(luò)中的所有節(jié)點(diǎn)是否都在正常通信、數(shù)據(jù)包的序列號(hào)以及傳送地址是否正確、以及路由的更新和時(shí)間同步消息。
3.1 總體實(shí)驗(yàn)思路
信標(biāo)節(jié)點(diǎn):負(fù)責(zé)發(fā)送包含自身位置的數(shù)據(jù)包到盲節(jié)點(diǎn)。盲節(jié)點(diǎn):負(fù)責(zé)接收信標(biāo)節(jié)點(diǎn)發(fā)來的數(shù)據(jù)包,提取出信標(biāo)節(jié)點(diǎn)的坐標(biāo)值,并從數(shù)據(jù)包中獲得RSSI值,在此基礎(chǔ)上計(jì)算出自身的坐標(biāo)值,并將計(jì)算出的結(jié)果發(fā)送到基站節(jié)點(diǎn)?;竟?jié)點(diǎn):負(fù)責(zé)接收所有能夠聽見的數(shù)據(jù)包,并將其轉(zhuǎn)發(fā)到XServe,最后顯示到XSniffer界面中,如圖3所示。
圖3中,后5位數(shù)據(jù)是自行定義的,發(fā)送給2號(hào)節(jié)點(diǎn)的5位數(shù)據(jù)中,前3位是接收到的3個(gè)已知節(jié)點(diǎn)RSSI值,后兩位是計(jì)算出的盲節(jié)點(diǎn)坐標(biāo)值,為便于顯示,最后兩位數(shù)據(jù)分別擴(kuò)大了10倍,實(shí)際值應(yīng)當(dāng)縮小10倍。發(fā)送給5號(hào)節(jié)點(diǎn)的數(shù)據(jù)是信標(biāo)節(jié)點(diǎn)自身的坐標(biāo)值。
3.2 具體實(shí)現(xiàn)思路
3.2.1 信標(biāo)節(jié)點(diǎn)
實(shí)驗(yàn)中采用3個(gè)信標(biāo)節(jié)點(diǎn),首先分別指定各節(jié)點(diǎn)的ID,以便能夠從XSniffer界面中觀察出每個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)。信標(biāo)節(jié)點(diǎn)在實(shí)驗(yàn)中起著關(guān)鍵的作用,只有保證信標(biāo)節(jié)點(diǎn)與盲節(jié)點(diǎn)之間進(jìn)行正常通信,才可以得到可信的盲節(jié)點(diǎn)位置坐標(biāo)。具體實(shí)現(xiàn)思路如下:(1)定義一個(gè)緩存區(qū),用于存儲(chǔ)自身的坐標(biāo)值。(2)設(shè)置一個(gè)定時(shí)器,計(jì)時(shí)發(fā)送出緩存區(qū)中的數(shù)據(jù)到盲節(jié)點(diǎn),指定紅色led燈亮,并通過XSniffer界面觀察發(fā)送數(shù)據(jù)是否正確。(3)數(shù)據(jù)發(fā)送成功,指定綠色led燈亮。
3.2.2 盲節(jié)點(diǎn)
實(shí)驗(yàn)?zāi)康氖菧y(cè)出盲節(jié)點(diǎn)的位置,因此盲節(jié)點(diǎn)是實(shí)驗(yàn)的目標(biāo)節(jié)點(diǎn)。首先指定其ID,以便在XSniffer界面中讀取數(shù)據(jù)。其次要保證能夠正常接收并提取信標(biāo)節(jié)點(diǎn)發(fā)送的數(shù)據(jù),才可以得到可信的自身位置坐標(biāo)。具體實(shí)現(xiàn)思路如下:(1)定義接收和發(fā)送兩個(gè)緩存區(qū)及其對(duì)應(yīng)的變量指針。(2)設(shè)置4個(gè)不同的計(jì)時(shí)器,第1個(gè)計(jì)時(shí)器時(shí)間到,通過變量指針將接收緩存區(qū)中的數(shù)據(jù)復(fù)制到發(fā)送緩存區(qū)中。第2和第3個(gè)計(jì)時(shí)器時(shí)間到,重復(fù)上述操作。第4個(gè)計(jì)時(shí)器時(shí)間到,利用發(fā)送緩存區(qū)中數(shù)據(jù)計(jì)算出盲節(jié)點(diǎn)坐標(biāo)值。(3)將盲節(jié)點(diǎn)的坐標(biāo)值發(fā)送到基站,并通過XServe到XSni ffer界面讀取數(shù)據(jù)。
3.2.3 基站節(jié)點(diǎn)
基站節(jié)點(diǎn)用于接收信標(biāo)節(jié)點(diǎn)和盲節(jié)點(diǎn)發(fā)送的數(shù)據(jù),并將數(shù)據(jù)向上傳送,使得實(shí)驗(yàn)者能夠明確每個(gè)節(jié)點(diǎn)發(fā)送的數(shù)值。具體實(shí)現(xiàn)思路如下:(1)定義一個(gè)緩存區(qū),用來存儲(chǔ)接收到的數(shù)據(jù)。(2)利用接收函數(shù)接收可以聽到的信號(hào)。(3)將接收到數(shù)據(jù)通過串口傳送到XServe,通過XServe將數(shù)據(jù)顯示到XSniffer界面中。
4 實(shí)驗(yàn)結(jié)果及數(shù)據(jù)分析
(1)兩個(gè)信標(biāo)節(jié)點(diǎn)放置在坐標(biāo)軸上,另外一個(gè)隨機(jī)放置。信標(biāo)節(jié)點(diǎn)的坐標(biāo)設(shè)為(0,2),(4,0),(6,6),盲節(jié)點(diǎn)坐標(biāo)如表1和表2所示。
如表1所示,當(dāng)信標(biāo)節(jié)點(diǎn)置于坐標(biāo)軸上時(shí),數(shù)據(jù)誤差較大,是因?yàn)槭覂?nèi)坐標(biāo)軸所選為墻壁,會(huì)發(fā)生信號(hào)反射現(xiàn)象,室外坐標(biāo)軸所選為操場(chǎng)周圍的柵欄,也會(huì)對(duì)無線信號(hào)的傳輸產(chǎn)生較大影響。從總體數(shù)據(jù)看,室內(nèi)差值最大為2.16 m,最小為0.98 m;室外差值最大為1.56 m,最小為0.81 m。在室外定位中,距離越遠(yuǎn)誤差則越大,其原因是室外無線信號(hào)干擾導(dǎo)致RSSI值衰減不穩(wěn)定。
(2)雙側(cè)擺放信標(biāo)節(jié)點(diǎn)。信標(biāo)節(jié)點(diǎn)的實(shí)際坐標(biāo)設(shè)為(4,1),(8,1),(6,5),盲節(jié)點(diǎn)坐標(biāo)如表3和表4所示。
從上表發(fā)現(xiàn),雙側(cè)擺放信標(biāo)節(jié)點(diǎn)成等邊三角形時(shí),數(shù)據(jù)誤差較第一種情況好些,是因?yàn)榇藭r(shí)信標(biāo)節(jié)點(diǎn)的位置不在墻壁和操場(chǎng)圍欄處,而且盲節(jié)點(diǎn)擺放的位置處于三角形之中。從總體數(shù)據(jù)看,盲節(jié)點(diǎn)擺放位置越接近三角形中心時(shí)差值越小。這種情形下,室內(nèi)差值最大為1.8 m,最小為0.57 m,室外差值最大為1.2 m,最小為0.36 m。室外定位中,盲節(jié)點(diǎn)位置一直放于三角形之中,RSSI值衰減比第一種情況下要穩(wěn)定,從而數(shù)據(jù)差值小些。
(3)隨機(jī)擺放信標(biāo)節(jié)點(diǎn)。信標(biāo)節(jié)點(diǎn)的實(shí)際坐標(biāo)設(shè)為(3,3),(5,2),(7,1),盲節(jié)點(diǎn)坐標(biāo)如表5和表6所示。
從以上表格發(fā)現(xiàn),在隨機(jī)擺放信標(biāo)節(jié)點(diǎn)的情況下,數(shù)據(jù)誤差較第一種情況小,但比第二種情況大,因?yàn)榇藭r(shí)盲節(jié)點(diǎn)放置的位置更遠(yuǎn),室內(nèi)物品較多,干擾較大,而室外無線信號(hào)干擾,導(dǎo)致RSSI衰減不穩(wěn)定。從總體數(shù)據(jù)看,室內(nèi)差值最大為2.05 m,最小0.85 m;室外差值最大為1.42 m,最小0.58 m。
(4)數(shù)據(jù)誤差分析。實(shí)驗(yàn)環(huán)境為18×18的實(shí)驗(yàn)室內(nèi)和室外操場(chǎng),由于實(shí)驗(yàn)環(huán)境的局限性,RSSI值會(huì)受到多種因素的干擾,實(shí)驗(yàn)室內(nèi)的設(shè)備以及人員走動(dòng)都會(huì)對(duì)無線信號(hào)產(chǎn)生影響,使得信號(hào)發(fā)生反射、繞射、受到障礙物阻擋等現(xiàn)象,操場(chǎng)中會(huì)存在其他的無線通訊信號(hào),以及鐵欄桿等障礙物會(huì)使信號(hào)發(fā)生不穩(wěn)定的衰減,導(dǎo)致RSSI值不穩(wěn)定,產(chǎn)生誤差。另外,每個(gè)節(jié)點(diǎn)所處的自身環(huán)境不相同,對(duì)其信號(hào)發(fā)射影響大小也不相同,但計(jì)算時(shí)采用同樣的衰減指數(shù),必然存在誤差。
5 結(jié)束語
在TinyOS操作平臺(tái)上利用Crossbow公司的硬件對(duì)無線傳感網(wǎng)RSSI定位算法進(jìn)行了驗(yàn)證。通過節(jié)點(diǎn)間的收發(fā)數(shù)據(jù),得到RSSI值,從而計(jì)算出盲節(jié)點(diǎn)與信標(biāo)節(jié)點(diǎn)之間的距離,最后利用三邊定位算法計(jì)算出盲節(jié)點(diǎn)的具體位置坐標(biāo)值。在大型網(wǎng)絡(luò)中,此方法仍然實(shí)用,此時(shí)盲節(jié)點(diǎn)會(huì)接收到多個(gè)信標(biāo)節(jié)點(diǎn)發(fā)送的數(shù)據(jù),計(jì)算出多個(gè)距離值,只需提取3個(gè)最小的距離即可計(jì)算出盲節(jié)點(diǎn)的坐標(biāo)值。