版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Broker 經(jīng)濟(jì)人,Proxy代理,Module模塊,method方法。這四個(gè)可以說是構(gòu)成naoqi框架的主要內(nèi)容,直接進(jìn)行分析,主要的參考資料就是官方文檔。 Broker,直譯為經(jīng)紀(jì)人,主要完成兩項(xiàng)任務(wù)1,提供字典服務(wù),能夠查找該broker下的Module及Method。2,提供網(wǎng)絡(luò)連接,使得模塊中方法能夠被外部模塊調(diào)用。在大多數(shù)情況下,你不需要考慮broker,可以視作透明的,將允許你像調(diào)用local module(本地模塊)一樣對(duì) remote module(遠(yuǎn)程模塊)進(jìn)行調(diào)用。Proxy作為module的代理存在,在對(duì)module訪
2、問其內(nèi)部method的時(shí)候,總是通過proxy來進(jìn)行操作的。有兩種思路來創(chuàng)建一個(gè)proxy:1,直接使用module的名字。AL:ALProxy proxy = AL:ALProxy(<modulename>);在這種情況下,必須要求你運(yùn)行的代碼與你將要生成的module在同一個(gè)broker中。2,使用 module 名字,及broker的ip、port。AL:ALProxy proxy = AL:ALProxy(<modulename>, <ip_adress>,
3、160;<port_number>);在這種情況下,module一定是位于你指定ip的broker中。也就是說,必須保證 明確module所在的位置,如果位于同一個(gè)broker中,則不需要指明,如果位于不同的broker中,則需要明確broker的ip-addr,prot-number。在實(shí)際應(yīng)用中可能會(huì)用到AL:ALProxy proxy = AL:ALProxy(boost:shared_ptr<AL:ALBroker> broker);這里可以參考文檔中C+ API 中的 alcommon -> Proxy的構(gòu)造函數(shù),
4、需要注意的是里面的modulename參數(shù),往往在進(jìn)行初始化的時(shí)候?qū)LProxy替換為具體的Proxy,不需要再特別給出該參數(shù)值。同樣分析最后一行實(shí)際應(yīng)用用的案例,其實(shí)是調(diào)用了 ALProxy (boost:shared_ptr< ALBroker > pBroker, const std:string &pModuleName, int pProxyMask=0, int timeout=0) 構(gòu)造函數(shù),同樣省略modulename。 ModuleModule可以看做是簡單的類庫中的類,當(dāng)類庫在autoload.init中加載的時(shí)候,會(huì)自動(dòng)實(shí)例化mo
5、dule類,(調(diào)用構(gòu)造函數(shù),及init()方法)。在module類的構(gòu)造函數(shù)(繼承自ALModule)中你可以綁定方法。這將會(huì)向其broker廣告method名字及其方法,這樣該這些方法就可以被其他module調(diào)用了。Module 分為兩類,local module,remote module:Local module,將會(huì)被編譯成一個(gè)庫文件,只能在robot內(nèi)部調(diào)用,執(zhí)行效率較高。是指相對(duì)于同一個(gè)broker中的module而言的。由于都在一個(gè)broker中,module之間的調(diào)用不必通過網(wǎng)絡(luò),所以更加迅速,Remote module,將會(huì)被
6、編譯成一個(gè)可執(zhí)行文件,并且可以在機(jī)器人外部運(yùn)行。Rmote module 可以方便的使用和調(diào)試,但是運(yùn)行速度慢效率低。是相對(duì)于位于不同的broker中的module而言的。Remote module之間的通信必須是通過網(wǎng)絡(luò)進(jìn)行的,一個(gè)remote module 需要借由broker來與另一broker中的module進(jìn)行通信。網(wǎng)絡(luò)通信是通過SOAP協(xié)議進(jìn)行的。兩個(gè)不同broker中的module(換句話說兩者相對(duì)是 remote module)此時(shí)存在兩種通訊方式,broker-broker,proxy-broker。Broker-
7、broker:雙向通道,兩側(cè)所有的module均可互聯(lián)。建立這種連接,在啟動(dòng)module的時(shí)候要指定main broker的ip、port。因?yàn)槟阍诮roker連接的時(shí)候就已經(jīng)指定ip、port,所以在之后進(jìn)行module調(diào)用的時(shí)候不需要再指明,直接利用名字進(jìn)行proxy的創(chuàng)建。Proxy-broker:單向通道,proxy所代理的module可以訪問另一側(cè)所有的module,反之則不可以。你需要在你的module內(nèi)部創(chuàng)建一個(gè)proxy,同時(shí)指定想要連接的broker的ip、port。 案例分析:現(xiàn)有NAO(IP:192.168.169.4),PC(IP:192.168
8、.168.2)實(shí)現(xiàn)多組方式通訊。方案一:不制作module,直接C+編程實(shí)現(xiàn)對(duì)NAO內(nèi)部API的調(diào)用,具體是實(shí)現(xiàn)獲取nao當(dāng)前視覺內(nèi)容,并顯示。程序執(zhí)行界面:在啟動(dòng)時(shí)將直接指定nao IP地址,也就是naoqi broker所在的IP地址。這里將顯示nao的視覺信息:調(diào)用關(guān)鍵代碼:cpp view plaincopy1. /* Create a proxy to ALVideoDevice on the robot.*/ 2. ALVideoDeviceProxy camP
9、roxy(robotIp, 9559); 這里便是直接指定遠(yuǎn)程broker的IP,Port,然后生成代理,而后可調(diào)用相應(yīng)module,不再多說。方案二:制作遠(yuǎn)程module,通過調(diào)用遠(yuǎn)程module中的方法實(shí)現(xiàn)特定的功能,這里我實(shí)現(xiàn)了一個(gè)VisionModule,并實(shí)現(xiàn)了與機(jī)器人視覺相關(guān)的部分內(nèi)容。啟動(dòng)remote module界面如下:這里可以看出VisionModule監(jiān)聽的端口為:192.168.169.2:54012,可以看出是在PC端運(yùn)行的。同時(shí)建立了與NAO(192.168.169.4:9559)的連接。利用test函數(shù)對(duì)該remote module
10、進(jìn)行測(cè)試,嘗試調(diào)用幾個(gè)參數(shù)設(shè)定函數(shù),測(cè)試界面如下:client端:module端:這里test程序中生成的proxy同樣指定為nao的IP地址,代碼如下:cpp view plaincopy1. boost:shared_ptr<AL:ALProxy> testProxy 2. = boost:shared_ptr<AL:ALProxy>(new AL:ALProxy("VisionModule", robotIP, port); 這就有點(diǎn)意思了,
11、我調(diào)用的是visionmodule,這是個(gè)naoqi中并不存在的module,但是卻仍然通過nao的broker進(jìn)行創(chuàng)建代理。查看文檔我找到這樣一句話,Brokers can be connected to each other to form a tree where each broker has parent broker until the base of the tree.意思就是多個(gè)broker可以互聯(lián)并形成樹結(jié)構(gòu),而每一個(gè)新生成的broker都有一個(gè)父broker直至樹的根節(jié)點(diǎn)。我便作此假設(shè),remote module所生成的broker其實(shí)是naoqi broker的一個(gè) 子b
12、roker。在程序中又可以應(yīng)用這樣的語句來創(chuàng)建proxy:ALVideoDeviceProxy camProxy(getParentBroker(); 從另一個(gè)方面印證了上述觀點(diǎn)。作為父broker理應(yīng)能夠得到子broker中的全部信息(這句話有待推敲,并沒有找到確鑿的證據(jù)說明這一點(diǎn),只是通過naoqi framework的 自省機(jī)制(introspection)推斷得來)。這樣我便得到了這樣的結(jié)論,naoqi broker 作為 test application 與 vision module (remote module) 的中介存在,在test看來,vision module 也不過是 naoqi broker 中的一個(gè) module,并不需要知道它是remote module 還是 local module。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)殖場獸醫(yī)服務(wù)合同
- 市政道路改造預(yù)應(yīng)力施工合同
- 物業(yè)管理評(píng)標(biāo)辦法合同管理
- 住宅區(qū)道路照明施工合同
- 臨時(shí)維修工聘用合同
- 水井建設(shè)與供水設(shè)施改造合同
- 智能能源清運(yùn)施工合同
- 地鐵工程外網(wǎng)施工合同
- 物聯(lián)網(wǎng)服務(wù)租賃合同轉(zhuǎn)讓模板
- 河流綜合治理防洪排水施工合同
- 業(yè)務(wù)招待費(fèi)審批單
- 建筑工程項(xiàng)目管理咨詢招標(biāo)(范本)
- 三位數(shù)除兩位數(shù)的除法練習(xí)題
- 慢性胃炎的中醫(yī)治療培訓(xùn)課件
- Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)
- 主題班會(huì)課防盜
- 幼兒園課件《撓撓小怪物》
- 教師教案檢查八大評(píng)分標(biāo)準(zhǔn)教案的評(píng)分標(biāo)準(zhǔn)
- 政府會(huì)計(jì)基礎(chǔ)知識(shí)講義
- 幼兒園整合式主題活動(dòng)設(shè)計(jì)案例《溫馨家園》
- 荒漠區(qū)生態(tài)治理(麥草沙障、植物固沙)施工方案
評(píng)論
0/150
提交評(píng)論