国产性70yerg老太,色综合在,国产精品亚洲一区二区无码,无码人妻束缚av又粗又大

基本信息

項(xiàng)目名稱(chēng):
無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)
小類(lèi):
信息技術(shù)
簡(jiǎn)介:
本設(shè)計(jì)采用ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)和SimpliciTI網(wǎng)絡(luò)實(shí)現(xiàn)計(jì)算機(jī)終端對(duì)機(jī)器人進(jìn)行無(wú)線(xiàn)控制與定位。通過(guò)組建ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò),將大量無(wú)線(xiàn)的傳感器節(jié)點(diǎn)組網(wǎng),計(jì)算機(jī)終端可與機(jī)器人之間進(jìn)行無(wú)線(xiàn)數(shù)據(jù)傳輸,不僅能夠?qū)C(jī)器人工作環(huán)境進(jìn)行實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè),而且能夠?qū)C(jī)器人無(wú)線(xiàn)控制以及無(wú)線(xiàn)定位。 經(jīng)測(cè)試:機(jī)器人在發(fā)出命令到動(dòng)作時(shí)間平均響應(yīng)時(shí)間為0.8s;在室內(nèi)的環(huán)境下無(wú)線(xiàn)操控范圍距離小于20m,室外空曠地小于100m;定位功能受到環(huán)境和節(jié)點(diǎn)位置影響較大,定位精度小于5m;視頻的最大傳輸值平均為7Mb/s;通信誤碼率<1/10000;信噪比(SNR)為60dB~75dB。 無(wú)線(xiàn)定位機(jī)器人既可獨(dú)立工作,將采集各種數(shù)據(jù)傳回PC控制端;PC控制端也可對(duì)其的進(jìn)行遠(yuǎn)程操縱以及精確定位、目標(biāo)跟蹤。利用遠(yuǎn)程監(jiān)控克服了全人工智能無(wú)法應(yīng)對(duì)突發(fā)情況的缺點(diǎn),將人工智能和人工干預(yù)相結(jié)合,因此大大加強(qiáng)了系統(tǒng)的靈活性與復(fù)雜環(huán)境的適用性??梢云毡閼?yīng)用于工廠(chǎng)、車(chē)站物流運(yùn)輸,小區(qū)安防巡邏、醫(yī)療護(hù)理、高危場(chǎng)所等領(lǐng)域。
詳細(xì)介紹:
無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng) 1. 系統(tǒng)設(shè)計(jì) 1.1 系統(tǒng)結(jié)構(gòu)及功能 1.2 方案論證與選擇 1.2.1 無(wú)線(xiàn)通信網(wǎng)絡(luò)的方案論證與選擇 1.2.2 定位方式方案論證與選擇 1.2.3 定位算法方案論證與選擇 1.2.4 智能避障的設(shè)計(jì)方案論證與選擇 2. 系統(tǒng)單元設(shè)計(jì) 2.1 移動(dòng)平臺(tái)設(shè)計(jì) 2.1.1 移動(dòng)平臺(tái)結(jié)構(gòu)與性能 2.1.2 電機(jī)以及驅(qū)動(dòng)電路設(shè)計(jì) 2.1.3 超聲波測(cè)距儀設(shè)計(jì) 2.1.4 紅外避障模塊設(shè)計(jì) 2.1.5 軌跡記錄儀設(shè)計(jì) 2.2 控制電路設(shè)計(jì) 2.3 視頻及其傳輸模塊設(shè)計(jì) 2.4 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)硬件設(shè)計(jì) 2.4.1監(jiān)控終端以及監(jiān)控節(jié)點(diǎn)硬件設(shè)計(jì) 2.4.2 無(wú)線(xiàn)定位節(jié)點(diǎn)硬件設(shè)計(jì) 2.5 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)設(shè)計(jì) 2.5.1 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)軟件設(shè)計(jì) 2.5.3 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)硬件平臺(tái)設(shè)計(jì) 3. ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)設(shè)計(jì) 3.1 開(kāi)發(fā)工具IAR Embedded Workbench for MCS-51簡(jiǎn)介 3.2 建立ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò) 3.2.1啟動(dòng)ZigBee網(wǎng)絡(luò)協(xié)調(diào)器 3.2.2允許設(shè)備入網(wǎng) 3.2.3設(shè)備入網(wǎng) 3.3 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)數(shù)據(jù)服務(wù) 3.3.1 NWK數(shù)據(jù)服務(wù)請(qǐng)求 3.3.2 NWK數(shù)據(jù)服務(wù)證實(shí) 4. ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位系統(tǒng) 4.1 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位機(jī)制 4.2 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位引擎配置 4.3 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位系統(tǒng)節(jié)點(diǎn)的設(shè)置與部署 5. 程序設(shè)計(jì) 5.1 硬件設(shè)計(jì)和軟件設(shè)計(jì)的關(guān)系 5.2 上位機(jī)部分程序設(shè)計(jì) 5.2.1 程序流程圖 5.3 下位機(jī)部分程序設(shè)計(jì) 5.3.1 程序流程圖 5.3.3 避障部分程序設(shè)計(jì) 5.3.3 測(cè)距部分程序設(shè)計(jì) 5.3.4 軌跡記錄部分程序設(shè)計(jì) 5.4 無(wú)線(xiàn)通信部分程序設(shè)計(jì) 5.5 無(wú)線(xiàn)定位部分程序設(shè)計(jì) 6. 系統(tǒng)測(cè)試 6.1 功能測(cè)試 6.2 性能測(cè)試 7. 結(jié)論 8. 參考文獻(xiàn) 附錄1 使用說(shuō)明 附錄2 主要元器件清單 附錄3 電路原理圖 附錄3.1 移動(dòng)平臺(tái)控制部分電路原理圖 附錄3.2 CC1110無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)電路原理圖 附錄3.3 CC2430/CC2431無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)電路原理圖 附錄4 電路印制板圖 附錄4.1 移動(dòng)平臺(tái)控制部分印制板圖 附錄4.2 CC1110無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)印制板圖(頂層) 附錄4.3 CC1110無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)印制板圖(底層) 附錄4.4 CC2430/CC2431無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)印制板圖(頂層) 附錄4.3 CC2430/CC2431無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)印制板圖(底層) 附錄5 程序清單 附錄5.1 電機(jī)控制程序清單 附錄5.2 上位機(jī)主控模塊程序清單 附錄5.3 下位機(jī)主控模塊程序清單 附錄5.4 CC2430參考節(jié)點(diǎn)代碼 附錄5.5 CC2431定位節(jié)點(diǎn)代碼 附錄5.6 ZigBee協(xié)議協(xié)調(diào)器操作代碼 附錄5.7 CC1110 AP節(jié)點(diǎn)代碼 附錄5.8 CC1110 ED節(jié)點(diǎn)代碼 附錄6 實(shí)物圖 附錄6.1 移動(dòng)平臺(tái)實(shí)物圖 附錄6.2 無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)及其網(wǎng)關(guān)實(shí)物圖 1. 系統(tǒng)設(shè)計(jì) 1.1 系統(tǒng)結(jié)構(gòu)及功能 本系統(tǒng)可以分成機(jī)器人工作終端、無(wú)線(xiàn)傳感器監(jiān)控網(wǎng)絡(luò)和PC監(jiān)控終端,通過(guò)ZigBee和SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)網(wǎng)絡(luò)將二者連接起來(lái)。機(jī)器人工作終端以移動(dòng)平臺(tái)為載體,搭載自動(dòng)化設(shè)備和傳感器,并通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)將各類(lèi)傳感器收集獲得的數(shù)據(jù)由傳輸至PC監(jiān)控終端。同時(shí)PC監(jiān)控終端也可以通過(guò)無(wú)線(xiàn)傳感器監(jiān)控網(wǎng)絡(luò)上傳的數(shù)據(jù)。這樣PC監(jiān)控終端既可獲得各機(jī)器人工作終端的位置,亦可對(duì)機(jī)器人的工作環(huán)境和情況進(jìn)行實(shí)時(shí)監(jiān)視,在必要時(shí)對(duì)機(jī)器人終端通過(guò)SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程無(wú)線(xiàn)操縱。 監(jiān)控終端由數(shù)據(jù)中心與電腦組成。數(shù)據(jù)中心是由無(wú)線(xiàn)網(wǎng)絡(luò)的無(wú)線(xiàn)網(wǎng)關(guān)構(gòu)成,在兩種網(wǎng)絡(luò)中分別由Zigbee無(wú)線(xiàn)網(wǎng)關(guān)和SimpliciTI 無(wú)線(xiàn)網(wǎng)關(guān)所擔(dān)任,數(shù)據(jù)中心負(fù)責(zé)網(wǎng)絡(luò)管理,擔(dān)當(dāng)網(wǎng)絡(luò)內(nèi)設(shè)備成員管理任務(wù)并為終端節(jié)點(diǎn)提供數(shù)據(jù)儲(chǔ)存及轉(zhuǎn)發(fā)。此外監(jiān)控終端還包括一個(gè)無(wú)線(xiàn)視頻監(jiān)控器,其攝像端安置于工作終端,通過(guò)此方式加大了對(duì)工作終端監(jiān)控力度。 機(jī)器人工作終端系統(tǒng)是由微控制器與網(wǎng)絡(luò)節(jié)點(diǎn)、傳感器、移動(dòng)平臺(tái)共同組成,在微控制器的統(tǒng)一調(diào)度之下,使機(jī)器人自主工作,將采集到的工作環(huán)境信息及位置信息經(jīng)無(wú)線(xiàn)網(wǎng)絡(luò)傳回?zé)o線(xiàn)網(wǎng)關(guān),并能接收控制信號(hào)引導(dǎo)機(jī)器人動(dòng)作。 無(wú)線(xiàn)傳感器監(jiān)測(cè)網(wǎng)絡(luò)是由大量的監(jiān)控節(jié)點(diǎn)構(gòu)成,監(jiān)測(cè)節(jié)點(diǎn)攜帶了所需要的傳感器,大量的監(jiān)測(cè)節(jié)點(diǎn)形成的無(wú)線(xiàn)網(wǎng)絡(luò)用于收集機(jī)器人發(fā)送的位置信息、環(huán)境信息,當(dāng)機(jī)器人工作位置在PC監(jiān)控終端“1跳”范圍之外時(shí),監(jiān)測(cè)節(jié)點(diǎn)還可以擔(dān)任數(shù)據(jù)傳輸中轉(zhuǎn)任務(wù)。 1.2 方案的確定 1.2.1 無(wú)線(xiàn)通信網(wǎng)絡(luò)方案 無(wú)線(xiàn)通信方式有工作頻段、覆蓋范圍、網(wǎng)絡(luò)容量、傳輸速度、安全性、功耗等性能指標(biāo)。從傳輸速率的角度來(lái)劃分可以分為兩大類(lèi)。一類(lèi)是以無(wú)線(xiàn)高保真Wi-Fi和藍(lán)牙(Bluetooth) 為代表的高速無(wú)線(xiàn)通信技術(shù),一類(lèi)是以Zigbee為代表的低速無(wú)線(xiàn)通信網(wǎng)絡(luò)技術(shù)。從設(shè)計(jì)的需求來(lái)分析,要求通信方式必須易于組網(wǎng),對(duì)通信速率要求相對(duì)較低,抗干擾以及安全性較弱,對(duì)頻段沒(méi)有特殊的要求。 根據(jù)對(duì)不同方案的初步分析,可以看到各種網(wǎng)絡(luò)的性能以及應(yīng)用范圍。Wi-Fi技術(shù)性能優(yōu)越,滿(mǎn)足了多媒體以及Internet數(shù)據(jù)的傳輸要求,但是將其應(yīng)用與本設(shè)計(jì)就將大大浪費(fèi)資源,并且其高功耗使得系統(tǒng)持續(xù)工作時(shí)間很短。Bluetooth的傳輸速度也達(dá)到了1Mbit/s,而且安全性也相對(duì)較高,雖然設(shè)備的通用性較高,但是協(xié)議復(fù)雜、組網(wǎng)不夠便利且覆蓋范圍較小。由以上分析可知Wi-Fi和Bluetooth 都是很出色的無(wú)線(xiàn)系統(tǒng),實(shí)際上它擁有最大的無(wú)線(xiàn)技術(shù)容量,但是這些技術(shù)的目標(biāo)并不是以監(jiān)控為主要目標(biāo)的無(wú)線(xiàn)應(yīng)用。相對(duì)于簡(jiǎn)單的低功耗應(yīng)用來(lái)說(shuō),兩者的功能都過(guò)于強(qiáng)大,產(chǎn)生資源的浪費(fèi)。因此Zigbee 為代表的低速無(wú)線(xiàn)通信技術(shù)應(yīng)為方案的首選。從數(shù)據(jù)速率以及覆蓋范圍、功耗二者沒(méi)有太大的區(qū)別,但是Zigbee網(wǎng)絡(luò)支持一種定位技術(shù),相比之下其監(jiān)控功能強(qiáng)大很多。從Zigbee協(xié)議結(jié)構(gòu)與SimpliciTI協(xié)議結(jié)構(gòu)相比,SimpliciTI協(xié)議取消了物理層(PHY)和數(shù)據(jù)鏈路層(MAC),使協(xié)議更加簡(jiǎn)化。正是由于SimpliciTI拋棄了很多保障功能,其數(shù)據(jù)速率會(huì)更快、功耗會(huì)更低。因此將二者結(jié)合使用,發(fā)揮自身的優(yōu)勢(shì)。 1.2.2 定位方案 根據(jù)機(jī)器人的工作環(huán)境的不同可分為室內(nèi)、室外兩種情況,并且這兩種情況下都有與之相適應(yīng)的的定位技術(shù)。目前廣泛應(yīng)用于定位領(lǐng)域的是GPS技術(shù),GPS幾乎可以覆蓋全球并且民用是免費(fèi)的。相對(duì)于GPS而言在某些場(chǎng)合下針對(duì)局部范圍內(nèi)的定位方式大多都必須根據(jù)實(shí)際情況架設(shè)RF基站,在組成無(wú)線(xiàn)網(wǎng)絡(luò)之后才能針對(duì)設(shè)備終端信號(hào)進(jìn)行位置判斷。 在機(jī)器人定位方式的選擇中,GPS定位系統(tǒng)相對(duì)小型設(shè)備定位精度比較低,而且當(dāng)移動(dòng)平臺(tái)在室內(nèi)工作時(shí)GPS又需要對(duì)設(shè)備進(jìn)行改進(jìn),此方案在應(yīng)用中會(huì)遇到很多實(shí)際問(wèn)題。而上述局部定位方式,在架設(shè)基站與組建局域網(wǎng)的過(guò)程中會(huì)遇到復(fù)雜的問(wèn)題,并且在接收與處理信號(hào)方面對(duì)硬件有更高的要求,實(shí)現(xiàn)起來(lái)所需的算法以及數(shù)據(jù)處理非常復(fù)雜。相對(duì)而言基于CC2431無(wú)線(xiàn)定位引擎的定位系統(tǒng)的開(kāi)發(fā)和使用比較簡(jiǎn)單,而且由于建立ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的基礎(chǔ)上,大大節(jié)約了系統(tǒng)整體的軟硬件開(kāi)銷(xiāo)。此外需再結(jié)合多種傳感器對(duì)機(jī)器人進(jìn)行輔助定位。 1.2.3 定位算法方案 在基于ZigBee協(xié)議的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中,其定位機(jī)制可以簡(jiǎn)述為:根據(jù)有限的位置已知的信標(biāo)節(jié)點(diǎn)來(lái)確定網(wǎng)絡(luò)中其他節(jié)點(diǎn)的位置,在無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)之間建立起位置關(guān)聯(lián)的機(jī)制。在該網(wǎng)絡(luò)中需要定位的節(jié)點(diǎn)稱(chēng)之為未知節(jié)點(diǎn)(Blind node),而已知位置并需確定該網(wǎng)絡(luò)中未知節(jié)點(diǎn)位置的節(jié)點(diǎn)稱(chēng)之為參考節(jié)點(diǎn)(Reference node),在一個(gè)節(jié)點(diǎn)通信半徑范圍的可直接通信的節(jié)點(diǎn)稱(chēng)之為鄰節(jié)點(diǎn)(Neighbor node)。 在基于ZigBee協(xié)議的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中,傳感器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)目大、能量有限、可靠性差,甚至部署都有不確定性,此外節(jié)點(diǎn)通信能力、數(shù)據(jù)儲(chǔ)存和處理能力有限。因此建立在ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)上的定位技術(shù),需要針對(duì)無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量多,網(wǎng)絡(luò)規(guī)模大的特點(diǎn),滿(mǎn)足其低成本、低功耗、低依賴(lài)度和高適應(yīng)性的要求。 在ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)當(dāng)中,由CC2431芯片組成的節(jié)點(diǎn)模塊使用芯片已有的定位引擎精確地讀出RSSI值,進(jìn)一步處理和傳輸RSSI值,不需要增加額外硬件的。在測(cè)定節(jié)點(diǎn)間距離的基礎(chǔ)上,通過(guò)參考節(jié)點(diǎn)計(jì)算未知節(jié)點(diǎn)的方法有多種,從最簡(jiǎn)單三點(diǎn)定位直至多點(diǎn)定位可以由幾何關(guān)系建立方程組從而求得未知節(jié)點(diǎn)的位置。 在大規(guī)模的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中,這種簡(jiǎn)單的定位算法不可能適應(yīng),因此在此基礎(chǔ)之上必須改進(jìn)網(wǎng)絡(luò)節(jié)點(diǎn)的部署和定位算法。為了約束網(wǎng)絡(luò)的無(wú)限擴(kuò)大和節(jié)點(diǎn)之間的復(fù)雜無(wú)序狀態(tài),按照每個(gè)未知節(jié)點(diǎn)和周?chē)?jié)點(diǎn)相近的位置關(guān)系自動(dòng)組合,形成若干個(gè)單元,通過(guò)多個(gè)未知節(jié)點(diǎn)之間的距離信息將各單元相組合,形成相對(duì)的坐標(biāo)系統(tǒng)。從其中劃分出邊界節(jié)點(diǎn),通過(guò)對(duì)周?chē)鷨卧W(wǎng)絡(luò)的約束關(guān)系,從而確定了全局坐標(biāo)下各單元網(wǎng)絡(luò)的坐標(biāo)變換矩陣。進(jìn)一步將網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)一步細(xì)分為:參考節(jié)點(diǎn)、已知節(jié)點(diǎn)、準(zhǔn)已知節(jié)點(diǎn)、邊界節(jié)點(diǎn)、未知節(jié)點(diǎn)。準(zhǔn)已知節(jié)點(diǎn)是指單位網(wǎng)絡(luò)內(nèi)局部坐標(biāo)系下位置已知點(diǎn),而局部坐標(biāo)系又可通過(guò)坐標(biāo)變換矩陣同全局坐標(biāo)系相轉(zhuǎn)換,最終確定了每一節(jié)點(diǎn)的位置。 目前在各種領(lǐng)域內(nèi)都有與其相適應(yīng)的合適算法,例如DV-HOP、EUCLIDEAN、ROBUST POSITION等算法,它們都各自用來(lái)解決不同的問(wèn)題支持不同的應(yīng)用范圍。在本設(shè)計(jì)中由于網(wǎng)絡(luò)沒(méi)有形成很大規(guī)模,因此只需要簡(jiǎn)單的算法既可。 CC2431的定位算法為基于處理RSSI方法,定位方案示意圖。在此坐標(biāo)系下,所以參考節(jié)點(diǎn)的位置信息可以簡(jiǎn)化為(x,y)的形式。當(dāng)進(jìn)行定位檢測(cè)時(shí)未知節(jié)點(diǎn)(Blind node)向各參考節(jié)點(diǎn)(Reference node)發(fā)出請(qǐng)求并接收參考節(jié)點(diǎn)的響應(yīng)信號(hào),各參考節(jié)點(diǎn)向未知節(jié)點(diǎn)發(fā)送包含參考節(jié)點(diǎn)“X”和“Y”位置信息的數(shù)據(jù)包,未知節(jié)點(diǎn)讀出接收到的RSSI數(shù)值,并送入硬件引擎。此外定位計(jì)算能夠在每一個(gè)未知節(jié)點(diǎn)上所運(yùn)行,運(yùn)算被分散,只有傳送計(jì)算后的位置,這樣減少了在網(wǎng)絡(luò)中傳輸數(shù)據(jù)的總量。因此在簡(jiǎn)易的條件下,以CC2431芯片為基礎(chǔ)的ZigBee定位方案是最佳的選擇。 1.2.4 智能避障方案 超聲波傳感器相比之下檢測(cè)速度快、范圍廣,并且超聲波傳感器可以測(cè)量移動(dòng)平臺(tái)至障礙物的距離。在本設(shè)計(jì)中超聲波傳感器是實(shí)現(xiàn)測(cè)量障礙物距離最佳的選擇。 2. 系統(tǒng)單元 無(wú)線(xiàn)定位機(jī)器人主要包括機(jī)器人終端、無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)和PC監(jiān)控端。機(jī)器人終端以車(chē)體機(jī)械平臺(tái)為載體,包含有控制器電路模塊、電機(jī)驅(qū)動(dòng)模塊、視頻圖像模塊、智能避障模塊、軌跡記錄儀模塊、CC2431定位模塊等部分。無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)是由多個(gè)CC2431無(wú)線(xiàn)模塊通過(guò)ZigBee協(xié)議組成一個(gè)無(wú)線(xiàn)網(wǎng)絡(luò),每個(gè)模塊可以安裝各種傳感器接收所在位置的數(shù)據(jù)并將其傳回?zé)o線(xiàn)網(wǎng)關(guān),最終上傳至PC控制端。同時(shí)無(wú)線(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)也可以對(duì)機(jī)器人終端進(jìn)行定位。 2.1 移動(dòng)平臺(tái) 移動(dòng)平臺(tái)的工作環(huán)境不確定,因此移動(dòng)平臺(tái)需要具有強(qiáng)勁的動(dòng)力,轉(zhuǎn)彎靈活爬坡能力好,于是本設(shè)計(jì)采用由步進(jìn)電機(jī)驅(qū)動(dòng)的兩輪履帶設(shè)計(jì)方案。從動(dòng)鏈輪的芯輪軸置于可前后和上下移動(dòng)的調(diào)節(jié)滑塊和彈性懸架上,使前輪不僅具有轉(zhuǎn)向作用又能夠起到驅(qū)動(dòng)作用,這樣移動(dòng)平臺(tái)牽引力得到增強(qiáng),滿(mǎn)足在負(fù)載較大時(shí)對(duì)牽引力的需求,轉(zhuǎn)向精度也大大提高并且具備了原地旋轉(zhuǎn)的能力。 2.1.1 移動(dòng)平臺(tái)結(jié)構(gòu)與性能 移動(dòng)平臺(tái)結(jié)構(gòu)與性能如下所示: 車(chē)體外形:180mm(長(zhǎng))× 125.5mm(寬)× 55mm(高),底盤(pán)高 9mm ,車(chē)輪直徑48mm ; 電機(jī):額定功率下輸出電流270mA; 齒輪:三級(jí)12:50; 扭矩大?。?1.2 kg?cm; 載重:7.5Kg; 速度:最大行駛速度30cm/s,通過(guò)調(diào)整PWM輸出可以控制移動(dòng)平臺(tái)的速度; 電池:采用鉛蓄電池,型號(hào)為BT- 12M HRSEALED LEAD.ACID BATTERY,重量為1.00Kg,最大充電電流為550mA,充電電壓為14.5V~15.0V。 根據(jù)移動(dòng)平臺(tái)的載重大小和速度的快慢不同,測(cè)試結(jié)果表明最長(zhǎng)續(xù)航時(shí)間為3小時(shí)。 2.1.2 電機(jī)以及驅(qū)動(dòng)電路 電機(jī)作為移動(dòng)平臺(tái)移動(dòng)能力核心來(lái)源,直接關(guān)系到整個(gè)移動(dòng)平臺(tái)的性能,因此必須選取合適的電機(jī)。本移動(dòng)平臺(tái)采用了260直流電機(jī),針對(duì)市面上種類(lèi)繁多的直流電機(jī)驅(qū)動(dòng)器集成電路芯片,結(jié)合大量的260直流電機(jī)工作的實(shí)際數(shù)據(jù)進(jìn)行分析。主要以移動(dòng)平臺(tái)堵轉(zhuǎn)時(shí)的最大電流,正常行駛中的平均電流,爬坡時(shí)的相對(duì)電流平均值,電機(jī)的工作電壓,以及要求的實(shí)時(shí)反應(yīng)速度為主要指標(biāo),最終確定選擇專(zhuān)用電機(jī)驅(qū)動(dòng)集成電路芯片LM18200來(lái)驅(qū)動(dòng)電機(jī)。 2.1.3 超聲波測(cè)距儀 超聲波測(cè)距儀的設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)部分。將超聲波傳感器與舵機(jī)結(jié)合安裝,舵機(jī)在微控制器的控制下可旋轉(zhuǎn)180°,由舵機(jī)帶動(dòng)控制超聲波傳感器的旋轉(zhuǎn),利用一個(gè)超聲波傳感器檢測(cè)前方180°內(nèi)的障礙。相比單一的超聲波傳感器安裝方案視野更加廣闊,避障更強(qiáng)。這種方案不但節(jié)省了器件成本,而其節(jié)約了I/O口線(xiàn)的資源。使得避障模塊占用CPU資源少,CPU則可以更大發(fā)揮其功能。 2.1.4 紅外避障模塊 采用紅外傳感器E18-D80NK可探測(cè)是否存在前方障礙物。加裝施密特觸發(fā)器及濾光后,可以精確探測(cè)前方3厘米處是否有障礙物。此外在移動(dòng)平臺(tái)前方,左側(cè)和右側(cè)各安裝一只紅外傳感器。 2.1.5 軌跡記錄儀 通過(guò)記錄平臺(tái)直線(xiàn)移動(dòng)距離以及車(chē)體轉(zhuǎn)向角度可以達(dá)到記錄平臺(tái)的行進(jìn)軌跡的目的。記錄直線(xiàn)移動(dòng)距離可以通過(guò)測(cè)量車(chē)輪轉(zhuǎn)動(dòng)的次數(shù)與車(chē)輪周長(zhǎng)即可,記錄移動(dòng)平臺(tái)轉(zhuǎn)動(dòng)角度通過(guò)軟件的方式記錄前后電機(jī)行進(jìn)時(shí)間和暫停時(shí)間從而間接測(cè)量移動(dòng)平臺(tái)的轉(zhuǎn)動(dòng)數(shù)據(jù)。記錄直線(xiàn)移動(dòng)距離采用霍爾集傳感器。 2.2 控制電路 移動(dòng)平臺(tái)的控制電路以P89V51RD2為核心,外圍設(shè)備包括電源電路、電機(jī)驅(qū)動(dòng)電路、軌跡記錄儀、紅外避障,障礙物距離檢測(cè)等模塊,完成了P89V51RD2與各工作模塊通信,并對(duì)其進(jìn)行統(tǒng)一協(xié)調(diào)控制。 2.3 視頻及其傳輸模塊 該系統(tǒng)包括CCD成像系統(tǒng)和無(wú)線(xiàn)數(shù)據(jù)傳輸模塊。CCD (Charge Coupled Device)可以將可視范圍內(nèi)的景物通過(guò)感光單元逐點(diǎn)地進(jìn)行光電信號(hào)轉(zhuǎn)換、存儲(chǔ)和傳輸,輸出為視頻信號(hào)。無(wú)線(xiàn)視頻數(shù)據(jù)傳輸可以實(shí)現(xiàn)PC監(jiān)控端得到機(jī)器人周?chē)鷪D像,操控人員依據(jù)視頻圖像對(duì)機(jī)器人進(jìn)行遠(yuǎn)程無(wú)線(xiàn)操控。 2.4 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)硬件 Zigbee技術(shù)是一種具有統(tǒng)一技術(shù)標(biāo)準(zhǔn)的短距離無(wú)線(xiàn)通信技術(shù)。完整的Zigbee協(xié)議棧由物理層(PHY)、介質(zhì)訪(fǎng)問(wèn)控制層(MAC)、網(wǎng)絡(luò)層、安全層和應(yīng)用層組成。其物理層和介質(zhì)訪(fǎng)問(wèn)控制層協(xié)議為IEEE802.15.4協(xié)議標(biāo)準(zhǔn),網(wǎng)絡(luò)層和安全層由Zigbee聯(lián)盟制定,應(yīng)用層的開(kāi)發(fā)應(yīng)根據(jù)用戶(hù)自己的需要,進(jìn)行進(jìn)一步開(kāi)發(fā)利用。 物理層和介質(zhì)訪(fǎng)問(wèn)控制層協(xié)議為IEEE802.15.4協(xié)議標(biāo)準(zhǔn),本設(shè)計(jì)選定工作層為2.4GHz物理層,該頻段定義了16個(gè)頻道。IEEE規(guī)范了物理層的傳輸速率和調(diào)制方式等相關(guān)內(nèi)容并且為MAC和物理層保留了一個(gè)無(wú)線(xiàn)通道的接口。 介質(zhì)訪(fǎng)問(wèn)控制層處理所有物理層無(wú)線(xiàn)信道的接入,包括設(shè)備間無(wú)線(xiàn)鏈路的建立、維護(hù)和斷開(kāi),確定模式的幀傳送與接收,信道的接入與控制。在本設(shè)計(jì)中,Zigbee網(wǎng)絡(luò)采用星狀網(wǎng)絡(luò),需要中心控制設(shè)備,并且與PC相通信,組成PC監(jiān)控端。 ZigBee網(wǎng)絡(luò)層的主要功能是提供一些必要的函數(shù),確保ZIgBee的MAC層正常工作,并且為應(yīng)用層提供合適的服務(wù)接口。為了向應(yīng)用層提供其接口,網(wǎng)絡(luò)層提供了兩個(gè)必須的功能服務(wù)實(shí)體,它們分別為數(shù)據(jù)服務(wù)實(shí)體和管理服務(wù)實(shí)體。數(shù)據(jù)服務(wù)實(shí)體為數(shù)據(jù)提供服務(wù),在同一個(gè)內(nèi)部個(gè)域網(wǎng)中兩個(gè)或者更多的設(shè)備之間傳送數(shù)據(jù)時(shí),將按照應(yīng)用協(xié)議數(shù)據(jù)單元(APDU)的格式進(jìn)行傳送。網(wǎng)絡(luò)層管理實(shí)體提供網(wǎng)絡(luò)管理服務(wù),具有配置一個(gè)新的設(shè)備、初始化一個(gè)網(wǎng)絡(luò)、連接和斷開(kāi)網(wǎng)絡(luò)、鄰居設(shè)備發(fā)現(xiàn)、路由發(fā)現(xiàn)、接收控制等功能。 在ZigBee網(wǎng)絡(luò)中存在三種邏輯設(shè)備類(lèi)型:協(xié)調(diào)器 (Coordinator),路由器 (Router)和終端設(shè)備 (End-Device)。ZigBee網(wǎng)絡(luò)由一個(gè)協(xié)調(diào)器以及多個(gè)路由器和多個(gè)終端設(shè)備組成 。ZigBee無(wú)線(xiàn)傳感器終端節(jié)點(diǎn)都是由一個(gè)8位或16位的單片機(jī)和ZigBee射頻芯片組成。Ti-Chipcon公司生產(chǎn)的CC2430/31是其中的比較好的選擇。終端節(jié)點(diǎn)可分為參考節(jié)點(diǎn)和未知節(jié)點(diǎn)以及傳感器監(jiān)控節(jié)點(diǎn)。從硬件組成來(lái)說(shuō),各節(jié)點(diǎn)都是由CC2430/31為核心搭建的模塊。唯一不同是CC2431相比CC2430增加了一個(gè)定位引擎,也正是因此,搭載了CC2431的模塊可以作為未知節(jié)點(diǎn),參考節(jié)點(diǎn)可由CC2430擔(dān)任,未知節(jié)點(diǎn)通過(guò)對(duì)參考節(jié)點(diǎn)的檢測(cè)即可得出自身位置,完成對(duì)機(jī)器人的定位。 2.4.1監(jiān)控終端以及監(jiān)控節(jié)點(diǎn)硬件 監(jiān)控終端在網(wǎng)絡(luò)中是作為協(xié)調(diào)器存在,監(jiān)控節(jié)點(diǎn)是作為終端設(shè)備或者路由器存在。為了節(jié)約成本,不需要定位功能的監(jiān)控終端和監(jiān)控節(jié)點(diǎn)均可以由CC2430擔(dān)任。 CC2430是一款支持ZigBee協(xié)議的低功耗的片上系統(tǒng),它包括ZigBee 射頻前端、內(nèi)存和微控制器。 2.4.2無(wú)線(xiàn)定位節(jié)點(diǎn)硬件 無(wú)線(xiàn)定位節(jié)點(diǎn)要求芯片具有定位功能,因此無(wú)線(xiàn)定位節(jié)點(diǎn)模塊必須選用帶有定位引擎的CC2431芯片。定位引擎利用是一個(gè)從軟件層面看來(lái)極其簡(jiǎn)單的輸入輸出端口,簡(jiǎn)單地可以理解為寫(xiě)入?yún)?shù),等待計(jì)算,讀出計(jì)算的位置結(jié)果。 2.5 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò) 2.5.1 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)軟件 SimpliciTI 網(wǎng)絡(luò)協(xié)議能夠簡(jiǎn)化施工,可實(shí)現(xiàn)MCU資源占用的最小化,從而降低了低功耗RF網(wǎng)絡(luò)的系統(tǒng)成本,對(duì)Zigbee網(wǎng)絡(luò)是一種很好的補(bǔ)充。SimpliciTI 網(wǎng)絡(luò)協(xié)議支持星狀網(wǎng)絡(luò)拓?fù)浜忘c(diǎn)對(duì)點(diǎn)對(duì)等網(wǎng)絡(luò)兩種基本的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。星狀網(wǎng)絡(luò)拓?fù)浒?個(gè)數(shù)據(jù)中心和若干個(gè)終端節(jié)點(diǎn)。數(shù)據(jù)中心負(fù)責(zé)網(wǎng)絡(luò)管理。為終端節(jié)點(diǎn)提供數(shù)據(jù)儲(chǔ)存轉(zhuǎn)發(fā),并可以管理網(wǎng)絡(luò)內(nèi)設(shè)備成員。SimpliciTI 網(wǎng)絡(luò)協(xié)議所支持的點(diǎn)對(duì)點(diǎn)通信,可以使數(shù)據(jù)中心(Access Point)儲(chǔ)存并發(fā)送數(shù)據(jù),并且通過(guò)范圍拓展設(shè)備(Range Extender)來(lái)擴(kuò)大網(wǎng)絡(luò)覆蓋范圍以支持四次網(wǎng)絡(luò)跳轉(zhuǎn)。 SimpliciTI協(xié)議主要包括。SimpliciTI 網(wǎng)絡(luò)協(xié)議主要包括三層:應(yīng)用層(Application Layer)、網(wǎng)絡(luò)層(Network Layer)、硬件邏輯層(Lite Hardware Abstraction Layer),硬件邏輯層包括射頻層(Radio)、應(yīng)用板支持程序包(Board Support Package)。SimpliciTI沒(méi)有物理層(PHY)和數(shù)據(jù)鏈路層(MAc/LLC),數(shù)據(jù)直接從射頻層接收。 本設(shè)計(jì)中將通信網(wǎng)絡(luò)設(shè)置為星狀網(wǎng)絡(luò)。其包括1個(gè)數(shù)據(jù)中心和若干終端節(jié)點(diǎn)。數(shù)據(jù)中心主要負(fù)責(zé)網(wǎng)絡(luò)管理。數(shù)據(jù)中心為終端節(jié)點(diǎn)ED提供存儲(chǔ)、轉(zhuǎn)發(fā)等,并管理網(wǎng)絡(luò)設(shè)備內(nèi)成員權(quán)限、連接權(quán)限以及安全等。同時(shí)支持點(diǎn)對(duì)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)傳輸。即sirnpliciTI網(wǎng)絡(luò)可以支持任意一對(duì)點(diǎn)對(duì)點(diǎn)設(shè)備之間的數(shù)據(jù)傳輸。以此為基礎(chǔ),PC監(jiān)控端可以與任意的機(jī)器人之間相互通信從而達(dá)到無(wú)線(xiàn)操控的目的。 2.5.3 SimpliciTI無(wú)線(xiàn)通信網(wǎng)絡(luò)硬件平臺(tái) SimpliciTI協(xié)議能夠開(kāi)盒即用(out of the box)地在CC1110上運(yùn)行,因此在SimpliciTI網(wǎng)絡(luò)中經(jīng)常使用CC1110來(lái)完成組網(wǎng)任務(wù)。無(wú)線(xiàn)通信網(wǎng)絡(luò)的節(jié)點(diǎn)是以CC1110為核心搭建而成。 3. ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)設(shè)計(jì) 3.1 開(kāi)發(fā)工具IAR Embedded Workbench for MCS-51 IAR Embedded Workbench for MCS-51S是由IAR Systems公司為CC2430、CC1110等芯片開(kāi)發(fā)的一個(gè)集成環(huán)境。IAR Embedded Workbench具有入門(mén)容易、使用方便、代碼緊湊的特點(diǎn)。該環(huán)境包含一個(gè)全軟件的模擬程序。用戶(hù)不需要任何硬件支持就可以針對(duì)各種芯片內(nèi)核,外部設(shè)備以及中斷進(jìn)行仿真。本設(shè)計(jì)所用的是IAR Embedded Workbench 7.20。 3.2 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)建立 3.2.1啟動(dòng)ZigBee網(wǎng)絡(luò)協(xié)調(diào)器 在對(duì)以下函數(shù)進(jìn)行調(diào)用后,即可啟動(dòng)ZigBee網(wǎng)絡(luò)協(xié)調(diào)器。 (1)NLME-NETWORK-FORMATION.request原語(yǔ) (2)MLME-SCAN.request原語(yǔ) (3)MLME-SCAN.confirm原語(yǔ) (4)MLME-SET.request原語(yǔ) (5)MLME-START.request原語(yǔ) (6)NLME-NETWORK-FORMATION.confirm原語(yǔ)等 3.2.2允許設(shè)備入網(wǎng) ZigBee協(xié)調(diào)器或路由器的上層產(chǎn)生NLME-PERMIT-JIONING.request請(qǐng)求原語(yǔ),并將其發(fā)送到NLME,為MAC子層的允許關(guān)聯(lián)標(biāo)志位設(shè)置為某個(gè)數(shù)值,在此時(shí)間內(nèi)ZigBee協(xié)調(diào)器或路由器允許其他設(shè)備加入到它所在的網(wǎng)絡(luò)。 NLME-PERMIT-JOINlNG.request原語(yǔ)由ZigBee協(xié)調(diào)器或路由器的上層產(chǎn)生并發(fā)送給NLME,用以把MAC子層的允許關(guān)聯(lián)標(biāo)志位設(shè)置為一個(gè)固定時(shí)限,在這段時(shí)間內(nèi)ZigBee協(xié)調(diào)器或路由器允許其他設(shè)備加入到它所在的網(wǎng)絡(luò)。只有ZigBee協(xié)調(diào)器或路由器的上層能夠發(fā)NLME-PERMIT-JOINlNG.request原語(yǔ)。如果一個(gè)ZigBee終端設(shè)備的NWK層收到該請(qǐng)求原語(yǔ),NLME-PERMIT-JOINING.confirm證實(shí)原語(yǔ)將返回狀態(tài)INVALID_REQUEST。當(dāng)接收到NLME-PERMIT-JOINING.request原的PermitDumtion等于0x00時(shí),NLME就向MAC子層發(fā)出MLME-SET.request原語(yǔ)把MACPIB屬性macAssociationPermit設(shè)為FALSE。MLME在收到來(lái)自MAC層的證實(shí)原語(yǔ)MIME-SET.confirm后,再向上一層發(fā)送與MLME-SET.comfirm相同狀態(tài)的證實(shí)原語(yǔ)NLME-PERMIT-JOINING.confirm。當(dāng)接收到NLME-PERMIT-JOINING.request原語(yǔ)PermitDuration參數(shù)值等于0xFF時(shí),NLME就向MAC子層發(fā)出MLME-SET.request原語(yǔ)把MAC PIB屬性maeAssociationPermit設(shè)為T(mén)RUE。MLME在收到證實(shí)原語(yǔ)MLME-SET.confirm后,再向上一層發(fā)送相同狀態(tài)的證實(shí)原語(yǔ)NLME-PERMIT-JOINIMG.confirm。如果接收到NLME-PERMIT-JOINING.request原語(yǔ)的PermitDuration參數(shù)值不等于Ox00或Oxff,NLME將采用同樣的方法把MAC PIB屬性maeAssociatiouPermit設(shè)為T(mén)RUE,在接收到證實(shí)原語(yǔ)MLME-SET.confirm后啟動(dòng)一個(gè)定時(shí)器,計(jì)時(shí)時(shí)長(zhǎng)為PermitDmation秒。啟動(dòng)定時(shí)器后,NLME就向上層發(fā)送NLME-PERMIT-firm證實(shí)原語(yǔ),狀態(tài)等于MAC子層返回的狀態(tài)。計(jì)時(shí)期滿(mǎn)后,NLME再次調(diào)用MLME-SET.request原語(yǔ)把屬macAssociafionPermit設(shè)置為FALSE。 NLME-PERMIT-firm證實(shí)原語(yǔ)是對(duì)NLME-PERMIT-JOINING.request的響應(yīng),它是由ZigBee協(xié)調(diào)器或路由器的NLME發(fā)送,告知應(yīng)用層請(qǐng)求允許關(guān)聯(lián)的請(qǐng)求結(jié)果。 3.2.3設(shè)備入網(wǎng) 設(shè)備入網(wǎng),需要對(duì)以下函數(shù)進(jìn)行調(diào)用。 (1)NLME-NETWORK-DISCOVERY.request原語(yǔ) (2)MLME-BEACON-NOTIFY.indcation指示原語(yǔ) (3)NLME-NETWORK-DISCOVERY.confirm原語(yǔ) (4)NLME-JOIN.request請(qǐng)求原語(yǔ) (5)MLME-ASSOCIATE.request原語(yǔ) (6)MLME-ASSOCIATE.indication關(guān)聯(lián)指示原語(yǔ) (7)MLME-COMM-STATUS.indication原語(yǔ) (8)NLME-JOIN.indication原語(yǔ) (9)NLME-DIRECT-JOIN.request原語(yǔ) (10)NLME-DIRECT-JOIN.confirm原語(yǔ) (11)MLME-ORPHAN.indication原語(yǔ) (12)MLME-ORPHAN.response原語(yǔ) (13)NLME-START-ROUTER.request原語(yǔ) (14)NLME-START-ROUTER.confirm原語(yǔ) 3.3 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)數(shù)據(jù)服務(wù) NLDE-SAP支持在對(duì)等應(yīng)用實(shí)體之間傳送應(yīng)用協(xié)議數(shù)據(jù)單元(APDU)。NLDE-SAP支持的原語(yǔ)包括NLDE-DATA請(qǐng)求、證實(shí)和指示原語(yǔ)。 3.3.1 NWK數(shù)據(jù)服務(wù)請(qǐng)求 NWK數(shù)據(jù)服務(wù)請(qǐng)求,需要對(duì)以下函數(shù)進(jìn)行調(diào)用。 (1)NLDE-DATA.request原語(yǔ) (2)NLDE-DATA.request原語(yǔ) (3)MCPS-DATA.confirm原語(yǔ) (4)MCPS-DATA.indication原語(yǔ) (5)MCPS-PURGE.request原語(yǔ) (6)MCPS-PURGE.confirm原語(yǔ) 3.3.2 NWK數(shù)據(jù)服務(wù)證實(shí) NWK數(shù)據(jù)服務(wù)證實(shí),需要對(duì)以下函數(shù)進(jìn)行調(diào)用。 (1)NLDE-DATA.confirm原語(yǔ) (2)NLDE-DATA.indication原語(yǔ) 4. ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位系統(tǒng) 4.1 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位機(jī)制 在基于ZigBee協(xié)議的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中,其定位機(jī)制可以表述為:根據(jù)有限的位置已知的節(jié)點(diǎn)來(lái)確定網(wǎng)絡(luò)中其他節(jié)點(diǎn)的位置,在無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)之間建立起位置關(guān)聯(lián)的機(jī)制。在該網(wǎng)絡(luò)中需要定位的節(jié)點(diǎn)稱(chēng)之為未知節(jié)點(diǎn),而已知位置并需確定該網(wǎng)絡(luò)中未知節(jié)點(diǎn)位置的節(jié)點(diǎn)稱(chēng)之為參考節(jié)點(diǎn),在一個(gè)節(jié)點(diǎn)通信半徑范圍的可直接通信的節(jié)點(diǎn)稱(chēng)之為鄰節(jié)點(diǎn)。 4.2 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位引擎配置 定位機(jī)制的實(shí)現(xiàn)必須依賴(lài)相應(yīng)的物理硬件,即帶有定位引擎的CC2431以及CC2430,以CC2431為基礎(chǔ)的盲節(jié)點(diǎn)利用其定位引擎可以依據(jù)參考節(jié)點(diǎn)所提供的物理位置參數(shù)(參考節(jié)點(diǎn)X和Y值)以及RSSI值計(jì)算出盲節(jié)點(diǎn)的物理位置。而基于CC2431的定位機(jī)制中所使用的算法則是依賴(lài)于接收信號(hào)強(qiáng)度指示器(RSSI)的數(shù)值RSSI值隨距離增加而減小。 參考節(jié)點(diǎn)需要具有靜態(tài)位置,必須配置反映該節(jié)點(diǎn)物理位置的X和Y值。參考節(jié)點(diǎn)的主要任務(wù)是提供包含XY坐標(biāo)的數(shù)據(jù)包傳輸給盲節(jié)點(diǎn),也可做為錨定節(jié)點(diǎn)被查閱。此類(lèi)節(jié)點(diǎn)只要能反映出RSSI值即可,因此參考節(jié)點(diǎn)可以使用CC2430。 盲節(jié)點(diǎn)需要與其周?chē)膮⒖脊?jié)點(diǎn)通信,并且需要收集每個(gè)參考節(jié)點(diǎn)的物理位置的X和Y值以及RSSI,然后使用硬件定位引擎計(jì)算它身的位置。然后將計(jì)算出的位置發(fā)送至無(wú)線(xiàn)網(wǎng)關(guān)。因此盲節(jié)點(diǎn)必須使用帶有定位引擎的CC2431。 定位引擎利用是一個(gè)從軟件層面看來(lái)極其簡(jiǎn)單的輸入輸出端口,簡(jiǎn)單地可以理解為寫(xiě)入?yún)?shù),等待計(jì)算,讀出計(jì)算的位置結(jié)果。 4.3 ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位系統(tǒng)節(jié)點(diǎn)的設(shè)置與部署 一般來(lái)說(shuō)參考節(jié)點(diǎn)的數(shù)目盡可能多的參考節(jié)點(diǎn)應(yīng)該被使用。要得到一個(gè)比較準(zhǔn)確的坐標(biāo)至少需要4個(gè)參考節(jié)點(diǎn)。如果太少節(jié)點(diǎn)被使用,來(lái)自于每個(gè)節(jié)點(diǎn)的混淆會(huì)變得更高,并且錯(cuò)誤的RSSI值能引起計(jì)算出的位置重大改變。 在實(shí)際的計(jì)算之中,最近的參考節(jié)點(diǎn)優(yōu)選被用于計(jì)算。一般來(lái)說(shuō)是具有最高RSSI值的8個(gè)參考節(jié)點(diǎn),而其他的所有節(jié)點(diǎn)應(yīng)該被忽略。如果達(dá)不到8個(gè),那么盡可能多的節(jié)點(diǎn)應(yīng)該被使用。 在大規(guī)模的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中,這種簡(jiǎn)單的定位算法不可能適應(yīng),因此在此基礎(chǔ)之上必須改進(jìn)網(wǎng)絡(luò)節(jié)點(diǎn)的部署和定位算法。 為了約束網(wǎng)絡(luò)的無(wú)限擴(kuò)大和節(jié)點(diǎn)之間的復(fù)雜無(wú)序狀態(tài),按照每個(gè)未知節(jié)點(diǎn)和周?chē)?jié)點(diǎn)相近的位置關(guān)系自動(dòng)組合,形成若干個(gè)單元,通過(guò)多個(gè)未知節(jié)點(diǎn)之間的距離信息將各單元相組合,形成相對(duì)的坐標(biāo)系統(tǒng)。從其中劃分出邊界節(jié)點(diǎn),通過(guò)對(duì)周?chē)鷨卧W(wǎng)絡(luò)的約束關(guān)系,從而確定了全局坐標(biāo)下各單元網(wǎng)絡(luò)的坐標(biāo)變換矩陣。進(jìn)一步將網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)一步細(xì)分為:參考節(jié)點(diǎn)、已知節(jié)點(diǎn)、準(zhǔn)已知節(jié)點(diǎn)、邊界節(jié)點(diǎn)、未知節(jié)點(diǎn)。準(zhǔn)已知節(jié)點(diǎn)是指單位網(wǎng)絡(luò)內(nèi)局部坐標(biāo)系下位置已知點(diǎn),而局部坐標(biāo)系又可通過(guò)坐標(biāo)變換矩陣同全局坐標(biāo)系相轉(zhuǎn)換,最終確定了每一節(jié)點(diǎn)的位置。 在ZigBee無(wú)線(xiàn)網(wǎng)絡(luò)定位系統(tǒng)中網(wǎng)關(guān)是必不可少的。網(wǎng)關(guān)的一些典型的功能是有節(jié)點(diǎn)配置、檢查網(wǎng)絡(luò)狀態(tài)、要求盲節(jié)點(diǎn)執(zhí)行計(jì)算。因?yàn)樗械奈恢糜?jì)算在盲節(jié)點(diǎn)中執(zhí)行,網(wǎng)關(guān)將不執(zhí)行任何位置計(jì)算。它唯一的用途就是給用戶(hù)提供與網(wǎng)絡(luò)交互的能力。有兩個(gè)主要途徑建立網(wǎng)關(guān):(1)網(wǎng)關(guān)是一個(gè)被動(dòng)的設(shè)備,只能被動(dòng)監(jiān)聽(tīng)網(wǎng)絡(luò)通信(2)它也做為網(wǎng)絡(luò)活動(dòng)的一部分。被動(dòng)途徑主要是包探測(cè)器,網(wǎng)關(guān)僅捕獲RF包和提供這些信息給使用者。 在定位系統(tǒng)中需要使用Z-Stack定位規(guī)范,該定位規(guī)范被做為了一個(gè)ZigBee規(guī)范,并且可以通過(guò)ZigBee設(shè)備對(duì)象服務(wù)從而得到各種報(bào)文。 參考節(jié)點(diǎn)(設(shè)備ID:0x0010)總是允許盲節(jié)點(diǎn)查詢(xún)它的位置(X/Y坐標(biāo))。 盲節(jié)點(diǎn)(設(shè)備ID:0x0011)是一個(gè)可移動(dòng)的節(jié)點(diǎn),可以查詢(xún)射頻范圍內(nèi)的參考節(jié)點(diǎn)(1跳鄰節(jié)點(diǎn))的位置和與它們每一個(gè)的RSSI。 Location Dongle(設(shè)備ID:0x0012) 設(shè)備與PC相連接并被其應(yīng)用所使用(一個(gè)調(diào)試工具以及任何通過(guò)串口或USB的應(yīng)用),可以用來(lái)與盲節(jié)點(diǎn)和參考節(jié)點(diǎn)交換TOA信息。PC應(yīng)用可通過(guò)請(qǐng)求盲節(jié)點(diǎn)位置來(lái)執(zhí)行定位處理,或者可以被動(dòng)接收盲節(jié)點(diǎn)和參考節(jié)點(diǎn)的位置報(bào)告。PC端還可以配置盲節(jié)點(diǎn)和參考節(jié)點(diǎn)。 XY-RSSI請(qǐng)求(簇lD:0x0011)用來(lái)觸發(fā)一個(gè)XY-RSSI響應(yīng)報(bào)文。在發(fā)送一系列RSSI Blast報(bào)文后該請(qǐng)求應(yīng)被立即發(fā)送,然后取回在“l(fā)跳”射頻范圍內(nèi)的參考節(jié)點(diǎn)的坐標(biāo)以及它們每一個(gè)的平均RSSI值。如果該報(bào)文被發(fā)送大于“1跳”半徑,那么RssI將不可用。 XY-RSSI響應(yīng)(簇ID:0x00l2)作為XY-RSSI請(qǐng)求報(bào)文發(fā)送的響應(yīng),RSSI平均值包含了RSSI請(qǐng)求報(bào)文本身的RSSI,然后RSSI平均值被歸零以便為另一個(gè)一系列Blast報(bào)文做準(zhǔn)備。因此,如果Blast報(bào)文從來(lái)被發(fā)送,那么RSSI平均值就是請(qǐng)求報(bào)文的RSSI值。 盲節(jié)點(diǎn)查找請(qǐng)求(簇ID:0x0013)報(bào)文使一個(gè)盲節(jié)點(diǎn)以迫使它執(zhí)行一個(gè)位置查找。當(dāng)位置查找完成后,該報(bào)文的響應(yīng)報(bào)文被盲節(jié)點(diǎn)發(fā)回。位置查找時(shí)間取決于網(wǎng)絡(luò)的總流量。 盲節(jié)點(diǎn)查找響應(yīng)(簇ID:0x0014)是盲節(jié)點(diǎn)查找請(qǐng)求的響應(yīng)。 參考節(jié)點(diǎn)配置(簇ID:0x0015)發(fā)送該報(bào)文給一個(gè)參考節(jié)點(diǎn)來(lái)設(shè)置它的配置項(xiàng)目。該報(bào)文也從參考節(jié)點(diǎn)被發(fā)送以響應(yīng)參考節(jié)點(diǎn)配置請(qǐng)求報(bào)文。 盲節(jié)點(diǎn)配置(簇ID:0x0016)發(fā)送該報(bào)文給一個(gè)盲節(jié)點(diǎn)來(lái)設(shè)置它的配置項(xiàng)目。該報(bào)文也從參考節(jié)點(diǎn)被發(fā)送以響應(yīng)“盲節(jié)點(diǎn)配置”請(qǐng)求報(bào)文。 參考節(jié)點(diǎn)配置請(qǐng)求(簇ID:0x0017)配置一個(gè)參考節(jié)點(diǎn)。該請(qǐng)求報(bào)文的響應(yīng)報(bào)文是“參考節(jié)點(diǎn)配置”報(bào)文。 盲節(jié)點(diǎn)配置請(qǐng)求(ID:0x0018)配置一個(gè)盲節(jié)點(diǎn)。該請(qǐng)求報(bào)文的響應(yīng)報(bào)文是“盲節(jié)點(diǎn)配置”報(bào)文。 RSSI Blast(簇ID:0x0019)以“1跳”半徑廣播該報(bào)文,在相對(duì)短的時(shí)間多次發(fā)送來(lái)觸發(fā)射頻范圍內(nèi)的參考節(jié)點(diǎn)計(jì)算它們收到的Blast 廣播報(bào)文的平均RSSI。 5. 程序設(shè)計(jì) 軟件分為上位機(jī)程序和下位機(jī)程序兩部分。軟件設(shè)計(jì)的平臺(tái)為Windows XP SP2,上位機(jī)程序使用Microsoft Visual C++ 6.0(SP6)開(kāi)發(fā),下位機(jī)程序使用u Vision3 V3.34(Keil Software)開(kāi)發(fā)。 5.1 硬件設(shè)計(jì)和軟件設(shè)計(jì)的關(guān)系 硬件設(shè)計(jì)的目標(biāo)是標(biāo)準(zhǔn)化、模塊化、簡(jiǎn)單化,以求達(dá)到給軟件提供清晰明了、可控性強(qiáng)的硬件接口的目的。于是,在進(jìn)行軟件設(shè)計(jì)時(shí)就能集中精力去實(shí)現(xiàn)關(guān)鍵部分的算法并且設(shè)計(jì)出更加良好的軟件架構(gòu),以求提高軟件的穩(wěn)定性、可復(fù)用性、可修改性,進(jìn)而提升系統(tǒng)的整體性能。 5.2 上位機(jī)部分程序設(shè)計(jì) 上位機(jī)程序主要可分為舵機(jī)控制模塊、電機(jī)控制模塊、數(shù)據(jù)接收模塊,其中舵機(jī)模塊包含測(cè)距模塊和圖像傳輸模塊。 5.3 下位機(jī)部分程序設(shè)計(jì) 下位機(jī)程序主要可分為定位模塊、超聲波測(cè)距模塊、電機(jī)控制模塊、溫度檢測(cè)模塊、液晶顯示模塊、軌跡記錄模塊、智能避障模塊、舵機(jī)控制模塊。 5.4 無(wú)線(xiàn)通信部分程序設(shè)計(jì) 系統(tǒng)采用SimpliciTI協(xié)議下CC1110 星狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行無(wú)線(xiàn)通信。主要分AP(數(shù)據(jù)中心)和ED(節(jié)點(diǎn))兩個(gè)部分。 5.5 無(wú)線(xiàn)定位部分程序設(shè)計(jì) 系統(tǒng)采用基于Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)定位的方式,其中CC2431無(wú)線(xiàn)模塊具有定位引擎從而可以根據(jù)RSSI進(jìn)行無(wú)線(xiàn)定位。其程序主要分為協(xié)調(diào)器,參考節(jié)點(diǎn)和未知節(jié)點(diǎn)程序。 6. 系統(tǒng)測(cè)試 本系統(tǒng)可以分成工作終端和監(jiān)控終端。測(cè)試主要分為功能測(cè)試、性能測(cè)試以及結(jié)論分析。測(cè)試所使用的儀器設(shè)備、軟件有:數(shù)字示波器、串口調(diào)試助手等。 6.1 功能測(cè)試 測(cè)試的方法步驟為:將充好電的移動(dòng)平臺(tái)放到室內(nèi)的平地上,連接好通信芯片,打開(kāi)上位機(jī)軟件,接通電源,操作上位機(jī)軟件的同時(shí)記錄移動(dòng)平臺(tái)反應(yīng)的時(shí)間、溫度、視頻數(shù)據(jù);將電機(jī)部分拆下?lián)Q成低頻示波器,分別記錄其不同狀態(tài)下的數(shù)據(jù)。 移動(dòng)平臺(tái)速度與占空比曲線(xiàn)測(cè)試,把占空比分為20個(gè)等分點(diǎn),每個(gè)點(diǎn)相距5個(gè)百分點(diǎn),測(cè)試時(shí),先由0%上升到100%記錄相應(yīng)點(diǎn)的速度,再?gòu)?00%下降到0%記錄相應(yīng)點(diǎn)的速度,記錄相應(yīng)點(diǎn)電機(jī)的速度,計(jì)算時(shí)取兩點(diǎn)的平均值。已知齒輪比換算可得移動(dòng)速度。 6.2 性能測(cè)試 測(cè)試的主要方法:下載測(cè)試程序到控制端芯片中,通過(guò)PC機(jī)的串口調(diào)試助手,發(fā)送數(shù)據(jù)給終端控制芯片并讀出返回值,通過(guò)返回值可以得出相應(yīng)的數(shù)據(jù)結(jié)果,同時(shí)記錄好數(shù)據(jù) 7. 結(jié)論 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)的設(shè)計(jì)與制作,最終完成了實(shí)現(xiàn)計(jì)算機(jī)終端對(duì)機(jī)器人進(jìn)行無(wú)線(xiàn)操控與定位,完成了預(yù)期的目標(biāo)。經(jīng)測(cè)試:移動(dòng)平臺(tái)的動(dòng)作靈敏度在電池電壓為12V室內(nèi)環(huán)境,發(fā)出命令到動(dòng)作時(shí)間平均響應(yīng)時(shí)間為0.8s;定位精度在室內(nèi)的環(huán)境與主通信節(jié)點(diǎn)距離小于20m,大約為4cm;在室內(nèi)復(fù)雜環(huán)境,視頻圖像掉幀現(xiàn)象不明顯,圖像實(shí)時(shí)完整性;視頻的最大傳輸值平均為7Mb/s;通信誤碼率<1/10000;RSSI的瞬時(shí)值為sum(I2+Q2);RSSI的平均值為sum(RSSI(瞬時(shí))/8192;信噪比(SNR)為60dB~75dB。 通過(guò)組建ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò),將大量無(wú)線(xiàn)的傳感器節(jié)點(diǎn)組成無(wú)線(xiàn)網(wǎng)絡(luò),不僅能夠?qū)C(jī)器人工作環(huán)境進(jìn)行實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè),而且能夠?qū)C(jī)器人無(wú)線(xiàn)控制以及無(wú)線(xiàn)定位。與現(xiàn)有的一些機(jī)器人控制系統(tǒng)相比較,本設(shè)計(jì)著重從無(wú)線(xiàn)控制方面入手,將機(jī)器人從有線(xiàn)電纜相分離,使得操作人員不僅可以輕松地完成對(duì)機(jī)器人的操縱,而且利用ZigBee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)完成了對(duì)機(jī)器人工作環(huán)境的檢測(cè)。此外機(jī)器人的定位問(wèn)題一直是一個(gè)相對(duì)復(fù)雜的問(wèn)題,本設(shè)計(jì)放棄了傳統(tǒng)的定位方式,從大量信號(hào)傳播方向路徑的計(jì)算另辟蹊徑,借助大量的廉價(jià)的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn),簡(jiǎn)單的RSSI信號(hào)強(qiáng)度的距離衰減功率完成了對(duì)機(jī)器人的無(wú)線(xiàn)信號(hào)定位。 在實(shí)際測(cè)試當(dāng)中,Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)在組建之后系統(tǒng)將穩(wěn)定運(yùn)行,但是由于硬件原因程序下載不成功的概率比較大,而且在進(jìn)出網(wǎng)絡(luò)的時(shí)候比較容易丟失程序。總體來(lái)看工作相對(duì)穩(wěn)定。RSSI值基于穩(wěn)定無(wú)線(xiàn)網(wǎng)絡(luò)環(huán)境下才能夠穩(wěn)定和計(jì)算的精確,而實(shí)際情況下無(wú)線(xiàn)電干擾因素太多,讀出的數(shù)據(jù)很不穩(wěn)定,特別是在電磁環(huán)境復(fù)雜的室內(nèi)信號(hào)會(huì)更差,所以在室內(nèi)環(huán)境下,受環(huán)境影響特別的大,比如關(guān)鍵參數(shù)包括:RSSI(接收信號(hào)場(chǎng)強(qiáng))、干擾、SNR(信噪比)、最強(qiáng)接入點(diǎn)、總接入點(diǎn)數(shù)、信道信號(hào)和數(shù)據(jù)速率等,定位精度的效果不是很理想。但是誤差還在允許的范圍之內(nèi)。以后的工作當(dāng)中需要針對(duì)無(wú)線(xiàn)節(jié)點(diǎn)的位置進(jìn)行進(jìn)一步的研究,得出一個(gè)比較通用的結(jié)論,使得該系統(tǒng)能夠廣泛的適用于各種場(chǎng)合。 8. 參考文獻(xiàn) [1] 倪巍,王宗欣.基于接受信號(hào)強(qiáng)度測(cè)量的室內(nèi)定位算法[J].復(fù)旦學(xué)報(bào)(自然科學(xué)版),2004年2月第43卷第1期,P72-P76 [2] 張明華,張申生,曹健.無(wú)線(xiàn)局域網(wǎng)中基于信號(hào)強(qiáng)度的室內(nèi)定位[J].計(jì)算機(jī)科學(xué),2007年,Vol134 №16,P68-P71 [3] 王文峰,耿力,基于射頻識(shí)別的實(shí)時(shí)定位系統(tǒng)技術(shù)研究[J].集成電路,2007年第7期,P21-P24 [4] 楊鳳,史浩山,朱靈波,趙洪鋼.一種基于測(cè)距的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)智能定位算法[J].傳感技術(shù)學(xué)報(bào),2008年1月第21 卷 第1 期,P135-P140 [5] 石鵬,徐鳳燕,王宗欣.基于傳播損耗模型的最大似然估計(jì)室內(nèi)定位算法[J].信號(hào)處理,2005年10月第5期,P502-P504 [6] 陳維克,李文鋒,首珩,袁兵. 基于RSSI的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)加權(quán)質(zhì)心定位算法[J].武漢理工大學(xué)學(xué)報(bào)(交通科學(xué)與工程版), 2006,(02) . [7] 李泳. 基于ZigBee技術(shù)的室內(nèi)定位系統(tǒng)設(shè)計(jì)[D]. 上海師范大學(xué), 2008 . [8] 李本佳. 無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中的分布式定位算法[D]. 浙江大學(xué), 2007 . [9] 王立波,陳慈發(fā). CC2431的室內(nèi)定位系統(tǒng)設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2008,(09) . [10] 王福豹,史龍,任豐原. 無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中的自身定位系統(tǒng)和算法[J]. 軟件學(xué)報(bào), 2005,(05) . [11] Steven W Smith.The Scientist and Engineer S Guide to Digital Signal Processing [M]. California Technical Publishing,1999 [12] Texas Instruments Incorporated.CC1110Fx/CC111Fx Low-power sub-1GHz RF System-on-Chip (SoC) with MCU[EB/OL]. [2009.6.14]. /cn/ [13] Texas Instruments Incorporated.SimpliciTI Specification[EB/OL]. [2009.6.14]. [14] 李文仲,段朝玉.CC1110/CC2510無(wú)線(xiàn)自組織網(wǎng)絡(luò)入門(mén)與實(shí)戰(zhàn)[M].北京航空航天大學(xué)出版社,2007 [15] 李文仲,段朝玉.Zigbee2006無(wú)線(xiàn)網(wǎng)絡(luò)與無(wú)線(xiàn)定位實(shí)踐[M].北京航空航天大學(xué)出版社,2008 [16] 李文仲,段朝玉.Zigbee無(wú)線(xiàn)網(wǎng)絡(luò)技術(shù)入門(mén)與實(shí)戰(zhàn)[M]. 北京航空航天大學(xué)出版社,2007 [17] 黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽制作實(shí)訓(xùn)[M].北京航空航天大學(xué)出版社,2007 [18] 黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽電路設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006 [19] 黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽系統(tǒng)設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006 附錄1 使用說(shuō)明 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)使用可以分為兩個(gè)部分,第一為部分為網(wǎng)絡(luò)節(jié)點(diǎn)的部署,在布網(wǎng)時(shí)要考慮傳感器節(jié)點(diǎn)的位置并且將定位節(jié)點(diǎn)和通信節(jié)點(diǎn)安裝于機(jī)器人外側(cè),PC監(jiān)控端要與無(wú)線(xiàn)網(wǎng)關(guān)相連接調(diào)試實(shí)現(xiàn)網(wǎng)絡(luò)暢通。第二部分為代碼下載與軟件安裝,將機(jī)器人運(yùn)動(dòng)操控代碼下載入控制器,將上位機(jī)軟件安裝于PC監(jiān)控端。調(diào)試成功之后便可運(yùn)行監(jiān)控程序,實(shí)現(xiàn)對(duì)環(huán)境與機(jī)器人的無(wú)線(xiàn)監(jiān)控。使用時(shí)首先打開(kāi)PC機(jī),連接好通信終端,啟動(dòng)上位機(jī)軟件;然后依次接通無(wú)線(xiàn)網(wǎng)關(guān)電源、移動(dòng)平臺(tái)電源,此時(shí)系統(tǒng)進(jìn)入自檢狀態(tài)。當(dāng)1602液晶顯示自檢完成后即可開(kāi)始工作。 附錄2 主要元器件清單(略) 附錄3 電路原理圖(略) 附錄4 電路印制板圖(略) 附錄5 程序清單 附錄5.1 電機(jī)控制程序清單(略) 附錄5.2 上位機(jī)主控模塊程序清單(略) 附錄5.3 下位機(jī)主控模塊程序清單(略) 附錄5.4 CC2430參考節(jié)點(diǎn)代碼 ************************************************************************ // 函數(shù)名: static void processMSGCmd(afIncomingMSGPacket_t*pkt) // 功能: 通過(guò)串ID對(duì)數(shù)據(jù)信息處理 // 輸入: 接收的數(shù)據(jù) // 輸出: 無(wú) *************************************************************************/ static void processMSGCmd(afIncomingMSGPacket_t *pkt) { switch(pkt->clusterld) { case LOCAtiON_XY_RSSI_REQUEST: //XY_RSSI請(qǐng)求 rssiRsp(pkt); break; case LOCATION_REFNODE_CONFIG: //參考節(jié)點(diǎn)配置 parseConfig(pkt->cmd.Data); break; case LOCATION_REFNODE_REQUEST_CONFIG: //參考節(jié)點(diǎn)請(qǐng)求配置 pkt->srcAddr.addrMode=afAddr16Bit; rspMsgE43 = 0x88; rspMsg[5] = 0x99; (void)AF_DataRequest(&pkt->srcAddr,(endPointDesc_t*)&epDesc, \ LOCATION_REFNODE_CONFIG,REFNODE_CONFIG_LEN,rspMsg, & transId,0,AF_DEFAULT_RADIUS); break; case LOCATION_RSSI_BLAST: //收集RSSI addBlast(pkt->srcAddr.addr.shortAddr,pkt->LinkQuality); break; default; break; } }/*********************************************************************** // 函數(shù)名:static void rssiRsp(afIncomingMSGPacket_t *pkt) // 功能:響應(yīng)XY_RSSI請(qǐng)求,發(fā)送RSSI平均值和坐標(biāo)值 // 輸入:接收的數(shù)據(jù) // 輸出:無(wú) *************************************************************************/ static void rssiRsp(afIncomingMSGPacket_t *pkt) { blastAcc_t*ptr = blastPtr; blastAcc_t*prev=NULL; byte options,radius; while(ptr) { if(ptr->addr == pkt->srcAddr.addr.shortAddr) { break; } prey = ptr; ptr.ptr->next: } if(ptr) { rspMsg[LOCATION_XY_RSSI_RSSI_IDX] = (ptr->acc+pkt->LinkQuality)/(ptr->cnt + 1): if(prey) { prey->next.ptr->next; } else { blastPtr = ptr->next; } osal_mem_free(ptr); options = AF_SKIP_ROUTING; radius = 1; } else { rspMsg[LOCATION_XY_RSSI_RSSI_IDX] = pkt->LinkQuality; // 求RSSI平均值 options = AF_TX_OPTIONS_NONE; radius = AF_DEFAULT_RADIUS; } pkt->srcAddr.addrMode = afAddr16Bit; (void)AF_DataRequest(&pkt->srcAddr,(endPointDesc_t *)&epDesc, \ LOCATION_XY_RSSI_RESPONSE, LOCATION_XY_RSSI_LEN, \ rspMsg, &transId,options, radius); /************************************************************************ // 函數(shù)名:static void parseConfig(byte *msg) // 功能:配置參考節(jié)點(diǎn)坐標(biāo) // 輸入:接收的數(shù)據(jù) // 輸出:無(wú) *************************************************************************/ static void parseConfig(byte *msg) { refNode_Config_t config; config.x = BUILD_UINTl6(msg[REFNODE_CONFIG_X_LO_IDX], \ // x坐標(biāo)低8位 msg[REFNODE_CONFIG_X_HI_IDX3) // x坐標(biāo)高8位 config.y = BUILD_UINTl6(msg[REFNODE_CONFIG_Y_LO_IDX], \ // x坐標(biāo)低8位 msg[REFNODE_CONFIG_Y_HI_IDX3) // y坐標(biāo)高8位 osal_nv_write(LOC_NV_REFNODE_CONFIG, 0, sizeof(refNode_Config_t), &config); // 將配置參數(shù)寫(xiě)入Flash rspMsg[REFNODE_CONFIG_X_LO_IDX] = msg[REFNODE_CONFIG_X_LO_IDX]; rspMsg[REFNODE_CONFIG_X_HI_IDX] = msg[REFNODE_CONFIG_X_HI_IDX]; rspMsgEREFNODE_CONFIG_Y_LO_IDX] = msg[REFNODE_CONFIG_Y_LO_IDX]; spMsg[REFNODE_CONFIG_Y_HI_IDx] = msg[REFNODE_CONFIG_Y_HI_IDX]; } /************************************************************************* //函數(shù)名:static void addBlast(uintl6 addr,byte rssi) // 功能:添加或初始化一個(gè)定位節(jié)點(diǎn)和自身的RSSI值 // 輸入:定位節(jié)點(diǎn)網(wǎng)絡(luò)地址、RSSI // 輸出:無(wú) *************************************************************************/ static void addBlast(uintl6 addr,byte rssi) { blastAcc_t *ptr = blastPtr; while(ptr) { if(ptr->addr == addr) //網(wǎng)絡(luò)地址已經(jīng)存在 { break; } Ptr = ptr->next; } if(ptr) { Ptr->aCC+ = rssi; //添加RSSI Ptr->cnt++: } else { Ptr = (blastAcc_t*)osal_mem_alloc(sizeof(blastAcc_t)); if(ptr) //網(wǎng)絡(luò)地址不存在 { Ptr->next = blastPtr; blastPtr = ptr; ptr->addr = addr; ptr->acc = rssi; ptr->cnt = 1; } }} /************************************************************************* //函數(shù)名:static void processMSGCmd(afIncomingMSGPacket_t *pkt) // 功能:數(shù)據(jù)回收處理 // 輸入:接收到的數(shù)據(jù) // 輸出:無(wú) *************************************************************************/ static void processMSGCmd(afIncomingMSGPacket_t *pkt) { switch(pkt->clusterId) { case LOCATION_XY_RSSI_REQUEST: rssiRsp(pkt); break; case LOCATION_REFNODE_CONFIG: parseConfig(pkt->cmd.Data); break; case LOCATION_REFNODE_REQUES_CONFIG: pkt一>srcAddr.a(chǎn)ddrMode = afAddrl6Bit; (void)AF_DataRequest(&pkt->srcAddr,(endPointDesc_t*)&epDesc, LOCATION_REFNODE_CONFIG,REFNODE_CONFIG_LEN,rspMsg, &transId,0,AF_DEFAULT_RADIUS); break; case LOCATl0N_RSSI_BLAST: addBlast(pkt->srcAddr.addr.shortAddr,pkt->LinkQuality); break; default; break; } } 附錄5.5 CC2431定位節(jié)點(diǎn)代碼 /*********************************************************************** // 函數(shù)名:static void processMSGCmd(afIncomingMSGPacket_t*pkt) // 功能:接收數(shù)據(jù)處理 // 輸入:接收到的數(shù)據(jù) // 輸出:無(wú) ***********************************************************************/ static void processMSGCmd(afIncomingMSGPacket_t *pkt) { switch(pkt->clusterId) { case LOCATION_XY_RSSI_REQUEST: //0x0011RSSI數(shù)據(jù)請(qǐng)求 rspMsg[LOCATION_XY_RSSI_RSSI_IDx] = pkt->LinkQuality; pkt->srcAddr.addrMode = afAddr16Bit; (Void)AF_DataRequest(&pkt->srcAddr,(endPointDeC_t *)&epDesc, LOCATION_XY_RSSI_RESPONSE,LOCATION_Y_RSSI_LEN, spMsg,&transId,0,AF_DEFAULT_RADIUS); break; case LOCATION_BLINDNODE_FIND_REQUEST: //0x0013定位節(jié)點(diǎn)發(fā)求 if(state == eBnldle defAddr.addrMode = afAddr166Bit; defAddr?addr.shortAddr = pkt->srcAddr.addr.shortAddr; defAddr.endPoint = pkt->srcAddr.endPoint; startBlast(); } break; case LOCATION_BLINDNODE_CONFIG: //0x0016定位節(jié)點(diǎn)配置 if(state == eBnIdle){ parseConfig(pkt->cmd.Data);} break; case LOCATION_BLINDNODE_REQUEST_CONFIG: //0x0018定位節(jié)點(diǎn)請(qǐng)求配置 sendConfig(&(pkt->srcAddr)); break; case LOCATION_XY_RSSI_RESPONSE: //0x0012 RSSI應(yīng)答 if(state == eBnBlastIn{ uint8 idx; for(idx=0;idx<BLINDNODE_MAX_REF_NODES;idx++) { if((refNodes[idx].add == INVALID_NODE_ADDR)|| (refNodes[idx].add == pkt->srcAddr.addr.shortAddr)) { refNodes[idx].addr = pkt->srcAddr.addr.shortAddr; refNodes[idx].ep = pkt->srcAddr.endPoint; refNodes[idx].x = BUILD_UINT16( pkt->cmd.Data[LOCATION_XY_RSSI_X_LO_IDX], pkt->cmd.Data[LOCATION_XY_RSSI_X_HI_IDX]); refNodes[idx].y = BUILD_UINT16( pkt->cmd.Data[LOCATION_XY_RSSI_Y_LO_IDX], pkt->cmd.Data[LOCATION_XY_RSSI_Y_HI_IDX]); refNodes[idx].rssi = pkt->cmd.Data[LOCATION_XY_RSSI_RSSI_IDX]; if(rspCnt <= idx) { rspCnt:idx+l;} break; } } }break; default: break; } } /************************************************************************** //函數(shù)名:static void parseConfig(uint8 *msg)// 功能:定位節(jié)點(diǎn)請(qǐng)求配置響應(yīng)函數(shù),發(fā)送自己的配置參 // 輸入:接收到的數(shù)據(jù) // 輸出:無(wú)**************************************************************************/ static afStatus_t sendConfig(afAddrType_t *dstAddr) { uint8 msg[BLINDNODE_CONFIG_LEN]; msg[BLINDNODE_CONFIG_A_IDX] = config.10c.param_a; msg[BLINDNODE_CONFIG_N_IDX] = config.10c.param_n; msg[BLINDNODE_CONFIG_MODE_IDX] = config.mode; msg[BLINDNODE_CONFIG_COLLECT_TIME_LO_IDX] = L0_UINTl6(config.timeout/BN_TIME_INCR); msg[BLINDNODE_CONFIG_COLLECT_TIME_HI_IDX] = HI_UINTl6( config.timeout/BN_TIME_INCR); Config.dstAddr = \BUILD_UINTl6(msg[BLINDNODE_CONFIG_REPORT_SADDR_LO_IDX], msg[BLINDNODE_CONFIG_REPORT_SADDR_HI_IDX]);config.dstEp = msg[BLINDNODE_CONFIQREPORT_EP_IDX] config.minRefNodes = msq[BLINDNODE_CONFIG_MIN_REFNODES_IDX];//配置最小計(jì)算參考節(jié)點(diǎn) osal_nv_write(LOC_NV_BLINDNODE_CONFIG,0,sizeof(BN_Cfg_t), &config); if(config.mode = NODE_MODE_AUTO) {osal_set_event(BlindNode_TaskID, BLINDNODE_FIND_EVT); } } /************************************************************************** //函數(shù)名:static void parseConfig(uint8 *msg)// 功能:定位節(jié)點(diǎn)請(qǐng)求配置響應(yīng)函數(shù),發(fā)送自己的配置參 // 輸入:接收到的數(shù)據(jù)// 輸出:無(wú) **************************************************************************/ static afStatus_t sendConfig(afAddrType_t *dstAddr) { uint8 msg[BLINDNODE_CONFIG_LEN]; msgEBLINDNODE_CONFIG_A_IDX] = config.1oc.param_a;msgEBLINDNODE_CONFIG_N_IDX] = config.1oc.param_n; msgEBLINDNODE_CONFIG_MODE_IDX] = config.mode; msgEBLINDNODE_CONFIG_COLLCT_TIME_LO_IDX] = L0_UINTl6( config.timeout/BN_TIME_INCR); msg[BLINDNODE_CONFIG_COLLECT_TIME HI_IDX] = HI_UINTl6( config.timeout/BN_TIME_INCR); msg[BLINDNODE_CONFIG_CYCLE_LO_IDX] = LO_UINTl6(config.cycle/BN_TIME_INCR); msg[BLINDNODE_CONFIG_CYCLE_HI_IDX] =\HI_UINTl6(config.cycle/BN TIME_INCR); msg[BLINDNODE_CONFIG_REPORT_SADDR_LO_IDX] = LO_UINT16(config.dstAddr); msg[BLINDNODE CONFIG_REPORT_SADDR_HI_IDX] = HI_UINT16(config.dstAddr); msg[BLINDNODE_CONFIG_REPORT_EP_IDX] = config.dstEp; msg[BLINDNODE_CONFIG_MIN_REFNODES_IDX] = config.minRefNodes; return(AF_DataRequest(dstAddr,(endPointDesc_t*)&epDesc, \ LOCATION_BLINDNODE_CONFIG, \ BLINDNODE_CONFIG_LEN,msg, \ &transId,0,AF_DEFAULT_RADIUS)); } /************************************************************************* // 函數(shù)名:static void startBlast(void) // 功能:發(fā)送RSSI_BLAST請(qǐng)求 // 輸人:無(wú) // 輸出:無(wú) *************************************************************************/ static void startBlast(void) { uint8 idx; afAddrType_t dstAddr; dstAddr.addr.Mode = afAddrBroadcast; dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL; dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT; if((ZDO_Config_Node_Descriptor.CapabilityFlaqs & CAPINFO_RCVR_ON_IDLE) == 0) { idx = true; ZMacSetReq(ZMacRxOnIdle, &idx); } SampleApp_S1eep(FALSE); for(idx=0; idx<BLINDNODE_MAX_REF_NODES; idx++) { refNodes[idx].addr=INVALID_NODE_ADDR; } (void)AF_DataRequest(&dstAddr, (endPointDesc_t *)&epDesc, \ LOCATION_RSSI_BLAST, 0, NULL, &transId, \ AF_SKIP_ROUTING, 1); rspCnt = 0; blastCnt = BLINDNODE_BLAST_COUNT; state = eBnBlastOut; osal_start_timerEx(BlindNodeTaskID,BLINDNODE_BLAST_EVT, \ BLINDNODE_BLAST_DELAY); } /************************************************************************* //函數(shù)名:void locationCalculatePosition(LocRefNode_t*ref,LocDevCfg_t *node) // 功能:計(jì)算設(shè)備位置 // 輸入:參考節(jié)點(diǎn)信息 // 輸出:節(jié)點(diǎn)位置 ***********************************************************************/ #if defined(CC2431) #include “ZComDef.h” #include“LocationEngine.h” #include“hal_mcu.h” #define XREG(addr) ((unsigned char volatile_xdata*)0)[addr] #define REFCOORD XREG(0xDF55) /* 定位引擎 */ #define MEASPARM XREG(0xDF56) /* 定位引擎 */ #define LOCENG XREG(0xDF57) /* 定位引擎 */ #define LOCX XREG(0xDF58) /* 定位引擎 */ #define LOCY XREG(0xDF59) /* 定位引擎 */ #define LOCMIN XREG(0xDF5A) /* 定位引擎 */ //定位引擎使能 #define LOC_ENABLE() do{LOCENG| = OxlO; }while(0) #define LOC DISABLE() do{LOCENG&=~OxlO; }while(0) //定位引擎讀參數(shù) #define LOC_PARAMETER_LOAD(on)\ do{ \ if(on)LOCENG| = Ox04; \ else LOCENG& = ~Ox04; \ }while(0) //定位引擎讀坐標(biāo) #define LOC_REFERENCE_LOAD(on)\ do{ \ if(on)LOCENG | = 0x02; \ else I/)CENG& = ~0x02; \ }while(0)//定位引擎運(yùn)行 #define LOC_RUN() do{LOENG| = 0x01;}while(0) #define LOC_DONE() (LOCENC&0x08) void locationCalculatePosition(LocRefNode_t*ref,LocDevCfg_t *node) { LocRefNode_t *pRef = ref: const byte stop = ((CHVER == 0x01)?LOC_ENGINE_NODE_CAPACITY_REVB: LOC_ENGINE_NODE_CAPACITY_REVC); byte idx; LOC_DISABLE(); //#define LOC_DISABLE()do{LOCENG& = ~Oxl0;}while(0) LOC_ENABLE(); //#define LOC_ENABLE() do{LOCENG |= 0x10;}while(0) //讀參考節(jié)點(diǎn)坐標(biāo) LOC_REFERENCE_LOAD(TRUE); for(idx = 0;idx<stop;idx++) { NEFCOORD = pRef->x; REFCOORD = pRef->y; pRef++; } LOC_REFERENCE_LOAD(FALSE); //讀標(biāo)準(zhǔn)參數(shù) LOC_PARAMETER_LOAD(TRUE); MEASPARM = Node->param_a; MEASPARM = Node->param_n; if(CHVER! = Ox01) { MEASPARM=LOC ENGINE_X_MIN; //0 MEASPARM=LOC_ENGINE_X_MAX; //25s MEASPARM=LOC_ENGINE_Y_MIN; //0 MEASPARM=LOC_ENGINE_Y_MAX; //256 } //讀RSSI值 for(idx = 0;idx<stop;idx++) { MEASPARM = ref->rssi*2; ref++; } LOC_PARAMETER_LOAD(FALSE); //關(guān)閉讀標(biāo)準(zhǔn)參數(shù) noc RUN(); //開(kāi)始計(jì)算 while(!(LOCENG&0x08)); if(CHVER == 0x01) { node->x = (LOCX<<1); node->y = (noc7<(1); node->min= LOCMIN; } else { node->x = LOCX+2; node->y = LOCY node->rain= 0; } LOC_DISABLE(); //定位引擎關(guān)閉 } #endif //CC2431 /************************************************************************* // 函數(shù)名:static afStatus_t sendRsp(void) // 功能:計(jì)算設(shè)備位置 // 輸入:參考節(jié)點(diǎn)信息// 輸出:節(jié)點(diǎn)位置 *************************************************************************/ satic afStatus_t sendRsp(void) { uint8 msq[BLINDNODE_RESPONSE_LEN+2];intl6 temp; LocRefNode_t locNodes[BLINDNODE_MAX_REF_NODES]; uintl6 x0ff, yOff; uint8 idx, cnt = 0; temp = HalAdcRead(0x0e,Ox04); msg[13] = temp_hil3(temp); msg[14] = temp_lol3(temp); for(idx = 0;idx<rspCnt;idx++) { BLINDNODE_CONV_RSSI(refNodes[idx].rssi); if(refNodes[idx].rssi!=0) { cnt++; } } if(cnt >= config.minRefNodes) { msg[BLINDNODE_RESPONSE_STATUS_IDx] = \ BLINDNODE_RSP_STATUS_SUCCESS; rspCnt = sortNodes(refNodes); calcOffsets(refNodes,&x0ff,&y0ff); setLogicals(1ocNodes,refNodes,x0ff,y0ff); //運(yùn)行定位引擎 locationCalculatePosition(1ocNodes,&(config.loc)); xOff += config.1oc.x; yoff += config.1oc.y; if(((xOff>xOld)&&((xOff - (01d)>BLINDNODE FLUSH)) || ((xOff<xOld) && ((xOld-xOff)>BLINDNODE_FLUSH)) || ((y0ff>yOld) && ((y0ff-y0ld)>BLINDNODE_FLUSH)) || ((yOff<yOld) && ((yOld-yOff)>BLINDNODE_FLUSH)))) { xOld = xoff; yOld = yoff; } else { xOld = ((xOld * (BLINDNODE_FILTER - 1)) + xOff)BLINDNODE_FILTER; yOl = ((yOld * (BLINDNODE_FILTER - 1)) + yOff)/BLINDNODE_FILTER; } xOff = (uintl6)xOld; yOff = (uintl6)yOid; } else { msg[BLINDNODE_RESPONSE_STATUS_IDX] = \ BLINDNODE_RSP_STATUS_NOT_ENOUGH_REFNODES; xOff = (uintl6)xOld; yoff = (uintl6)yOld; } rspMsg[REFNODE_CONFIG_X_LO_IDX] = \ msg[BLINDNODE_RESPONSE_X_LO_IDX] = L0_UINT16(xOff); rspMsg[REFNODE_CONFIG_X_HI_IDX] = msg[BLINDNODE_RESPONSE_X_HI_IDX] = HI_UINTl6(xOff); rspMsg[REFNODE_CONFIG_y_LO_IDX] = msg[BLINDNODE_RESPONSE_Y_LO_IDX] = L0_UINT16(yoff); rspMsg[REFNODE_CONFIG_Y_HI_IDX] = msg[BLINDNODE_RESPONSE_Y_HI_IDX] = HI_UINT16(yOff); msg[BLINDNODE_RESPONSE_NUMREFNODES_IDX] = cnt; if(rspCnt != 0) { msg[BLINDNODE_RESPONSE_REF_SHORTADDR_LO_IDX] =LO_UINT16(refNodes->addr); msg[BLINDNODE_RESPONSE_REF_SHORTADDR_HI_IDX] = \ HI_UINT16(refNodes->addr); msg[BLfNDNODE_RESPONSE_REF_X_LO_IDX] = LO_UINTl6(refNodes->x); msg[BLINDNODE_RESPONSE_REF_X_HI_IDX] = HI_UZNT16(refNodes->x) msq[BLNDNODE_RESPONSE_REF_Y_LO_IDX] =LO_UZNT16(refNodes->y); msg[BLINDNODE_RESPONSE_REF_y_HI_IDX] = HI_UINT16(refNodes->y); msg[BLINDNODE_RESPONSE_REF_RSSI] = refNodes->rssi; } else { msg[BLINDNODE_RESPONSE_REF_SHORTADDR_LO_IDX] = \ LO_UINT16(INVALID_NODE_ADDR); msg[BLINDNODE_RESPONSE_REF_SHORTADDR_HI_IDX] = \ HI_UINT16(INVALID_NODE_ADDR); msg[BLINDNODE_RESPONSE_REF_X_LO_IDX] = \ LO_UINT16(LOC_DEFAULT_X_Y); msg[BLINDNODE_RESPONSE_REF_X_HI_IDX] = \ HI_UINT16(LOC_DEFAULT_X_Y); msg[BLINDNODE_RESPONSE_REF_Y_LO_IDX] = \ LO_UINT16(LOC_DEFAULT_X_Y); msg[BLINDNODE_RESPONSE_REF_Y_HI_IDX] = \ HI_UINT16(LOC_DEFAULT_X_Y); msg[BLINDNODE_RESPONSE_REF_RSSI] = 0xFF; } #endif osal_start_timerEx(BlindNode_TaskID, BLINDNODE_WAIT_EVT, 1000); // 時(shí)間片 return(AF_DataRequest(&defAddr, (endPointDesc_t *)&epDesc, LOCATION_BLINDNODE_FIND_RESPONSE, \ BLINDNODE_RESPONSE_LEN + 2, msg, &transId, 0, AF_DEFAULT_RADIUS); } 附錄5.6 ZigBee協(xié)議協(xié)調(diào)器操作代碼 /*************************************************************************// 函數(shù)名:static void LocDongle_ProcessMSGCmd(afIncomingMSGPacket_t *plt) // 功能:處理各個(gè)節(jié)點(diǎn)的數(shù)據(jù) // 輸入:各個(gè)節(jié)點(diǎn)的數(shù)據(jù) // 輸出:給PC機(jī)輸入數(shù)據(jù) *************************************************************************/ static void LocDongle_ProcessMSGCmd(afIncomingMSGPacket_t *plt) { #if defined(ZBIT) switch(pkt->clusterld) { case LOCATION BLINDNODE_RESPONSE: //定位節(jié)點(diǎn)回答 case LOCATION_BLINDNODE_CONFIG: //定位節(jié)點(diǎn)配置 blindNodes[0].addr = pkt->srcAddr.Addr.shortAddr; blindNodes[0].ep = pkt->srcAddr.endpoint; break; default: break; } #else #include“SPIMgr.h” //所有引入信息從串口發(fā)送 uintl6 cmd = SPI_RESPONSE_BIT|SPI_CMD_SYS APP_MSG; //DstEP + SrcAddr + SrcEP + cld + len = l+2+1+2+1 uint8 buf[SPI_0DATA_MSG_LEN+7]; uint8 *pBuf = buf; uint8 *nATA_XY; uint8 succ = FALSE; *pBuf++ = SOP_VALUE; //操作系統(tǒng)值0x02 *pBuf++ = (uint8)(HI_UINTl6(cmd)); //OxlO *pBuf++ = (uint8)(LO_UINTl6(cmd)); //0x18 *pBuf++ = pkt- >cmd.DataLength + 7; //數(shù)據(jù)長(zhǎng)度 *pBuf++ = LOCATION_DONGLE_ENDPOINT; //0xCB *pBuf++ = L0_UINTl6(pkt->srcAddr.addr.shortAddr); *pBuf++ = HI_UINTl6(pkt->srcAddr.addr.shortAddr); //網(wǎng)絡(luò)地址 *pBuf++ = pkt->srcAddr.endPoint; //終端地址 *pBuf++ = LO_UINTl6(pkt->clusterId); //串ID *pBuf++ = HI_UINTl6(pkt->clusterId); *pBuf++ = pkt->cmd_DataLength; //坐標(biāo)數(shù)據(jù)長(zhǎng)度 DATA_XY = Pkt->cmd Data; if(HalUARTWrite(SPI_MGR_DEFAULT_PORT,buf,11)) { if(RalUARTWrite(SPI_MGR_DEFAULT_PORT,pkt->cmd.Data, \ pkt->cmd.DataLength)) { Cmd = SPIMgr_CalcFCS(buf+1,10)^SPIMgr_CalcFCS(pkt->cmd.Data, \ pkd->cmd.DataLength); //去除buf第一位操作系統(tǒng)值,然后進(jìn)行異或校驗(yàn)。 if(HalUARTWrite(SPI_MGR_DEFAULT_PORT,(uint8 * )(&cmd),1)) { SUCC=TRUE; //發(fā)送校驗(yàn)位 } } }#endif } /*************************************************************************// //函數(shù)名:byte SPIMgr_CalcFCS(uint8 *msg_ptr,uint8 len //功 能:對(duì)各位異或計(jì)算,校驗(yàn)計(jì)算 // 輸入:節(jié)點(diǎn)各位的數(shù)據(jù) // 輸出:校驗(yàn)值 ************************************************************************/ byte SPIMgr_CalcFCS(uint8 *msg_ptr,uint8 len) { byte x; byte xorResult; xorResult = 0; for(x = 0;x<len; x++,msg_ptr++) xorResult = xorResult^ *msg_ptr; //異或計(jì)算 return (xorResult); //返回校驗(yàn)值 } /************************************************************************* //函數(shù)名:byte SPIMgr_CalcFCS(uint8 *msg_ptr,uint8 len) // 功能:接收處理串口數(shù)據(jù) // 輸人:節(jié)點(diǎn)各位的數(shù)據(jù) // 輸出:無(wú) *************************************************************************/ void SPIMgr_ProcessZToolData(uint8 port,uint8 event) { uint8 ch; /*校驗(yàn)時(shí)間*/ if(event == HAL_UART_TX_FULL) { return; } if(event&(HAL_UART_RX_FULL | \ HAL_UART_Rx_AB0uT_FuLL | \ HAL_UART_RX_TIMEOUT)) { while(HAL_UART_RxBufLen(SPI_MGR_DEFAULT_PORT)) { HalUARTRead(SPI_MGR_DEFAULT_PORT,&ch,1); switch(state) { case SOP_STATE: if(ch == SOP_VALUE) //比較第一位是否為操作系統(tǒng)值 state = CMD_STATEl; break; case CMD_STATEl: CMD_Token[0] = ch; state = CMD_STATE2; break; case CMD_STATE2: CMD_Token[1] = ch; state = LEN_STATE; break; case LEN_STATE: LEN_Token = ch; // 有效數(shù)據(jù)長(zhǎng)度 if(ch == O) state = FCS_STATE; else state = DATA_STATE; // 數(shù)據(jù)開(kāi)始 tempDataLen = 0; /* 分配閃存 */ SPI_Msg = (mtOSALSerialData_t *)osal_msg_allocate( \ sizeof(mt0SALSerialData_t) + 2 + 1 + LEN_Token); if(SPI_Msg) { SPI_Msg->hdr.event = CMD_SERIAL_MSG; SPI_Msg->msg = (uint8 *)(SPI_Msg + 1); SPI_Msg->msg[0] = CMD_Token[0]; SPI_Msg->msg[1] = CMD_Token[1]; SPI_Msg->msg[2] = LEN_Token; } else { state = SOP_STATE; return; } break; case DATA_STATE: SPI_Msg->msg[3 + tempDataLen++] = ch; // 放置串口有效數(shù)據(jù) if(tempDataLen == LEN_Token) state = FCS_STATE; break; case FCS_STATE: FSC_Token = ch; /* 確定它是正確的 */ if((SPIMgr_CalcFCS((uint8 *)&SPI_Msg->msg[0], \ 2 + 1 + LEN_Token) == FSC_Token)) { osal_msg_send(MT_TaskID, (byte *)SPI_Msg); } else { /* 分派信息 */ osal_msg_deallocate((uint8 *)SPI_Msg); } /* 復(fù)位狀態(tài),發(fā)送或丟棄buffer里面的數(shù)據(jù) */ state = SOP_STATE; break; default: break; } } } } #endif // ZTOOL /************************************************************************* // 函數(shù)名:static void LocDongle_MTMsg(uint8 len,uint8”“。g) // 功能:根據(jù)命令發(fā)送PC機(jī)數(shù)據(jù)包括,RSSI請(qǐng)求、參考節(jié)點(diǎn)配置、定位節(jié)點(diǎn)配置 // 輸入:Pc信息。 0 - 目的地址低位 1 - 目的地址高位 2 - endpoint 3 - 串ID低位 4 - 串ID高位 5 - 數(shù)據(jù)長(zhǎng)度 6 - 數(shù)據(jù)第一位 // 輸出:無(wú) *************************************************************************/ static void LocDongle_MTMsg(uint8 len, uint8 * msg) { afAddrType_t dstAddr; cId_t clusterID; uint8 dataLen; dstAddr.addr.Mode = afAddrl6Bit; // 短地址發(fā)送 dstAddr.addr.shortAddr = BUILD_UINTl6(msg[O], msg[1]); // 短地址 msg += 2; dstAddr.endPoint = *msg++; clusterID = BUILD_UINTl6(msg[O], msg[1]); msg += 2; dataLen = *msg++; if((clusterID == LOCATION_XY_RSSI_REQUEST) || (clusterID == LOCATION_REFNODE_CONFIG) || (clusterID == LOCATION_REFNODE_REQUEST_CONFIG)) { dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT; } else { dstAddr.endPoint = LOCATION_BLINDNODE_ENDPOINT; }/* 發(fā)送數(shù)據(jù) */ (void)AF_DataRequest(&dstAddr, (endPointDesc_t *)&epDesc, clusterlD, dataLen, msg, &LocDongle_TransID, 0, AF_DEFAULT_RADIUS); 附錄5.7 CC1110 AP節(jié)點(diǎn)代碼(略) 附錄5.8 CC1110 ED節(jié)點(diǎn)代碼(略) 附錄6 實(shí)物圖(略)

