劉 明,陶正蘇
(上海交通大學(xué) 電子信息與電氣工程學(xué)院,上海 200240)
無線傳感器網(wǎng)絡(luò)是由分布在給定區(qū)域內(nèi)大量傳感器節(jié)點以無線自組織多跳的通信方式構(gòu)成的網(wǎng)絡(luò)系統(tǒng),目前在環(huán)境監(jiān)測保護、樓宇監(jiān)控、家庭安防、醫(yī)療護理、目標(biāo)跟蹤、軍事等領(lǐng)域已獲得了廣泛的應(yīng)用[1]。
CC2430芯片是TI/Chipcon公司生產(chǎn)的真正意義上的片上系統(tǒng)(SOC)級解決方案,它集增強型工業(yè)標(biāo)準(zhǔn)8051核心、優(yōu)秀的射頻芯片CC2420、強大的外圍資源于一體。集成的外設(shè)資源主要有DMA、定時/計數(shù)器、看門狗定時器、AES-128協(xié)處理器、8通道 8~14位 ADC、USART、休眠模式定時器、復(fù)位電路及21個可編程I/O[2],支持IEEE802.15.4和ZigBee協(xié)議。
CC2430芯片具有性能高、功耗低、接收靈敏度高、抗干擾性強、硬件CSMA/CA支持、數(shù)字化RSSI/LQI支持、DMA支持等特點,支持無線數(shù)據(jù)傳輸率高達250 kbps。
由于無線傳感器網(wǎng)絡(luò)的特殊性,需要操作系統(tǒng)能夠高效地使用傳感器節(jié)點的有限內(nèi)存、低功耗處理器、多樣傳感器、有限的電源,并且能對各種特定應(yīng)用提供最大的支持。
基于此,UC Berkeley研究人員專為嵌入式無線傳感器網(wǎng)絡(luò)開發(fā)出TinyOS系統(tǒng),目前已經(jīng)成為無線傳感器網(wǎng)絡(luò)領(lǐng)域事實上的標(biāo)準(zhǔn)平臺。TinyOS系統(tǒng)具有組件化編程、事件驅(qū)動模式、輕量級線程技術(shù)、主動消息通信技術(shù)等特點[3]。TinyOS采用組件架構(gòu)方式,快速實現(xiàn)各種應(yīng)用,組件包括網(wǎng)絡(luò)協(xié)議、分布式服務(wù)、傳感器驅(qū)動以及數(shù)據(jù)獲取工具等,一個完整的應(yīng)用系統(tǒng)通過組合不同的組件來實現(xiàn)。采用事件驅(qū)動的運行模型,可以處理高并發(fā)性的事件,并實現(xiàn)節(jié)能。
TinyOS應(yīng)用程序通常由頂層配件、核心處理模塊和其它組件構(gòu)成。每個應(yīng)用程序有且僅有一個頂層配件,組件間通過接口進行連接通信,下層組件提供接口,通過provide interface interfaceName來聲明,上層組件使用接口,通過use interface interfaceName來聲明。接口提供兩類函數(shù),分別是命令(command)函數(shù)與事件(event)函數(shù),上層組件向下層組件發(fā)出命令,啟動下層組件的功能;下層組件完成相應(yīng)的功能后向上層組件報告事件。應(yīng)用程序總體框架如圖1所示。

圖1 TinyOS應(yīng)用程序框架圖Fig.1 TinyOS application framework
TinyOS系統(tǒng)本身以及應(yīng)用程序都是采用nesC語言編寫,nesC語言是對C語言的擴展,具有類似于C語言的語法,但支持TinyOS的并發(fā)模型,同時具有組件化機制,能夠與其他組件連接在一起從而形成一個魯棒性很好的嵌入式系統(tǒng)。 nesC語言把組件化/模塊化的編程思想和基于事件驅(qū)動的執(zhí)行模型緊密結(jié)合起來。應(yīng)用nesC語言能夠更快速方便地編寫基于TinyOS的應(yīng)用程序。
本文在RSSI定位基礎(chǔ)上使用質(zhì)心算法提高定位精度,如圖2所示,最后求得的盲節(jié)點坐標(biāo)為點D、E和F組成的三角形的質(zhì)心。

