基于sm32的p2p通信的研究與實(shí)現(xiàn)_第1頁(yè)
基于sm32的p2p通信的研究與實(shí)現(xiàn)_第2頁(yè)
基于sm32的p2p通信的研究與實(shí)現(xiàn)_第3頁(yè)
基于sm32的p2p通信的研究與實(shí)現(xiàn)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于sm32的p2p通信的研究與實(shí)現(xiàn)

0lego的單機(jī)器人仿真模型legogrouplego組件(以下簡(jiǎn)稱lego組件)是一種廣泛用于青少年創(chuàng)新能力培訓(xùn)的智能“電子積木”組件。該組件實(shí)際上是一個(gè)自定義的嵌入應(yīng)用程序。中央控制器nxt是一個(gè)獨(dú)立的應(yīng)用程序模塊(系統(tǒng)通訊設(shè)備,套),此外還有各種傳感器模塊、時(shí)間統(tǒng)計(jì)模塊和機(jī)械傳動(dòng)模塊。面向LEGO套件的軟件開(kāi)發(fā)工具也越來(lái)越多,目前流行的有基于C、C++、JAVA、C#、G(Labview)等軟件開(kāi)發(fā)環(huán)境和平臺(tái),從原理上講,除了資源有限和積木式肢體脆弱,LEGO機(jī)器人與科學(xué)機(jī)器人具有相似的研究過(guò)程,能夠完成類似的任務(wù),例如LEGO行走機(jī)器人、棋類機(jī)器人、舞蹈機(jī)器人等。與目前流行的LEGO單機(jī)器人相比,多機(jī)器人系統(tǒng)由于涉及到機(jī)器人間協(xié)同,需要對(duì)人類行為的理解和仿真、乃至簡(jiǎn)單的分布式和并行計(jì)算方面的知識(shí)和實(shí)踐,而且在構(gòu)建具體系統(tǒng)和編寫控制軟件過(guò)程中,大量的歸納/演繹等思維方法被反復(fù)應(yīng)用,因此,多機(jī)器人系統(tǒng)更加適合青少年創(chuàng)新能力的培養(yǎng)。然而多機(jī)器人系統(tǒng)的建立要比單機(jī)器人系統(tǒng)復(fù)雜得多,即便是作為系統(tǒng)基礎(chǔ)的多機(jī)器人間組網(wǎng)通信就不是一個(gè)簡(jiǎn)單問(wèn)題,尤其是對(duì)LEGO套件而言,其控制核心部件NXT的資源十分有限,雖然LeJOSNXJ提供了藍(lán)牙通信機(jī)制,但由于復(fù)雜多機(jī)器人將使用很多NXT,所以常用的藍(lán)牙Scatternet技術(shù)難以在LEGO復(fù)雜多機(jī)器人系統(tǒng)中實(shí)現(xiàn)對(duì)等(Peer-to-Peer,P2P)通信,另外,晦澀難懂的組網(wǎng)通信底層細(xì)節(jié)也讓人望而卻步。本文針對(duì)LEGONXT特點(diǎn),基于LEGO套件的藍(lán)牙通信技術(shù),采用對(duì)資源需求比Scatternet小得多的Piconet,通過(guò)Piconet主設(shè)備上的數(shù)據(jù)轉(zhuǎn)發(fā),實(shí)現(xiàn)了多NXT組網(wǎng)和P2P通信,該組網(wǎng)通信機(jī)制命名為基于Piconet的P2P通信(PiconetBasedPeer-to-Peer,PBP2P)。1pc上的養(yǎng)分通信對(duì)于2節(jié)點(diǎn)藍(lán)牙通信而言,通信鏈路建立之初,兩個(gè)節(jié)點(diǎn)分別被定義為具有initiator(初始化模塊)的主設(shè)備和具有receiver(接收模塊)的從設(shè)備,從設(shè)備的recerver提出通信請(qǐng)求,而主設(shè)備的initiator則用來(lái)建立通信連接通道。多節(jié)點(diǎn)藍(lán)牙通信組網(wǎng)方式有兩種:其一為Piconet網(wǎng)絡(luò),該方式簡(jiǎn)單,對(duì)資源需求低,網(wǎng)絡(luò)設(shè)備分為1個(gè)主設(shè)備和多個(gè)從設(shè)備,主從設(shè)備間可直接雙向通信,從設(shè)備間不能直接通信;其二是Scatternet網(wǎng)絡(luò),該網(wǎng)絡(luò)將Piconet從設(shè)備同時(shí)作為其他Piconet主設(shè)備,因此可為每個(gè)設(shè)備都建立一個(gè)以其為主設(shè)備的Piconet形成Scatternet網(wǎng),該網(wǎng)絡(luò)功能強(qiáng)大,可實(shí)現(xiàn)節(jié)點(diǎn)間P2P通信,但需要較多資源。顯然,如果以n個(gè)LEGONXT建立Scatternet,則每個(gè)NXT至少要含有n-1個(gè)與其他NXT的receiver對(duì)應(yīng)的initiator,即需要在NXT上建立眾多獨(dú)立運(yùn)行的線程,而NXT的資源十分有限,難以負(fù)擔(dān)??紤]到NXT資源有限、多機(jī)器人系統(tǒng)規(guī)??缮炜s性、以及系統(tǒng)運(yùn)行監(jiān)控的需求,本文以帶有藍(lán)牙模塊的PC為中控機(jī)(以下簡(jiǎn)稱PC),建立以PC為主設(shè)備,所有NXT為從設(shè)備的Piconet。盡管NXT只能與主設(shè)備PC通信,NXT之間不能直接通信,但通過(guò)在PC上提供通信服務(wù)模塊CCommServer用于轉(zhuǎn)發(fā)來(lái)自NXT的通信數(shù)據(jù)到其目標(biāo)NXT,通過(guò)封裝底層通信細(xì)節(jié),在較高的軟件層次上實(shí)現(xiàn)了多機(jī)器人間的P2P通信。其具體通信機(jī)制和過(guò)程如圖1的UML活動(dòng)圖所示。由圖1可知,具體通信功能由CCommServer、相關(guān)機(jī)器人的CCommunicator、CMsgProxy對(duì)象協(xié)作而共同完成。機(jī)器人調(diào)用函數(shù)CCommunicator:SendMsgToAnotherRobot(StringsRobotName,intnMsgID,intnParam,StringsTxt)向名字為sRobotName的機(jī)器人發(fā)送消息,消息類型為nMessageID,兩個(gè)消息參數(shù)分別為nParam和sText。該函數(shù)根據(jù)sRobotName查找通信錄得到目標(biāo)NXT端口地址,然后將整條消息放置到NXT的待發(fā)隊(duì)列CMsgProxy:m_qMsgToSend尾部。CCommServer為獨(dú)立線程,運(yùn)行時(shí)會(huì)交替進(jìn)入“讀取”和“轉(zhuǎn)發(fā)”消息時(shí)段。在“讀取”時(shí)段,遍歷所有NXT,從其讀取發(fā)送到PC的消息,將它們存放至轉(zhuǎn)發(fā)隊(duì)列CCommServer:m_msgpQue尾部;在“轉(zhuǎn)發(fā)”時(shí)段,解析轉(zhuǎn)發(fā)隊(duì)列CCommServer:m_msgpQue隊(duì)首消息,如其目標(biāo)為當(dāng)前正連接著的NXT,則將其傳送到該NXT。此過(guò)程反復(fù)進(jìn)行,直到隊(duì)首不再有發(fā)往該NXT的消息為止。各NXT的CMsgProxy也是獨(dú)立線程,運(yùn)行時(shí)交替進(jìn)入“發(fā)送”和“讀取”時(shí)段。“發(fā)送”時(shí)段將待發(fā)隊(duì)列CMsgProxy:m_qMsgToSend隊(duì)首消息拆分并轉(zhuǎn)換成LeJOSNXJ藍(lán)牙通信格式的數(shù)據(jù),然后逐一將其發(fā)送給目標(biāo)NXT;“讀取”時(shí)段從當(dāng)前連接的NXT讀取數(shù)據(jù),然后調(diào)用CCommunicator:DispatchMsgToUnit(CMsgPkgmp),將消息散發(fā)至本地CRobot的各個(gè)相關(guān)對(duì)象。2基于android的對(duì)象消息機(jī)制由于leJOS等Java軟件開(kāi)發(fā)平臺(tái)沒(méi)有類似MFC之類的對(duì)象消息機(jī)制,這對(duì)協(xié)同多機(jī)器人系統(tǒng)的軟件開(kāi)發(fā)十分不變,為此,作者在參考文獻(xiàn)后建立了基于Java語(yǔ)法標(biāo)準(zhǔn)的對(duì)象消息機(jī)制,而本文機(jī)器人間通信是該對(duì)象消息機(jī)制的底層支撐,因此其具體實(shí)現(xiàn)與對(duì)象消息機(jī)制的實(shí)現(xiàn)密切相關(guān)。2.1管理系統(tǒng)的結(jié)構(gòu)由于LEGO多機(jī)器人組網(wǎng)硬件由多個(gè)NXT和帶有藍(lán)牙通信模塊的PC機(jī)構(gòu)成,因此宏觀上系統(tǒng)的軟件可以看作主要由三個(gè)部分組成,如圖2所示。1ccpmnser維度位于中間控制臺(tái)上的通信服務(wù)器上承擔(dān)向NXT發(fā)送通信數(shù)據(jù)或從NXT接收通信數(shù)據(jù)的任務(wù),這些任務(wù)包括解析通信目標(biāo)地址、通信數(shù)據(jù)緩存等。2ccommserper-ccummserpers新通信NXT與中控機(jī)的通信實(shí)際上由該類控制和實(shí)施,接收通信數(shù)據(jù)時(shí),該類讀取CCommServer發(fā)送給本地NXT的數(shù)據(jù);發(fā)送通信數(shù)據(jù)時(shí),該類將本地NXT發(fā)送的數(shù)據(jù)傳送給CCommServer。作為通信代理,CMsgProxy的實(shí)現(xiàn)調(diào)用了LeJOSNXJ的藍(lán)牙通信功能。3壓力和狀態(tài)信息封裝該模塊封裝了機(jī)器人之間通信的接口,該接口支持以面向?qū)ο笙⒌男问竭M(jìn)行機(jī)器人之間的通信,即數(shù)據(jù)格式不是LeJOSNXJ規(guī)定的底層通信數(shù)據(jù)格式。為了封裝底層硬件相關(guān)信息和更好地處理多機(jī)器人之間系統(tǒng)動(dòng)作,機(jī)器人所有行為和狀態(tài)信息均封裝在抽象類CRobot內(nèi)部成員對(duì)象中,任何機(jī)器人從軟件角度看都是CRobot派生類的對(duì)象實(shí)例,例如與通信相關(guān)模塊的CCommunicator、CMsgProxy均為CRobot內(nèi)部對(duì)象。本文聚焦于多機(jī)器人組網(wǎng)通信機(jī)制,僅重點(diǎn)介紹CMsgProxy和CCommServer,關(guān)于Java對(duì)象間消息機(jī)制請(qǐng)參見(jiàn)參考文獻(xiàn),而CRobot的其他細(xì)節(jié)將另行撰文,在此不加贅述。2.2osi數(shù)據(jù)鏈路層和物理層雖然PBP2P的實(shí)現(xiàn)并不復(fù)雜,但是其功能也基本覆蓋了OSI模型七層中的表示、會(huì)話、傳輸、網(wǎng)絡(luò)等四層(圖3),而OSI數(shù)據(jù)鏈路層和物理層由LEGO藍(lán)牙通信模塊和leJOSNXJ提供。當(dāng)然,為了提高效率,PBP2P實(shí)現(xiàn)中的軟件層次界限并不十分嚴(yán)格。2.2.1ccommserper控制CCommServer類是中控機(jī)上的獨(dú)立線程,作為Piconet主設(shè)備,提供3種功能:通信初始化與通信過(guò)程控制、消息發(fā)送與接收、通信設(shè)備管理與轉(zhuǎn)發(fā)控制,分別對(duì)應(yīng)于OSI的會(huì)話、傳輸、網(wǎng)絡(luò)等三層,為了實(shí)現(xiàn)上的方便和運(yùn)行效率,CCommServer實(shí)現(xiàn)中沒(méi)有追求明確的劃分;關(guān)于另一重要模塊CMsgProxy,由于將來(lái)與應(yīng)用層程序有密切關(guān)系,因此在具體實(shí)現(xiàn)時(shí)層次和模塊劃分相對(duì)明確,各模塊與OSI對(duì)應(yīng)關(guān)系如圖3所示。2.2.2發(fā)送或發(fā)送其他機(jī)器人CMsgProxy類是CRobot的組成部分之一,每個(gè)機(jī)器人的NXT中均有其一個(gè)運(yùn)行實(shí)例,這也是一個(gè)并行運(yùn)行的線程,主要用來(lái)負(fù)責(zé)接收中控機(jī)轉(zhuǎn)發(fā)來(lái)的其他機(jī)器人發(fā)來(lái)的消息,同時(shí)負(fù)責(zé)將本機(jī)器人所要發(fā)往其他機(jī)器人的消息發(fā)送給中控機(jī)中的CCommServer,將接收到的消息調(diào)用CCommunicator中的函數(shù)voidDispatchMsgToUnit(CMsgPkgmsgp)分發(fā)到具體部件的消息隊(duì)列中(目前規(guī)定其他機(jī)器人不能與本機(jī)器人的部件之間直接消息聯(lián)系,外界的消息只能發(fā)給本機(jī)器人的執(zhí)行機(jī)構(gòu)CExecutive)。該函數(shù)在通信連接建立過(guò)程中的角色是扮演initiator,對(duì)于消息的發(fā)送和收取過(guò)程與CCommServer類似。2.2.3基于x-msg的對(duì)象消息支持消息封裝對(duì)應(yīng)于OSI的表示層,由CRobotMsg和CMsgPkg兩個(gè)類實(shí)現(xiàn),其中CRobotMsg定義了機(jī)器人系統(tǒng)的對(duì)象消息模式,即應(yīng)用層通信數(shù)據(jù)格式,而CMsgPkg提供了消息的會(huì)話層數(shù)據(jù)格式。2.2.4面向網(wǎng)絡(luò)的方案該部分對(duì)應(yīng)于OSI網(wǎng)絡(luò)層部分功能。CCommServer承擔(dān)的消息轉(zhuǎn)發(fā)需要根據(jù)所接收消息的目標(biāo)地址,調(diào)用網(wǎng)絡(luò)路由功能并將消息發(fā)送給目標(biāo)機(jī)器人。與復(fù)雜網(wǎng)絡(luò)不同,PBP2P網(wǎng)絡(luò)的路由功能十分簡(jiǎn)單,各節(jié)點(diǎn)的路由信息以通信錄的形式加以維護(hù),由類CAddrInfo和類CAddrList承擔(dān),其中所含主要數(shù)據(jù)信息及功能如圖4所示。CAddrList除維護(hù)通信錄外,還提供各機(jī)器人及中控機(jī)上通信錄的同步等功能。由于有了通信錄,通信時(shí)可以直接

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論