作品圖片

  • 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)
  • 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)
  • 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)
  • 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)
  • 無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)

作品專(zhuān)業(yè)信息

設(shè)計(jì)、發(fā)明的目的和基本思路、創(chuàng)新點(diǎn)、技術(shù)關(guān)鍵和主要技術(shù)指標(biāo)

為解決機(jī)器人有線(xiàn)監(jiān)控網(wǎng)絡(luò)布線(xiàn)繁瑣,維護(hù)困難,監(jiān)控范圍受到限制等不足,本作品借助ZigBee無(wú)線(xiàn)網(wǎng)絡(luò)將機(jī)器人群進(jìn)行組網(wǎng),并以SimpliciTI網(wǎng)絡(luò)作為補(bǔ)充,實(shí)現(xiàn)PC端與無(wú)線(xiàn)機(jī)器人網(wǎng)絡(luò)無(wú)線(xiàn)鏈接,達(dá)到系統(tǒng)同步運(yùn)行、多機(jī)協(xié)同作業(yè)。每個(gè)機(jī)器人可以搭載多種傳感器與控制設(shè)備,既可獨(dú)立完成各項(xiàng)功能,也可將采集各種數(shù)據(jù)傳回PC機(jī)控制端。PC機(jī)可以實(shí)現(xiàn)對(duì)任意機(jī)器人精確定位、目標(biāo)跟蹤、實(shí)時(shí)監(jiān)控操縱等功能。 本作品的技術(shù)關(guān)鍵,一是要將大量的傳感器模塊組成無(wú)線(xiàn)網(wǎng)絡(luò),并通過(guò)PC機(jī)控制端進(jìn)行控制和數(shù)據(jù)傳輸;二是要將在監(jiān)控范圍內(nèi)工作的機(jī)器人整合入網(wǎng),實(shí)現(xiàn)無(wú)線(xiàn)定位并對(duì)其進(jìn)行遠(yuǎn)程無(wú)線(xiàn)監(jiān)視和操縱。 經(jīng)測(cè)試:在電池電壓為12V,室內(nèi)環(huán)境,被控小車(chē)的前后左右等動(dòng)作靈敏度發(fā)出命令到動(dòng)作時(shí)間平均為0.8S;定位精度在室內(nèi)的環(huán)境與主通信節(jié)點(diǎn)距離小于20米,大約為4cm;在室內(nèi)復(fù)雜環(huán)境,視頻圖像掉幀現(xiàn)象不明顯,圖像實(shí)時(shí)完整性;視頻的最大傳輸值平均為7Mb/s;通信誤碼率<1/10000;RSSI的瞬時(shí)值為sum(I2+Q2);RSSI的平均值為sum(RSSI(瞬時(shí)))/8192;信噪比(SNR)為60dB-75dB。 本系統(tǒng)可以既是一個(gè)自主的人工智能系統(tǒng),也是一個(gè)可遠(yuǎn)程無(wú)線(xiàn)人工操縱系統(tǒng),利用遠(yuǎn)程監(jiān)控克服了全人工智能無(wú)法應(yīng)對(duì)突發(fā)情況的缺點(diǎn),將人工智能和人工干預(yù)相結(jié)合,大大加強(qiáng)了系統(tǒng)的靈活性與復(fù)雜環(huán)境的適用性??梢云毡閼?yīng)用于工廠(chǎng)、車(chē)站物流運(yùn)輸,小區(qū)安防巡邏、醫(yī)療護(hù)理、高危場(chǎng)所作業(yè)等領(lǐng)域。