圖2 質(zhì)心法定位示意圖Fig.2 Schematic diagram of centroid algorithm
根據(jù)RSSI測距原理,要確定盲節(jié)點的位置,至少需要三個錨節(jié)點(已知位置的接收節(jié)點),并需要一個匯聚節(jié)點來傳輸各錨節(jié)點的RSSI寄存器值到PC機,最終通過串口調(diào)試助手來顯示結(jié)果并進一步定位盲節(jié)點坐標(biāo)。下面分別介紹移動盲節(jié)點、靜態(tài)錨節(jié)點以及匯聚節(jié)點的實現(xiàn)流程。
盲節(jié)點的主要任務(wù)是向所有錨節(jié)點廣播信息,具體的流程如圖3所示。

圖3 盲節(jié)點工作流程圖Fig.3 Working flow chart of blind node
TinyOS程序頂層配件主體如下:

錨節(jié)點主要功能是接收盲節(jié)點的廣播信息,然后提取RSSI寄存器中的值,通過路由層發(fā)送接口轉(zhuǎn)發(fā)給匯聚節(jié)點,或轉(zhuǎn)發(fā)其它錨節(jié)點的數(shù)據(jù)給匯聚節(jié)點。主要實現(xiàn)流程如圖4所示。

圖4 錨節(jié)點工作流程圖Fig.4 Flow chart of anchor node working
錨節(jié)點的組件連接如下:

靜態(tài)錨節(jié)點通過CC2420Packet接口來獲取RSSI值,具體函數(shù)如下:

匯聚節(jié)點,也稱為基站,主要負責(zé)接收各錨節(jié)點發(fā)送的接收表信息,包括錨節(jié)點ID、DSN和RSSI,并將這些數(shù)據(jù)包通過串口轉(zhuǎn)發(fā)到PC機。具體流程如圖5所示。

圖5 匯聚節(jié)點工作流程圖Fig.5 Flow chart of aggregation node working
匯聚節(jié)點組件連接如下:


本實驗在Cygwin平臺下進行編譯與移植,編譯過程如圖6 所示[5]。

圖6 TinyOS編譯流程圖Fig.6 TinyOS compiling and transporting flow chart
進入Cygwin環(huán)境,切換到TinyOS定位程序目錄下,輸入編譯移植命令:

其中NID是節(jié)點號,是節(jié)點的身份標(biāo)識,同一網(wǎng)絡(luò)中的節(jié)點號必須惟一;GRP是網(wǎng)絡(luò)號,同一網(wǎng)絡(luò)中所有節(jié)點的網(wǎng)絡(luò)號必須一致。
在所有節(jié)點的TinyOS移植完畢后,啟動所有節(jié)點,應(yīng)用串口調(diào)試助手顯示匯聚節(jié)點發(fā)送到PC機的RSSI數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)如圖7所示,其中1~7個字節(jié)數(shù)據(jù)為信息包的包頭,8~9兩字節(jié)為中繼錨節(jié)點的節(jié)點號,10~11兩字節(jié)為源錨節(jié)點的節(jié)點號,12~13字節(jié)為源錨節(jié)點到匯聚節(jié)點的跳數(shù),14~15字節(jié)為盲節(jié)點的節(jié)點號,21~22兩字節(jié)數(shù)據(jù)為錨節(jié)點的RSSI值。

圖7 錨節(jié)點RSSI值Fig.7 RSSI register values of anchor nodes
在確定PC機能夠正確接收各錨節(jié)點的RSSI值后,還需要選取合適的RSSI測距信號衰減模型,將RSSI值轉(zhuǎn)化為距離。本實驗中采用在無線信號傳輸中應(yīng)用廣泛的對數(shù)-常態(tài)模型[6],如式(1)所示:

其中A為盲節(jié)點與錨節(jié)點相距1米時RSSI的絕對值,本實驗中測得A≈40,n為無線信號傳播指數(shù),一般取2~4,經(jīng)過多次試驗取3.0較為合適。將本模型應(yīng)用在所測得的RSSI中,并對比實際距離得到如表1和圖8所示結(jié)果:表1中d為RSSI理論模型所得距離,D為實際測量結(jié)果。
在實驗室環(huán)境下布置了4個錨節(jié)點、1個匯聚節(jié)點和1個盲節(jié)點,4個錨節(jié)點分布在4.8×3.6 m2矩形的4個點,盲節(jié)點位于矩形區(qū)域內(nèi),匯聚節(jié)點在矩形區(qū)域外。

表1 RSSI值與距離的轉(zhuǎn)換Tab.1 Conversion between RSSI value and distance

圖8 RSSI測距模型驗證Fig.8 RSSI ranging model validation
讀取如圖7所示的各錨節(jié)點RSSI值,在Matlab環(huán)境下通過對數(shù)-常態(tài)傳播模型將RSSI值轉(zhuǎn)變?yōu)榫嚯x,最后通過質(zhì)心算法對盲節(jié)點進行定位,計算出盲節(jié)點的坐標(biāo)。在實驗中采用10次測量取平均值來減小定位誤差,并計算對比盲節(jié)點理論坐標(biāo)與實際坐標(biāo)的誤差,得到如圖9所示的定位結(jié)果。
通過定位算法計算出的盲節(jié)點坐標(biāo)為(2.483 1,1.018 5),實際盲節(jié)點坐標(biāo)為(2.4,1.2),誤差為 0.199 6 m,基本實現(xiàn)了對盲節(jié)點的定位。
本文在TinyOS操作系統(tǒng)下實現(xiàn)了基于CC2430模塊的RSSI定位,分析了盲節(jié)點、錨節(jié)點和匯聚節(jié)點的工作流程,確定了實驗室條件下無線傳輸模型Shadowing模型參數(shù),最后利用Matlab計算出盲節(jié)點坐標(biāo)。定位結(jié)果顯示,通過定位算法所得的盲節(jié)點坐標(biāo)與實際坐標(biāo)誤差為0.199 6 m,可滿足大多數(shù)無線傳感器網(wǎng)絡(luò)對節(jié)點定位的要求。

圖9 RSSI定位結(jié)果Fig.9 Result of RSSI localization
[1]Akyildiz I F, Su W,Sankarasubramaniam Y,et al.Wireless sensor networks:a survey[J].Computer Networks,2002(38):395-398.
[2]Texas Instruments.A true system-on-chip solution for 2.4 Ghz IEEE 802.15.4/ZigBee[EB/OL].(2007).http://www.ti.com/lit/ds/symlink/cc2430.pdf.
[3]潘浩,董齊芬,張貴軍,等.無線傳感器網(wǎng)絡(luò)操作系統(tǒng)TinyOS[M].北京:清華大學(xué)出版社,2011.
[4]陳昌祥,達維,周潔.基于RSSI的無線傳感器網(wǎng)絡(luò)距離修正定位算法[J].通信技術(shù),2011,44(2):65-69.
CHEN Chang-xiang, DA Wei, ZHOU Jie.A wireless sensor netoworks distance revised localization algorithm based on RSSI[J].Communication Technology,2011,44(2):65-69.
[5]周迪,陶正蘇,陳德富,等.CC2430節(jié)點移植TinyOS[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2009, 22(6):97-99.
ZHOU Di,TAO Zheng-su,CHEN De-fu,et al.The transplanting of TinyOS program to CC2430[J].Electromechanical Product Development and Innovation,2009,22(6):97-99.
[6]王正斌,秦衛(wèi)平.2.4 GHz無線局域網(wǎng)的室內(nèi)路徑損耗新模型[C]//中國電子學(xué)會第十四屆信息論學(xué)術(shù)年會,2007.