喬鋼柱,李雪蓮,曾建潮
(太原科技大學電子信息工程學院,山西太原 030024)
WSN(Wireless Sensor Network)定位技術(shù)應用廣泛,除可以反應出事發(fā)地點外,還可跟蹤目標、實時監(jiān)測目標的行動狀態(tài)、預測目標的行動軌跡等[1]。目前的定位算法可分為兩類:基于測距的定位算法和無需測距的定位算法[2]。由于基于測距的定位是采用實際測得節(jié)點間的距離或者角度,因此定位精度較高,對硬件也提出了一定的要求,在定位過程中相對消耗的能量較多。無需測距的定位算法不需要實際測量距離或角度信息,對節(jié)點不存在特殊要求,定位過程中無需考慮能量消耗問題,但定位精度及其節(jié)點覆蓋率卻有待提高。在基于測距的定位算法中,RSSI(Received Signal Strength Indicator)定位算法相對而言通信開銷較小,對硬件要求較低,是一種較為實用的定位算法。文中在TinyOS軟件平臺下,利用Crossbow公司提供的硬件設施對RSSI定位系統(tǒng)進行了實驗驗證,并結(jié)合實際情況對所得數(shù)據(jù)進行了分析。
TinyOS是UC Berkeley開發(fā)的一種用于無線傳感網(wǎng)絡節(jié)點的開源操作系統(tǒng),以其組件化的編程、事件驅(qū)動的執(zhí)行模式、微型的內(nèi)核以及良好的移植性等特點作為目前WSN系統(tǒng)上的主流操作系統(tǒng)。TinyOS操作系統(tǒng)沒有進程或線程管理,沒有虛擬內(nèi)存管理,沒有過于復雜的IO子系統(tǒng)及地址空間分配,這對于存儲資源有限的系統(tǒng)尤為重要[3]。
加州大學伯克利分校在C語言的基礎上開發(fā)出一種適用于無線傳感網(wǎng)絡編程的NesC(C Language for Network Embedded Systems)語言,TinyOS操作系統(tǒng)和其上運行的應用程序用NesC語言開發(fā)[4]。NesC是在C語言上做了一定的擴展,提出了組件化的編程思想,把組件化/模塊化思想和基于事件驅(qū)動的模型結(jié)合在了一起。其主要用處是幫助應用程序設計者建立易于組合成完整、并發(fā)式系統(tǒng)的組件,并能夠在編譯時執(zhí)行廣泛檢查[5]。
iris節(jié)點工作頻率為2.4 GHz,支持IEEE802.15.4協(xié)議的Mote模塊,用于低功耗無線傳感網(wǎng)絡[6]。它具有3倍的作用距離,雙倍的存儲空間;在戶外測試不加放大器的情況下,節(jié)點間視距離可達500 m;使用直接序列擴頻技術(shù),抗RF干擾、數(shù)據(jù)隱蔽性較好;基于IEEE802.15.4/ZigBee協(xié)議的RF發(fā)送器,工作頻率2.4 ~2.483 5 GHz,兼容 ISM 波段[7]。
節(jié)點間發(fā)送的信號在傳播過程中都會有衰減,RSSI無線傳感網(wǎng)絡定位算法的核心是根據(jù)節(jié)點間發(fā)送信號的衰減計算出節(jié)點之間的距離,然后依據(jù)節(jié)點之間的距離計算出盲節(jié)點的位置坐標[8]。無線信號的發(fā)射功率與接收功率之間的關系如式(1)所示,其中PR是無線信號的接收功率,PT是無線信號的發(fā)射功率,d為收發(fā)節(jié)點之間的距離;n為傳播因子,其值大小取決于無線信號傳播的環(huán)境
在式(1)兩邊取對數(shù),并把已知的網(wǎng)絡發(fā)射功率帶入,可得
式中10lgPR是接收信號功率轉(zhuǎn)換為dBm的表達式,即RSSI值,其中A為信號傳輸1 m時,接收信號的功率值。所以可得到盲節(jié)點與信標節(jié)點之間的距離為
三邊測量法[9]是無線傳感器網(wǎng)絡定位算法中較為最典型的一種。在盲節(jié)點通過基于RSSI的測距方法獲取到3個或以上信標節(jié)點的距離后,就可利用三邊測量法進行自身定位。如圖1所示,已知3個信標節(jié)點A、B、C的坐標(x1,y1)、(x2,y2)、(x3,y3)。假設盲節(jié)點的坐標為(x,y),根據(jù)盲節(jié)點接收到的RSSI值,得盲節(jié)點到A,B,C的距離分別為d1、d2、d3。
圖1 三邊測量法的定位原理
則根據(jù)三邊測量法原理,有式(4)成立
由式(4)可以求得盲節(jié)點的坐標如式(5)所示
在此環(huán)節(jié)中,主要用NesC語言在TinyOS環(huán)境下將RSSI定位算法具體實現(xiàn),編譯成功后將NesC程序分別燒寫到對應的硬件節(jié)點中進行實驗。其實驗結(jié)構(gòu)如圖2所示,信標節(jié)點發(fā)送包含自身坐標的數(shù)據(jù)包到盲節(jié)點及基站節(jié)點。盲節(jié)點接收信標節(jié)點發(fā)送的數(shù)據(jù)包解析出每一個的RSSI值,結(jié)合信標節(jié)點的位置坐標計算出自身坐標值,并將結(jié)果發(fā)送至基站節(jié)點?;竟?jié)點接收一切數(shù)據(jù)包,并將其發(fā)送到XServe中轉(zhuǎn)站。PC機上的XServe作為節(jié)點網(wǎng)絡和操作者之間通信的主要通道,它提供多個通信端口用于輸入信息,以便于網(wǎng)絡間數(shù)據(jù)傳送;操作者可以通過終端接口或XML RPC命令接口與其進行通信;它可以解析、轉(zhuǎn)換和處理節(jié)點傳送的數(shù)據(jù);在解析過程中,將原始格式的數(shù)據(jù)轉(zhuǎn)換到相應的傳感器讀數(shù)測量單位;最后將轉(zhuǎn)換后的數(shù)據(jù)顯示于XSniffer界面中。PC機上的XSniffer可以顯示出XServe傳送的所有數(shù)據(jù);能夠讓操作者監(jiān)測到網(wǎng)絡中的所有節(jié)點是否都在正常通信、數(shù)據(jù)包的序列號以及傳送地址是否正確、以及路由的更新和時間同步消息。
圖2 實驗結(jié)構(gòu)圖
信標節(jié)點:負責發(fā)送包含自身位置的數(shù)據(jù)包到盲節(jié)點。盲節(jié)點:負責接收信標節(jié)點發(fā)來的數(shù)據(jù)包,提取出信標節(jié)點的坐標值,并從數(shù)據(jù)包中獲得RSSI值,在此基礎上計算出自身的坐標值,并將計算出的結(jié)果發(fā)送到基站節(jié)點?;竟?jié)點:負責接收所有能夠聽見的數(shù)據(jù)包,并將其轉(zhuǎn)發(fā)到XServe,最后顯示到XSniffer界面中,如圖3所示。
圖3 XSniffer數(shù)據(jù)顯示界面
圖3中,后5位數(shù)據(jù)是自行定義的,發(fā)送給2號節(jié)點的5位數(shù)據(jù)中,前3位是接收到的3個已知節(jié)點RSSI值,后兩位是計算出的盲節(jié)點坐標值,為便于顯示,最后兩位數(shù)據(jù)分別擴大了10倍,實際值應當縮小10倍。發(fā)送給5號節(jié)點的數(shù)據(jù)是信標節(jié)點自身的坐標值。
3.2.1 信標節(jié)點
實驗中采用3個信標節(jié)點,首先分別指定各節(jié)點的ID,以便能夠從XSniffer界面中觀察出每個節(jié)點發(fā)送的數(shù)據(jù)。信標節(jié)點在實驗中起著關鍵的作用,只有保證信標節(jié)點與盲節(jié)點之間進行正常通信,才可以得到可信的盲節(jié)點位置坐標。具體實現(xiàn)思路如下:(1)定義一個緩存區(qū),用于存儲自身的坐標值。(2)設置一個定時器,計時發(fā)送出緩存區(qū)中的數(shù)據(jù)到盲節(jié)點,指定紅色led燈亮,并通過XSniffer界面觀察發(fā)送數(shù)據(jù)是否正確。(3)數(shù)據(jù)發(fā)送成功,指定綠色led燈亮。
3.2.2 盲節(jié)點
實驗目的是測出盲節(jié)點的位置,因此盲節(jié)點是實驗的目標節(jié)點。首先指定其ID,以便在XSniffer界面中讀取數(shù)據(jù)。其次要保證能夠正常接收并提取信標節(jié)點發(fā)送的數(shù)據(jù),才可以得到可信的自身位置坐標。具體實現(xiàn)思路如下:(1)定義接收和發(fā)送兩個緩存區(qū)及其對應的變量指針。(2)設置4個不同的計時器,第1個計時器時間到,通過變量指針將接收緩存區(qū)中的數(shù)據(jù)復制到發(fā)送緩存區(qū)中。第2和第3個計時器時間到,重復上述操作。第4個計時器時間到,利用發(fā)送緩存區(qū)中數(shù)據(jù)計算出盲節(jié)點坐標值。(3)將盲節(jié)點的坐標值發(fā)送到基站,并通過XServe到XSniffer界面讀取數(shù)據(jù)。
3.2.3 基站節(jié)點
基站節(jié)點用于接收信標節(jié)點和盲節(jié)點發(fā)送的數(shù)據(jù),并將數(shù)據(jù)向上傳送,使得實驗者能夠明確每個節(jié)點發(fā)送的數(shù)值。具體實現(xiàn)思路如下:(1)定義一個緩存區(qū),用來存儲接收到的數(shù)據(jù)。(2)利用接收函數(shù)接收可以聽到的信號。(3)將接收到數(shù)據(jù)通過串口傳送到XServe,通過XServe將數(shù)據(jù)顯示到XSniffer界面中。
(1)兩個信標節(jié)點放置在坐標軸上,另外一個隨機放置。信標節(jié)點的坐標設為(0,2),(4,0),(6,6),盲節(jié)點坐標如表1和表2所示。
表1 室內(nèi)實驗結(jié)果
表2 室外實驗結(jié)果
如表1所示,當信標節(jié)點置于坐標軸上時,數(shù)據(jù)誤差較大,是因為室內(nèi)坐標軸所選為墻壁,會發(fā)生信號反射現(xiàn)象,室外坐標軸所選為操場周圍的柵欄,也會對無線信號的傳輸產(chǎn)生較大影響。從總體數(shù)據(jù)看,室內(nèi)差值最大為2.16 m,最小為0.98 m;室外差值最大為1.56 m,最小為0.81 m。在室外定位中,距離越遠誤差則越大,其原因是室外無線信號干擾導致RSSI值衰減不穩(wěn)定。
(2)雙側(cè)擺放信標節(jié)點。信標節(jié)點的實際坐標設為(4,1),(8,1),(6,5),盲節(jié)點坐標如表 3 和表 4所示。
表3 室內(nèi)實驗結(jié)果
表4 室外實驗結(jié)果
從上表發(fā)現(xiàn),雙側(cè)擺放信標節(jié)點成等邊三角形時,數(shù)據(jù)誤差較第一種情況好些,是因為此時信標節(jié)點的位置不在墻壁和操場圍欄處,而且盲節(jié)點擺放的位置處于三角形之中。從總體數(shù)據(jù)看,盲節(jié)點擺放位置越接近三角形中心時差值越小。這種情形下,室內(nèi)差值最大為1.8 m,最小為0.57 m,室外差值最大為1.2 m,最小為0.36 m。室外定位中,盲節(jié)點位置一直放于三角形之中,RSSI值衰減比第一種情況下要穩(wěn)定,從而數(shù)據(jù)差值小些。
(3)隨機擺放信標節(jié)點。信標節(jié)點的實際坐標設為(3,3),(5,2),(7,1),盲節(jié)點坐標如表5 和表6 所示。
表5 室內(nèi)實驗結(jié)果
表6 室外實驗結(jié)果
從以上表格發(fā)現(xiàn),在隨機擺放信標節(jié)點的情況下,數(shù)據(jù)誤差較第一種情況小,但比第二種情況大,因為此時盲節(jié)點放置的位置更遠,室內(nèi)物品較多,干擾較大,而室外無線信號干擾,導致RSSI衰減不穩(wěn)定。從總體數(shù)據(jù)看,室內(nèi)差值最大為2.05 m,最小0.85 m;室外差值最大為1.42 m,最小0.58 m。
(4)數(shù)據(jù)誤差分析。實驗環(huán)境為18×18的實驗室內(nèi)和室外操場,由于實驗環(huán)境的局限性,RSSI值會受到多種因素的干擾,實驗室內(nèi)的設備以及人員走動都會對無線信號產(chǎn)生影響,使得信號發(fā)生反射、繞射、受到障礙物阻擋等現(xiàn)象,操場中會存在其他的無線通訊信號,以及鐵欄桿等障礙物會使信號發(fā)生不穩(wěn)定的衰減,導致RSSI值不穩(wěn)定,產(chǎn)生誤差。另外,每個節(jié)點所處的自身環(huán)境不相同,對其信號發(fā)射影響大小也不相同,但計算時采用同樣的衰減指數(shù),必然存在誤差。
在TinyOS操作平臺上利用Crossbow公司的硬件對無線傳感網(wǎng)RSSI定位算法進行了驗證。通過節(jié)點間的收發(fā)數(shù)據(jù),得到RSSI值,從而計算出盲節(jié)點與信標節(jié)點之間的距離,最后利用三邊定位算法計算出盲節(jié)點的具體位置坐標值。在大型網(wǎng)絡中,此方法仍然實用,此時盲節(jié)點會接收到多個信標節(jié)點發(fā)送的數(shù)據(jù),計算出多個距離值,只需提取3個最小的距離即可計算出盲節(jié)點的坐標值。
[1]孫利民,李建中,陳渝,等.無線傳感器網(wǎng)絡[M].北京:清華大學出版社,2005.
[2]李曉維.無線傳感器網(wǎng)絡技術(shù)[M].北京:北京理工大學出版社,2007.
[3]LEV I P,MADDEN S,POLASTRE J,et al.TinyOS:An operating system forwireless sensor networks[C].Berlin:Proceedings of the 7 th In2 Ternational Conference on Mobile Data Management(MDM 2006),2005:115-148.
[4]李麗娜,石高濤,廖明宏.傳感器網(wǎng)絡操作系統(tǒng) TinyOS關鍵技術(shù)分析[J].哈爾濱工業(yè)大學學報,2005(6):86-91.
[5]李晶,王福豹,段渭軍.無線傳感器網(wǎng)絡中 TinyOS的研究[J].計算機測量與控制,2006(6):41-46.
[6]CROSSBOW.Mica2 wireless measurement system[EB/OL].(2004-05-16)[2012-05-30]http://www.xbow.com.
[7]CROSSBOW.Mica2 dot wireless microsensor mote[EB/OL].(2004-08-12)[2012-03-24]http://www.xbow.com.
[8]汪煬,黃劉生,肖明軍,等.一種基于RSSI校驗的無線傳感器網(wǎng)絡節(jié)點定位算法[J].小型微型計算機系統(tǒng),2009,30(1):59-62.
[9]SAVARESE C,RABAEY J M,BEUTEL J.Locationing in dist ributed Ad2Hoc wireless sensor network[C].Salt Lake:Proc.of the 2001 IEEE Int'l Conf.on Acoustics,Speech and Signal,IEEE Signal Processing Society,2001.