科學(xué)性、先進(jìn)性

本作品的先進(jìn)性體現(xiàn)在:利用無(wú)線(xiàn)傳感器網(wǎng)絡(luò)通信及其定位技術(shù),完成區(qū)域環(huán)境遠(yuǎn)程無(wú)線(xiàn)監(jiān)控,并在此基礎(chǔ)上建立對(duì)在其范圍內(nèi)工作的多個(gè)機(jī)器人組網(wǎng),以期可以達(dá)到對(duì)各機(jī)器人無(wú)線(xiàn)定位,遠(yuǎn)程無(wú)線(xiàn)監(jiān)視操縱目標(biāo),協(xié)助操控人員方便快捷地對(duì)機(jī)器人群進(jìn)行監(jiān)視和操縱,從而完成各項(xiàng)任務(wù)。 本作品的科學(xué)性體現(xiàn)在:基于Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)及其定位技術(shù)和SimpliciTI通信網(wǎng)絡(luò)可以將傳統(tǒng)的機(jī)器人組網(wǎng)并與控制人員遠(yuǎn)程干預(yù)有效地?zé)o線(xiàn)結(jié)合,相對(duì)以往GPS、LPS定位方式和有線(xiàn)通信相比,不僅設(shè)備價(jià)格低,環(huán)境架設(shè)容易,網(wǎng)絡(luò)適應(yīng)性強(qiáng),操控靈活實(shí)用性強(qiáng)的特點(diǎn)。 Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)工作在ISM頻段,2.4GHz頻段數(shù)據(jù)傳輸速率為250Kb/s,并且具有長(zhǎng)距離、低功耗,其發(fā)射輸出功率為0~3.6dBm,通信距離為30~70m,節(jié)點(diǎn)長(zhǎng)地址碼為64bit,有著在極大的網(wǎng)絡(luò)容量。SimpliciTI小型通信網(wǎng)絡(luò)作為其的補(bǔ)充,具有與其相類(lèi)似的特征。

