王中林,劉忠信+,吳 垠,馬爭光,陳增強,孫青林
(1.南開大學 計算機與控制工程學院,天津300071;2.南開大學 天津市智能機器人技術(shù)重點實驗室,天津300071)
ZigBee協(xié)議從下到上分別為物理層 (PHY)、媒體訪問控制層 (MAC)、傳輸層 (TL)、網(wǎng)絡(luò)層 (NWK)、應用層(APL)等。其中物理層和媒體訪問控制層遵循IEEE 802.15.4標準的規(guī)定。ZigBee網(wǎng)絡(luò)主要特點是低成本、低功耗、低復雜度、低速率、支持大量節(jié)點和多種網(wǎng)絡(luò)拓撲、快速、安全、可靠等,因此得到了廣泛的應用,與此同時,中國物聯(lián)網(wǎng)校企聯(lián)盟認為ZigBee作為一種短距離無線通信技術(shù),由于其網(wǎng)絡(luò)可以便捷地為用戶提供無線數(shù)據(jù)傳輸功能,因此在物聯(lián)網(wǎng)領(lǐng)域具有非常強的可應用性。在ZigBee網(wǎng)絡(luò)中的設(shè)備可分為協(xié)調(diào)器 (Coordinator)、路由節(jié)點(Router)和終端節(jié)點 (EndDevice)3種角色。ZigBee技術(shù)可以看成無線傳感器網(wǎng)絡(luò)的一個具體應用規(guī)范,而由德州儀器 (TI)公司推出的無線網(wǎng)絡(luò)協(xié)議堆棧軟件Z-Stack則是ZigBee技術(shù)的一個具體實現(xiàn),它對物理層、媒體訪問控制層、網(wǎng)絡(luò)層以及應用支持子層做了定義,所以用戶可以在Z-Stack的基礎(chǔ)上專注于做應用層的開發(fā),這樣能大大提高開發(fā)效率并能明顯縮短開發(fā)周期,本文的下位機軟件的開發(fā)就是在其基礎(chǔ)上進行的[1,2]。
一個一致性協(xié)議[3]設(shè)計完成后,需要去驗證它的正確性和實用性,通常的做法是在Matlab 環(huán)境中做相應的仿真,然后通過分析仿真結(jié)果來說明協(xié)議的正確性,鑒于這種方式比較快捷迅速,成為了國內(nèi)外學者目前廣泛采用的方法。但是畢竟理論和現(xiàn)實環(huán)境相差比較大,僅僅在理論環(huán)境中做仿真無法驗證協(xié)議的實用性,所以為了更加接近現(xiàn)實環(huán)境,本文采用在無線傳感器網(wǎng)絡(luò)中做實驗的方法去驗證一致性協(xié)議,網(wǎng)絡(luò)中的每個節(jié)點都充當著智能體的角色。為了能有更好的交互性與可控性,本文采用Matlab Gui針對性地開發(fā)了一個上位機控制系統(tǒng),它的主要功能是給下位機發(fā)送指令,且實時接收下位機發(fā)送來的數(shù)據(jù),并在表格中實時顯示各個智能體的狀態(tài)信息及在坐標中實時地繪圖,令整個實驗過程的監(jiān)視更加直觀。該系統(tǒng)界面簡潔友好、運行穩(wěn)定、操作簡單便捷、可擴展性良好,可以有效地幫助一致性協(xié)議的研究。
通過上面的簡單介紹,我們對無線傳感器網(wǎng)絡(luò)、Zig-Bee技術(shù)以及一致性有了一定的認識,在對仿真系統(tǒng)的設(shè)計做詳細介紹之前,這里先簡單介紹一下仿真系統(tǒng)的硬件實驗設(shè)備——CC2530-MDK。
這里的CC2530-MDK,即我們采用的系統(tǒng)的硬件平臺——ZigBee設(shè)備,它是由深圳飛比電子科技有限公司推出的,它是基于美國德州儀器 (TI)公司生產(chǎn)的CC253X 的專業(yè)ZigBee/RF4CE 開 發(fā) 系 統(tǒng)。完 美 支 持IEEE 802.15.4標 準 以 及ZigBee 2007/PRO 和ZigBee RF4CE 標 準。CC2530-MDK 整合了TI公司ZigBee CC2530DK 和RemoTI CC2530DK 兩套開發(fā)系統(tǒng),在功能上與TI公司的官方開發(fā)板SmartRF05EB完美兼容,僅需替換相應協(xié)議棧中LCD驅(qū)動文件即可。它不但可實現(xiàn)簡單的CC253X 系列單品開發(fā),還可方便組建復雜的ZigBee無線網(wǎng)絡(luò)。我們用這個平臺組建簡單的星型網(wǎng)絡(luò),只是在各終端節(jié)點之間通過能否接受到彼此的信息來設(shè)定網(wǎng)絡(luò)拓撲結(jié)構(gòu)[4,5]。
本文該系統(tǒng)中的ZigBee設(shè)備采用16位的網(wǎng)絡(luò)地址,并且除了協(xié)調(diào)器的網(wǎng)絡(luò)地址是0x00外,其他終端節(jié)點的起始網(wǎng)絡(luò)地址是0x796F,然后按加入到網(wǎng)絡(luò)的先后順序依次累加??紤]到實驗的隨機性,當協(xié)調(diào)器重啟后,我們設(shè)定終端設(shè)備的16位網(wǎng)絡(luò)地址將按上面既定的規(guī)則重新分配。關(guān)于ZigBee設(shè)備的2種地址類型 (64位的MAC地址和16位的網(wǎng)絡(luò)地址)的詳細介紹參見文獻 [4,5]。
通過上面的介紹我們對實驗所用的ZigBee設(shè)備有了一定地了解,該部分將詳細介紹一下仿真系統(tǒng)的設(shè)計。我們將首先介紹仿真系統(tǒng)的系統(tǒng)構(gòu)成;然后對系統(tǒng)的軟件開發(fā)平臺做一下簡單概述;接下來會詳細說一下仿真系統(tǒng)各個部分的軟件所實現(xiàn)的功能;之后將介紹一下以及整個系統(tǒng)的工作流程;最后回顧一下在系統(tǒng)設(shè)計中解決的關(guān)鍵問題。
本實驗系統(tǒng)包括硬件和軟件2個部分。硬件包括上文提到的CC2530-MDK,另外還有CCdebugger和USB to RS-232。由于CC2530-MDK 是全功能節(jié)點,所以其即可以做協(xié)調(diào)器節(jié)點也可以充當路由節(jié)點和終端節(jié)點,在本文中只用到了協(xié)調(diào)器節(jié)點和終端節(jié)點。CCdebugger主要作用是在線調(diào)試程序以及通過其向板子下載編譯好的程序。USB to RS-232的作用主要是連接協(xié)調(diào)器節(jié)點和電腦,然后通過上位機控制界面收發(fā)數(shù)據(jù)和向下發(fā)送指令。
軟件包括上位機軟件和下位機軟件2個部分,而下位機軟件又包括協(xié)調(diào)器節(jié)點的軟件設(shè)計和終端節(jié)點的軟件設(shè)計。上位機軟件則是由Matlab Gui開發(fā)的無線傳感器網(wǎng)絡(luò)實驗系統(tǒng)。整個系統(tǒng)的結(jié)構(gòu)框架及總體設(shè)計如圖1 和圖2所示。
圖1 系統(tǒng)的結(jié)構(gòu)框架
通過上面的簡單介紹,我們對系統(tǒng)的整體結(jié)構(gòu)框架以及系統(tǒng)的總體設(shè)計有了一個直觀的認識,在對系統(tǒng)做進一步介紹之前,這里先簡單說一下系統(tǒng)的上位機和下位機軟件開發(fā)平臺。
圖2 系統(tǒng)的總體設(shè)計
本文的下位機 (CC2530-MDK)軟件的開發(fā)平臺采用嵌入式IAR Embedded Workbench IDE。它適用于大量8位、16位以及32位的微處理器和微控制器,為用戶提供一個代碼繼承能力強且支持絕大多數(shù)目標包括特殊目標在內(nèi)的并易學的開發(fā)環(huán)境,使用戶即使在開發(fā)新的項目時也能在所熟悉的開發(fā)環(huán)境中進行,而且通過IAR 工具用戶可以大大節(jié)省工作時間,有效地提高了用戶的工作效率??紤]到對我們所選擇的協(xié)議棧軟件版本ZStack-CC2530-2.3.0-1.4.0的兼容性問題,本文所用的IAR Embedded Workbench IDE版本是IAR EW8051-7.51A。
而上位機控制界面的開發(fā)平臺我們選擇的是Matlab Gui(graphical user interface)。Matlab Gui也是面向?qū)ο蟮膱D形化用戶界面開發(fā)環(huán)境,并且相對于其他高級語言Matlab Gui編程更加簡單易學,只要有一定的C 語言基礎(chǔ)即可很快入門,然后能在短期內(nèi)開發(fā)出比較實用簡潔的程序。很適合對VC++、C#、Java等高級語言不太熟悉并且注重程序的功能性與實用性的研究人員。利用Matlab Gui開發(fā)程序有一個最大的優(yōu)勢就是可以借助Matlab強大的計算與圖形繪制功能來提高編程效率[6]。
通過圖1,我們可以對整個系統(tǒng)的框架結(jié)構(gòu)有個大致的了解,下面分別介紹一下協(xié)調(diào)器節(jié)點、終端節(jié)點以及無線傳感器網(wǎng)絡(luò)實驗系統(tǒng)這三部分所能實現(xiàn)的功能。
首先協(xié)調(diào)器節(jié)點實現(xiàn)的功能包括:組建網(wǎng)絡(luò);接收各終端節(jié)點的發(fā)來的數(shù)據(jù)然后通過USB to RS-232傳到電腦;接收上位機的指令并做相應的處理然后通過無線發(fā)送到各終端節(jié)點;如果有LCD 顯示屏的話可以在顯示屏上顯示相應的提示等。
其次終端節(jié)點實現(xiàn)的功能包括:加入到協(xié)調(diào)器建立的網(wǎng)絡(luò)中,并在網(wǎng)絡(luò)中模擬動態(tài)智能體;接收來自協(xié)調(diào)器發(fā)來的指令以執(zhí)行相應的動作;接收鄰居節(jié)點發(fā)來的數(shù)據(jù)然后做相應的處理并將處理后的信息廣播給協(xié)調(diào)器和鄰居節(jié)點;可以在LCD 顯示屏上實時顯示相應的提示信息等。
最后無線傳感器網(wǎng)絡(luò)實驗系統(tǒng),它實現(xiàn)的功能主要有以下幾點:通過USB轉(zhuǎn)串口線和協(xié)調(diào)器節(jié)點連接,然后實時接收協(xié)調(diào)器傳上來的數(shù)據(jù)并在界面的表格區(qū)域顯示各終端節(jié)點的信息,并用圖像的形式直觀顯示實時的變化曲線或者是相應的節(jié)點坐標位置;用自定義的命令格式通過向協(xié)調(diào)器發(fā)送命令并經(jīng)過協(xié)調(diào)器將指令發(fā)送到各終端節(jié)點;其他的實驗過程需要的軟件設(shè)置、軟件的快捷工具菜單以及不同實驗方案的管理、對歷史數(shù)據(jù)的查看功能和實驗參數(shù)的設(shè)置等。無線傳感器網(wǎng)絡(luò)實驗系統(tǒng)的主界面視圖以及相應的下拉功能菜單如圖3所示。
圖3 無線傳感器網(wǎng)絡(luò)實驗系統(tǒng)主界面
上面對實驗系統(tǒng)的軟件部分的功能做了詳細地介紹。接下來介紹一下整個系統(tǒng)的工作流程。
如圖4所示,首先需要給協(xié)調(diào)器和終端節(jié)點上電,上電后協(xié)調(diào)器負責建立網(wǎng)絡(luò),終端節(jié)點搜索到網(wǎng)絡(luò)并加入,之后協(xié)調(diào)器和終端節(jié)點等待上位機發(fā)送開始指令;下位機準備就緒后通過USB轉(zhuǎn)串口線連接電腦和協(xié)調(diào)器;接下來打開無線傳感器網(wǎng)絡(luò)實驗系統(tǒng);之后開始新建實驗,在新建實驗部分有2個必選設(shè)置分別是選擇實驗方案和選擇實驗節(jié)點數(shù)及狀態(tài)數(shù),節(jié)點數(shù)是根據(jù)打開的終端節(jié)點的個數(shù)來確定,而狀態(tài)個數(shù)則是由選擇何種實驗方案來確定的,新建實驗部分還有2個可選設(shè)置項分別是設(shè)置實驗名稱及日期和設(shè)置串口連接參數(shù),這兩項參數(shù)也可以在新建實驗后在系統(tǒng)設(shè)置中進行更改。節(jié)點名稱以及節(jié)點狀態(tài)名稱也可以在系統(tǒng)設(shè)置中進行自定義更改;新建實驗完成后先嘗試打開串口,若串口不可用會有相應提示,用戶可以在系統(tǒng)設(shè)置中重新選擇可用串口以及將各項參數(shù)更改成和協(xié)調(diào)器的一樣;成功打開串口后就可以點擊開始按鈕開始實驗了;實驗完成后,先后點擊停止與斷開串口連接按鈕,接下來就可以對實驗數(shù)據(jù)進行保存和另存為,以備以后查看歷史數(shù)據(jù)之用。
圖4 系統(tǒng)工作流程
系統(tǒng)設(shè)計中存在的一些關(guān)鍵問題包括:上位機串口通信的設(shè)計以及下位機和上位機之間的數(shù)據(jù)收發(fā)周期的同步2個方面。
在上位機串口通信的設(shè)計上的關(guān)鍵問題主要是選擇采用何種方式進行接收數(shù)據(jù)的問題。在Matlab環(huán)境中,有查詢和中斷2種方法對串口數(shù)據(jù)進行讀取。查詢方式是一種異步串行通信,它需要不停地查詢串行口的緩沖區(qū),一旦有數(shù)據(jù)就進行讀取,這種通信方式的優(yōu)點在于編程簡單,但是由于不能對數(shù)據(jù)進行實時處理以至于系統(tǒng)的實時性比較差,而且會極大地占用系統(tǒng)資源,所以在實際的應用中實用價值不高,故本文選擇了中斷方式收發(fā)數(shù)據(jù)。中斷方式主要是通過對串口進行控制來實現(xiàn)串行通信的,它采用了Matlab的事件驅(qū)動以及編寫相應的回調(diào)函數(shù)機制。Matlab常用的串口通信中斷事件有:輸出緩沖區(qū)為空事件、串行口引腳狀態(tài)改變事件、緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件、接收到的數(shù)據(jù)有指定的結(jié)束符事件等[7]。
本文選擇的事件驅(qū)動方式是緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件,假定我們指定的字節(jié)數(shù)為n,則當串口監(jiān)視到接收數(shù)據(jù)緩沖區(qū)中一旦有n個字節(jié)的數(shù)據(jù)時就即刻激活該事件,然后產(chǎn)生中斷立刻響應相應的回調(diào)函數(shù)進行數(shù)據(jù)處理。這也要求下位機向串口寫數(shù)據(jù)時保證每次寫入的數(shù)據(jù)字節(jié)數(shù)一致,當數(shù)據(jù)字節(jié)數(shù)不夠時可以用空格補齊。在選擇事件驅(qū)動方式的問題上,我們也嘗試過采用接收到的數(shù)據(jù)有指定的結(jié)束符事件,我們通過實驗驗證這種方式和緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件效果一樣,這種方式要求下位機每次向串口寫入數(shù)據(jù)時必須添加和上位機接收指定結(jié)束符一樣的自定義字符,譬如我們假定自定義的結(jié)束符是T,則上位機串口監(jiān)視到發(fā)送上來的數(shù)據(jù)的末尾有字符T 時就立刻激活該事件,然后產(chǎn)生中斷調(diào)用相應的回調(diào)函數(shù)進行數(shù)據(jù)處理。用戶可以根據(jù)自己的需要來選擇采用哪種事件來產(chǎn)生中斷。上面說的回調(diào)函數(shù)相當于一個中斷服務子程序。Matlab 提供了一個缺省的instrcallback(obj,event)回調(diào)函數(shù),其實這個函數(shù)是一個程序模板,用戶可以根據(jù)自己的需要自定義回調(diào)函數(shù)的函數(shù)名和實現(xiàn)方式等。
為了在上位機控制界面實時顯示數(shù)據(jù)以及實時繪圖,界面數(shù)據(jù)的更新周期和下位機終端節(jié)點的無線發(fā)送周期需要保持一致,這樣能避免數(shù)據(jù)顯示出錯。
我們用這套系統(tǒng)分別做了Vicsek 模型一致性算法[8]、有狀態(tài)限制的丟棄型一致性算法[9]以及目標跟蹤算法[10]等幾個方面的實驗。本文主要介紹一下目標跟蹤算法的實驗。這里的目標跟蹤算法指的是我們?nèi)藶榈膶⒁粋€智能體設(shè)定成領(lǐng)導者,而其他智能體則作為跟隨者,跟隨者通過接收到的鄰居信息并根據(jù)內(nèi)置在智能體中的算法程序在實驗一段時間后能夠跟在領(lǐng)導者的附近。圖5演示了跟蹤算法的實驗效果。
圖5中的最長的紅色箭頭代表領(lǐng)導者,藍色箭頭表示跟隨者,從圖5 (a)中可以看出一開始它們都是隨機分布的,方向和速度大小也都是隨機的,整體看上去比較雜亂無章;而從圖5 (b)我們觀察到過一段時間后跟隨者慢慢向領(lǐng)導者靠近,方向、位置及速度都在漸漸趨近領(lǐng)導者;最后的圖5 (c)顯示跟隨者在位置上已經(jīng)全部跟在領(lǐng)導者附近,方向趨于相同,速度基本一致,達到了預期的實驗目標。同時該實驗也驗證了基于Matlab的緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件驅(qū)動的中斷方式能夠穩(wěn)定可靠地進行實時串行通信,并且由于Matlab環(huán)境下編程簡單、數(shù)據(jù)處理及圖形顯示比較方便,大大縮短了控制界面的開發(fā)周期。
本文主要介紹了基于無線傳感器網(wǎng)絡(luò)的多智能體系統(tǒng)一致性仿真系統(tǒng)的設(shè)計與實現(xiàn)。下位機軟件采用C 語言編程;上位機控制界面則用Matlab Gui編程,之所以選擇Matlab Gui是為了借助Matlab強大的計算與繪圖功能,同時由于Matlab Gui比較簡單易于掌握,可以整體上簡化上位機控制界面的編程工作量,從而能極大地提高控制界面的開發(fā)效率。本文中上位機控制系統(tǒng)的界面簡潔友好,操作便捷,運行穩(wěn)定,而且軟件具有良好的可擴展性,能夠?qū)崟r的接收并顯示協(xié)調(diào)器發(fā)送上來的各節(jié)點的狀態(tài)信息,同時還能進行實時的繪圖讓用戶能夠更加直觀地觀察系統(tǒng)運行中各智能體的狀態(tài)變化情況,以及通過向下發(fā)送命令對下位機進行實時的控制。本文利用該仿真系統(tǒng)在多個CC2530-MDK 實驗設(shè)備上運行一致性協(xié)議,通過實驗結(jié)果驗證了一致性協(xié)議的正確性及在實際環(huán)境中的可行性,也說明了該系統(tǒng)能有效地幫助一致性問題的研究。
[1]GAO Shouwei,WU Canyang.ZigBee technology practice tuto-rial:Solutions of the wireless sensor network based on CC2430/31 [M].Beijing:Beijing Aeronautics and Astronautics University Press,2009 (in Chinese). [高守瑋,吳燦陽.ZigBee技術(shù)實踐教程:基于CC2430/31的無線傳感器網(wǎng)絡(luò)解決方案 [M].北京:北京航空航天大學出版社,2009.]
[2]Farahani S.ZigBee wireless networks and transceivers [M].Access Online via Elsevier,2011.
[3]YANG Wen.Consensus problem in multi-agent systems[D].Shanghai:Shanghai Jiao Tong University,2009 (in Chinese).[楊文.多智能體系統(tǒng)一致性問題研究 [D].上海:上海交通大學,2009.]
[4]Instruments T.A true system-on-chip solution for 2.4-GHz IEEE802.15.4and ZigBee applications[EB/OL]. [2011-02-19/2014-02-12].http://www.ti.com/lit/ds/symlink/cc2530.pdf.
[5]Instruments T.CC253xSystem-on-chip Solution for 2.4GHz IEEE802.15.4and ZigBee applications user’s Guide[EB/OL].[2014-01-20/2014-02-12].http://www.ti.com/lit/ug/swru191e/swru191e.pdf.
[6]LUO Huafei.Study notes of MATLAB GUI design [M].Beijing:Beijing Aeronautics and Astronautics University Press,2009 (in Chinese). [羅華飛.MATLAB GUI設(shè)計學習手記[M].北京:北京航空航天大學出版社,2009.]
[7]Gupta R,Bera JN,Mitra M.Development of an embedded system and MATLAB-based GUI for online acquisition and analysis of ECG signal [J]. Measurement,2010,43 (9):1119-1126.
[8]Degond P,Dimarco G,Mac TBN.Hydrodynamics of the Kuramoto-Vicsek model of rotating self-propelled particles[J].arXiv Preprint arXiv:1306.3372,2013.
[9]Liu ZX,Chen ZQ.Discarded consensus of network of agents with state constraint [J].IEEE Transactions on Automatic Control,2012,57 (11):2869-2874.
[10]Hu J,F(xiàn)eng G.Distributed tracking control of leader-follower multi-agent systems under noisy measurement[J].Automatica,2010,46 (8):1382-1387.