李雪蓮,喬鋼柱,曾建潮
(太原科技大學電子信息工程學院,山西太原 030024)
WSN(Wireless Sensor Network)的定位技術應用廣泛,除了可以反應出事發(fā)地點之外,還可以跟蹤目標、實時監(jiān)測目標的行動狀態(tài)、預測目標的行動軌跡等[1]。目前的定位算法可以分為兩類:基于測距的定位算法(如到達角度AOA,到達時間TOA,到達時間差TDOA,接收信號強度RSSI)和無需測距的定位算法(如質(zhì)心、DV-Hop、Amorphous、APIT 定位算法等)[2]。由于基于測距的定位是采用實際測得節(jié)點間的距離或者角度,因此定位精度較高,對硬件也提出了一定的要求,在定位過程中相對消耗的能量較多。無需測距的定位算法不需要實際測量距離或角度信息,對節(jié)點不存在特殊的要求,定位過程中無需考慮能量消耗問題,但定位精度及其節(jié)點覆蓋率卻有待提高[5]。在基于測距的定位算法中,RSSI(Received Signal Strength Indicator)定位算法相對而言通信開銷較小,對硬件要求較低,是一種較為實用的定位算法。本文在TinyOS軟件平臺上利用Crossbow公司提供的硬件設施對RSSI改進定位系統(tǒng)進行了實驗驗證,并結合實際情況對所得實驗數(shù)據(jù)進行了分析。
TinyOS是UC Berkeley(加州大學伯克利分校)開發(fā)的一種用于無線傳感網(wǎng)絡節(jié)點的開源操作系統(tǒng),以其組件化的編程、事件驅(qū)動的執(zhí)行模式、微型的內(nèi)核以及良好的移植性等特點作為目前WSN系統(tǒng)上的主流操作系統(tǒng)[3]。加州大學伯克利分校在C語言的基礎上開發(fā)了一種專門適合于無線傳感網(wǎng)絡編程的NesC(C language for Network embedded systems)語言,TinyOS操作系統(tǒng)和其上運行的應用程序都是用NesC語言開發(fā)的[4]。本文硬件部分采用Crossbow公司的mib520接口板和iris節(jié)點。iris節(jié)點工作在2.4 GHz,支持IEEE802.15.4協(xié)議的Mote模塊,用于低功耗無線傳感網(wǎng)絡[6]。
傳統(tǒng)的RSSI定位算法中衰減指數(shù)β采用的是經(jīng)驗值,依據(jù)具體的實驗環(huán)境而定,這樣會導致定位結果誤差較大。本算法主要針對RSSI定位算法中衰減指數(shù)β的值進行改進,利用節(jié)點接收信號強度值計算出同一實驗環(huán)境中不同位置的衰減指數(shù)β,進而得出未知節(jié)點的位置坐標,減小了誤差,提高了定位精度。
其中,β是路徑損耗指數(shù),從式(1)可以得出距離r的計算公式為
屏蔽模型第2部分內(nèi)容為指出在固定距離上節(jié)點接收的信號能量符合對數(shù)正態(tài)隨機變化,其具體公式如下
Ψ是個無實際意義的隨機變量,是一個零均值的高斯隨機變量,是因為不同的實驗環(huán)境而產(chǎn)生。但是通過多次實驗計算得知,Ψ的值對實驗結果r的值影響不大,因此為了計算簡單,文中采用簡化的路徑損耗模型,如式(4)所示
實驗中每個信標節(jié)點周期性的發(fā)送自身信息,當信標節(jié)點接收到其它信標節(jié)點發(fā)來的信息時,通過節(jié)點ID號判斷是否是距離最近的4個節(jié)點,如果是則記錄4個臨近節(jié)點發(fā)送的RSSI均值,記錄為RSSIS-2,RSSIS-1,RSSIS+1,RSSIS+2。信標節(jié)點如果接收到超過閾值的鄰接信標的信息時,根據(jù)式(5)計算出新的β值,并代替保存的原有β值
式(5)中,β是通過實際實驗中信號強度衰減得到的,依據(jù)節(jié)點所處環(huán)境的不同而不同,比以往采用的衰減指數(shù)經(jīng)驗值減小定位誤差。
通過計算得到衰減指數(shù)β,結合式(1)可以得到盲節(jié)點與信標節(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ù)三邊測量法原理,有式(6)成立
由式(6)可以求得盲節(jié)點的坐標如式(7)所示
在這環(huán)節(jié)中,主要用NesC語言在TinyOS環(huán)境下將RSSI改進定位算法具體實現(xiàn),編譯成功后將NesC程序分別燒到對應的硬件節(jié)點中進行實驗。其實驗結構如圖2所示,信標節(jié)點發(fā)送包含自身坐標和自身ID的數(shù)據(jù)包到盲節(jié)點,盲節(jié)點通過接收信息中的ID號來判斷是否為距離自己最近的4個信標節(jié)點,如果不是則丟棄此信息,如果是則記錄其RSSI值,并對每一節(jié)點RSSI值取平均,利用此RSSI值并根據(jù)路徑損耗指數(shù)β的計算公式得出此位置的損耗指數(shù)值。盲節(jié)點利用此β值結合信標節(jié)點的RSSI值計算出到與其距離最近的3個信標節(jié)點的距離,盲節(jié)點利用這3個距離值并結合信標節(jié)點位置坐標計算出自身坐標值,并將結果發(fā)送至基站節(jié)點?;竟?jié)點接收一切數(shù)據(jù)包,并將其發(fā)送到XServe中轉站。PC機上的XServe作為節(jié)點網(wǎng)絡和操作者之間通信的主要通道,提供多個通信端口用于輸入信息,以便與網(wǎng)絡間傳送數(shù)據(jù);操作者可以通過終端接口或者XML RPC命令接口與其進行通信;它可以解析、轉換和處理節(jié)點傳送的數(shù)據(jù);在解析過程中,將原始格式的數(shù)據(jù)轉換到相應的傳感器讀數(shù)測量單位;最后將轉換后的數(shù)據(jù)顯示于XSniffer界面中。PC機上的XSniffer可以顯示出XServe傳送的所有數(shù)據(jù);能夠讓操作者監(jiān)測到網(wǎng)絡中所有節(jié)點是否都在正常通信;監(jiān)測到數(shù)據(jù)包的序列號以及傳送地址是否正確;監(jiān)測到路由的更新和時間同步消息。
圖2 實驗結構圖
信標節(jié)點:負責發(fā)送包含自身位置坐標和ID的數(shù)據(jù)包到信標節(jié)點S和盲節(jié)點。信標節(jié)點S:負責計算出衰減指數(shù)β。盲節(jié)點:負責接收信標節(jié)點發(fā)來的數(shù)據(jù)包,結合信標節(jié)點的位置坐標計算出盲節(jié)點自身位置坐標值,并將此值發(fā)送到基站節(jié)點?;竟?jié)點:負責接收所有能聽見的數(shù)據(jù)包,并將其轉發(fā)到XServe,最后顯示到XSniffer界面中,如圖3所示。
圖3 XSniffer數(shù)據(jù)顯示界面
圖3中,后5位數(shù)據(jù)(15)為自行定義,發(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é)點
實驗中采用多個信標節(jié)點,首先分別指定每個信標節(jié)點的ID,以便距離盲節(jié)點最近的一個信標節(jié)點能夠區(qū)分開距離自己最近的4個信標節(jié)點以及在XSniffer界面中清晰觀察到每個信標節(jié)點發(fā)來的數(shù)據(jù)。信標節(jié)點在實驗中起著關鍵作用,只有保證信標節(jié)點之間進行正常通信,才可以得到可信的盲節(jié)點位置坐標。具體實現(xiàn)思路如下:(1)定義一個緩存區(qū),用來存儲自身的坐標值和自身ID。(2)設置一個定時器,計時時間到發(fā)送出緩存區(qū)中的數(shù)據(jù)到盲節(jié)點,為避免數(shù)據(jù)覆蓋現(xiàn)象,每個信標節(jié)點發(fā)送時間不同,并且不成倍數(shù)關系;指定紅色LED燈亮,并通過XSniffer界面觀察數(shù)據(jù)發(fā)送是否正確。(3)數(shù)據(jù)發(fā)送成功,指定綠色LED燈亮。
3.2.2 信標節(jié)點S
信標節(jié)點S主要作用是得出此位置的衰減指數(shù)β,以便對盲節(jié)點進行定位計算,隨著環(huán)境的不同,β值也不同,減小了定位誤差。具體實現(xiàn)思路如下:(1)定義一個緩存區(qū),用來存儲自身的坐標值和自身ID。(2)定義兩個緩存區(qū),其中一個用來接收距離其最近的4個信標節(jié)點發(fā)來的RSSI值,并計算每一個信標節(jié)點的RSSI平均值。(3)設置4個不同的定時器,到時分別提取接收緩存區(qū)的4個RSSI平均值到另一個緩存區(qū)中,并計算出此時衰減指數(shù)β。
3.2.3 盲節(jié)點
實驗目的是測出盲節(jié)點的位置,因此盲節(jié)點是實驗的目標節(jié)點。首先指定其ID,以便在XSniffer界面中讀取數(shù)據(jù)。其次要保證能夠正常接收并提取信標節(jié)點發(fā)送的數(shù)據(jù),才可以計算出正確的節(jié)點間距離值,并得到可信的自身位置坐標。具體實現(xiàn)思路:(1)定義一個接收緩存區(qū)和兩個發(fā)送緩存區(qū),及其對應的變量指針。(2)接收信標節(jié)點發(fā)來的數(shù)據(jù)包,提取信標節(jié)點S發(fā)過來的衰減指數(shù)β值,黃色LED燈亮。(3)利用此RSSI值和衰減指數(shù)分別計算出每個信標節(jié)點和盲節(jié)點之間的距離,選出較小的3個距離值存放到發(fā)送緩存區(qū)一中。(4)設置4個不同的計時器,前3個時間到分別提取接收緩存區(qū)一中數(shù)據(jù)到發(fā)送緩存區(qū)二,第4個時間到利用發(fā)送緩存區(qū)二中數(shù)據(jù)計算出盲節(jié)點坐標值,紅色LED燈亮。(5)發(fā)送成功,指定綠色LED燈亮。(6)將盲節(jié)點的坐標值發(fā)送到基站,并通過XSniffer界面讀取數(shù)據(jù)。
3.2.4 基站節(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界面中。
實驗環(huán)境為20×20的實驗室內(nèi)和室外操場。
信標節(jié)點的坐標設為(0,2),(0,6),(4,0),(8,0),(6,6)。
表1 室內(nèi)實驗結果對比
表2 室外實驗結果對比
從表1和表2發(fā)現(xiàn),當信標節(jié)點放置于坐標軸上時,數(shù)據(jù)誤差較大,是因為室內(nèi)坐標軸選為墻壁,會發(fā)生信號反射,室外坐標軸所選為操場周圍的柵欄,也會對無線信號傳輸產(chǎn)生較大影響。但是明顯可以發(fā)現(xiàn),數(shù)據(jù)差值要比直接的RSSI定位算法小,數(shù)據(jù)的可靠性提高了許多,可見信號衰減指數(shù)β是一個較為關鍵的因素。
信標節(jié)點的實際坐標設為(20,10),(13,19),(13,0),(2,4)。
表3 室內(nèi)實驗結果對比
表4 室外實驗結果對比
從表3和表4發(fā)現(xiàn),擺放信標節(jié)點成正五邊形時,數(shù)據(jù)誤差較第一種情況好,是因為此時信標節(jié)點的位置不在墻壁和操場圍欄處,而且盲節(jié)點擺放的位置處于正五邊形中。且此時數(shù)據(jù)差值較直接RSSI算法好,因為衰減指數(shù)β值的改變。從總體數(shù)據(jù)看,盲節(jié)點擺放位置越接近于正五邊形中心時差值越小,盲節(jié)點位置一直放于正五邊形中,RSSI值衰減比第一種情況穩(wěn)定,從而數(shù)據(jù)差值較小。
信標節(jié)點的實際坐標設為(3,3),(5,2),(7,1),(8,4),(6,2)。
表5 室內(nèi)實驗結果對比
表6 室外實驗結果對比
從表5和表6發(fā)現(xiàn),在隨機擺放信標節(jié)點的情況下,數(shù)據(jù)誤差較第2種情況大,因為此時盲節(jié)點放置的位置遠,室內(nèi)物品較多,干擾較大,室外無線信號干擾,導致RSSI衰減不穩(wěn)定。但是總體數(shù)據(jù)差值<RSSI直接定位算法所得的數(shù)據(jù)差值,可見衰減指數(shù)β對定位有著一定的影響。
實驗環(huán)境是20×20的實驗室內(nèi)和室外操場,由于實驗環(huán)境的局限性,RSSI值會受到多種因素的干擾,實驗室內(nèi)的設備以及人員的走動都會對無線信號產(chǎn)生影響,使得信號發(fā)生反射、繞射、受到障礙物阻擋等現(xiàn)象,操場中會存在其它的無線通訊信號,以及鐵欄桿等障礙物會使信號發(fā)生不穩(wěn)定的衰減,導致RSSI值不穩(wěn)定,產(chǎn)生誤差。但數(shù)據(jù)誤差要比直接的RSSI算法優(yōu)化了一些,原因是沒有采用經(jīng)驗的衰減指數(shù),而是計算所得。
本文在TinyOS操作平臺上利用Crossbow公司的硬件對無線傳感網(wǎng)RSSI改進定位算法進行了實驗驗證。通過節(jié)點間的收發(fā)數(shù)據(jù),得到RSSI值,得到不同位置的衰減指數(shù)值,從而計算出盲節(jié)點與信標節(jié)點之間的距離,最后利用三邊定位算法計算出盲節(jié)點的具體位置坐標值。在大型網(wǎng)絡中,此方法仍然適用,此時盲節(jié)點會接收到多個信標節(jié)點發(fā)送的數(shù)據(jù),計算出多個距離值,只需提取3個最小的距離計算出盲節(jié)點的坐標值。
[1]孫利民,李建中,陳渝,等.無線傳感器網(wǎng)絡[M].北京:清華大學出版社,2005.
[2]李曉維.無線傳感器網(wǎng)絡技術[M].北京:北京理工大學出版社,2007.
[3]LEV IS P,MADDEN S,POLASTRE J,et al.TinyOS:An operating system forwireless sensor networks[C].Berlin:Proceedings of the 7 th International Conference on Mobile Data Management(MDM 2006), Springer2verlag, 2005:115-148.
[4]李麗娜,石高濤,廖明宏.傳感器網(wǎng)絡操作系統(tǒng) TinyOS關鍵技術分析[J].哈爾濱工業(yè)大學學報,2005(6):724-727.
[5]李晶,王福豹,段渭軍.無線傳感器網(wǎng)絡中TinyOS的研究[J].計算機測量與控制,2006(6):838-840.
[6]Crossbow Technology,Inc.Mica2 wireless measurement system[EB/OL].(2004-10-11)[2012-10-11]http://www.xbow.com.
[7]Crossbow Technology,Inc.Mica2dot wireless microsensor mote[EB/OL].(2004-09-12)[2012-10-20]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 Ad Hoc wireless sensor network [C].Salt Lake:Proc.of the 2001 IEEE Int'l Conf.on Acoustics,Speech,and Signal,IEEE SignalProcessing Society,2001(4):2037-2040.
[10]王福豹,史龍,任豐原.無線傳感器網(wǎng)絡中的自身定位系統(tǒng)和算法[J].軟件學報,2005,16(5):1148-1157.
[11]劉喜梅,張超,胡繼珍.一種復雜環(huán)境下無線傳感器網(wǎng)絡定位算法[J].青島科技大學學報:自然科學版,2009(2):173-175.