獲獎(jiǎng)情況及鑒定結(jié)果

1、本作品在2008年取得第一批湖南省大學(xué)生研究學(xué)習(xí)和創(chuàng)新性實(shí)驗(yàn)計(jì)劃項(xiàng)目(一萬(wàn)元經(jīng)費(fèi)支持)。 2、作品正在科技廳等相關(guān)部門(mén)進(jìn)行技術(shù)成果鑒定。

作品所處階段

實(shí)驗(yàn)室階段。 實(shí)物作品已經(jīng)完成,進(jìn)行調(diào)試修改。

技術(shù)轉(zhuǎn)讓方式

正在和相關(guān)廠(chǎng)家聯(lián)系技術(shù)轉(zhuǎn)讓。

作品可展示的形式

實(shí)物、產(chǎn)品;模型;圖紙;磁盤(pán);現(xiàn)場(chǎng)演示;圖片;錄像;樣品。

使用說(shuō)明,技術(shù)特點(diǎn)和優(yōu)勢(shì),適應(yīng)范圍,推廣前景的技術(shù)性說(shuō)明,市場(chǎng)分析,經(jīng)濟(jì)效益預(yù)測(cè)

作品“無(wú)線(xiàn)網(wǎng)絡(luò)機(jī)器人監(jiān)控系統(tǒng)”使用操作可以分為兩個(gè)部分,第一部分為網(wǎng)絡(luò)節(jié)點(diǎn)部署,在布網(wǎng)時(shí)要考慮傳感器節(jié)點(diǎn)的位置并且將定位節(jié)點(diǎn)和通信節(jié)點(diǎn)安裝于機(jī)器人外側(cè),PC監(jiān)控端要與無(wú)線(xiàn)網(wǎng)關(guān)相連接調(diào)試實(shí)現(xiàn)網(wǎng)絡(luò)暢通。第二部分為代碼下載與軟件安裝,將機(jī)器人運(yùn)動(dòng)操控代碼下載入控制器,將上位機(jī)軟件安裝于PC監(jiān)控端。調(diào)試成功之后便可運(yùn)行監(jiān)控程序,實(shí)現(xiàn)對(duì)環(huán)境與機(jī)器人的無(wú)線(xiàn)監(jiān)控。 本作品將目前熱門(mén)的無(wú)線(xiàn)網(wǎng)絡(luò)傳感器技術(shù)和無(wú)線(xiàn)信號(hào)定位技術(shù)與機(jī)器人技術(shù)相結(jié)合,不僅實(shí)現(xiàn)了多個(gè)機(jī)器人同步協(xié)調(diào)工作,并且利用無(wú)線(xiàn)傳感器網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)各機(jī)器人的定位,以及實(shí)現(xiàn)遠(yuǎn)程無(wú)線(xiàn)監(jiān)控與操縱。可以實(shí)現(xiàn)多個(gè)機(jī)器人實(shí)時(shí)有效監(jiān)控,使得用于車(chē)站、機(jī)場(chǎng)行李安放托運(yùn),工廠(chǎng)原料、成品調(diào)運(yùn)裝配,貨場(chǎng)物流,以及安防巡邏領(lǐng)域的機(jī)器人可以同步。不僅可以替代原有工作人員節(jié)省了人力資源,使得操控人員既可從實(shí)時(shí)監(jiān)控中解脫亦可及時(shí)處理對(duì)機(jī)器人進(jìn)行遠(yuǎn)程控制,有極好的應(yīng)用前景。

同類(lèi)課題研究水平概述

在科技飛速發(fā)展的今天,機(jī)器人技術(shù)取得了長(zhǎng)足的進(jìn)步。通過(guò)多種傳感器信息的綜合,配合高速的微控制器使得機(jī)器人智能化、獨(dú)立化。隨著對(duì)機(jī)器人應(yīng)用的廣泛,針對(duì)機(jī)器人的監(jiān)控與定位要求也逐漸提高。 目前針對(duì)機(jī)器人的監(jiān)控大體可以分為兩類(lèi),一類(lèi)是遠(yuǎn)程有線(xiàn)監(jiān)控,一類(lèi)是近距離的無(wú)線(xiàn)視頻監(jiān)視。這兩類(lèi)監(jiān)控技術(shù)均有自身的優(yōu)勢(shì)但也有不足??傮w上來(lái)說(shuō)目前的監(jiān)控技術(shù)或是沒(méi)有擺脫電纜的束縛,或是只能依靠短距離的無(wú)線(xiàn)視頻來(lái)達(dá)到監(jiān)視的目的,并未真正做到無(wú)線(xiàn)網(wǎng)絡(luò)的構(gòu)建完成無(wú)線(xiàn)操縱與定位的目標(biāo)。正是基于以上考慮,將無(wú)線(xiàn)傳感器網(wǎng)絡(luò)技術(shù)與機(jī)器人技術(shù)相結(jié)合,充分利用了無(wú)線(xiàn)傳感器網(wǎng)絡(luò)數(shù)據(jù)傳輸與定位技術(shù),將機(jī)器人整合入網(wǎng),并且可以對(duì)多個(gè)機(jī)器人進(jìn)行監(jiān)控。國(guó)外研究無(wú)線(xiàn)傳感器監(jiān)控網(wǎng)絡(luò)與定位技術(shù)較國(guó)內(nèi)發(fā)展要早,國(guó)內(nèi)的研究大都處于起步階段,針對(duì)機(jī)器人的應(yīng)用研究也在起步階段。 目前的機(jī)器人的位置測(cè)定方面大都依賴(lài)于LPS等定位方式。利用Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)組成的定位系統(tǒng)就體現(xiàn)出明顯的技術(shù)優(yōu)勢(shì)和價(jià)格優(yōu)勢(shì)。和傳統(tǒng)的定位方式相比,該方案不僅所使用的設(shè)備價(jià)格低,通信定位范圍大,而且免去了繁瑣的布線(xiàn)工作,使得定位系統(tǒng)架設(shè)快捷便利,維護(hù)簡(jiǎn)單。此外,Zigbee無(wú)線(xiàn)傳感器網(wǎng)絡(luò)通過(guò)組網(wǎng)完成無(wú)線(xiàn)數(shù)據(jù)傳輸功能可以進(jìn)一步加強(qiáng)對(duì)機(jī)器人的控制,甚至可以同時(shí)與多個(gè)機(jī)器人進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)對(duì)機(jī)器人群遠(yuǎn)程無(wú)線(xiàn)操縱。使得操控人員方便快捷地對(duì)機(jī)器人群進(jìn)行監(jiān)視和操縱,從而完成各項(xiàng)任務(wù)。 本系統(tǒng)可以分成機(jī)器人工作終端、無(wú)線(xiàn)傳感器監(jiān)測(cè)網(wǎng)絡(luò)和PC監(jiān)控終端,通過(guò)ZigBee無(wú)線(xiàn)通信網(wǎng)絡(luò)和將三者連接起來(lái),將機(jī)器人工作終端和PC監(jiān)控終端都納為無(wú)線(xiàn)通信網(wǎng)絡(luò)中的一部分。機(jī)器人工作終端以可移動(dòng)平臺(tái)為載體,搭載多種傳感器和自動(dòng)化設(shè)備,實(shí)現(xiàn)對(duì)數(shù)據(jù)的采集以及動(dòng)作的完成;PC監(jiān)控終端由一個(gè)無(wú)線(xiàn)網(wǎng)關(guān)和計(jì)算機(jī)組成,負(fù)責(zé)啟動(dòng)建立一個(gè)新的網(wǎng)絡(luò)以及維護(hù)現(xiàn)有的網(wǎng)絡(luò),從而保證數(shù)據(jù)可以在三者之間順利傳輸,完成計(jì)算機(jī)對(duì)整個(gè)網(wǎng)絡(luò)的數(shù)據(jù)采集與指令廣播;傳感器監(jiān)控網(wǎng)絡(luò)是由大量的監(jiān)測(cè)節(jié)點(diǎn)構(gòu)成,監(jiān)測(cè)節(jié)點(diǎn)攜帶了所需要的傳感器,用于收集機(jī)器人發(fā)送的位置信息、機(jī)器人工作環(huán)境信息等。 本設(shè)計(jì)將大量的傳感器模塊組成無(wú)線(xiàn)網(wǎng)絡(luò),并在PC機(jī)控制端得到其廣播的數(shù)據(jù),可以將在監(jiān)控范圍內(nèi)工作的機(jī)器人整合入網(wǎng),實(shí)現(xiàn)無(wú)線(xiàn)定位并對(duì)其進(jìn)行遠(yuǎn)程無(wú)線(xiàn)監(jiān)視和操縱。 本作品具有國(guó)內(nèi)先進(jìn)水平。
建議反饋 返回頂部