




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Broker 經(jīng)濟(jì)人,Proxy代理,Module模塊,method方法。這四個(gè)可以說(shuō)是構(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、問(wèn)其內(nèi)部method的時(shí)候,總是通過(guò)proxy來(lái)進(jìn)行操作的。有兩種思路來(lái)創(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中。也就是說(shuō),必須保證 明確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可以看做是簡(jiǎn)單的類庫(kù)中的類,當(dāng)類庫(kù)在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è)庫(kù)文件,只能在robot內(nèi)部調(diào)用,執(zhí)行效率較高。是指相對(duì)于同一個(gè)broker中的module而言的。由于都在一個(gè)broker中,module之間的調(diào)用不必通過(guò)網(wǎng)絡(luò),所以更加迅速,Remote module,將會(huì)被
6、編譯成一個(gè)可執(zhí)行文件,并且可以在機(jī)器人外部運(yùn)行。Rmote module 可以方便的使用和調(diào)試,但是運(yùn)行速度慢效率低。是相對(duì)于位于不同的broker中的module而言的。Remote module之間的通信必須是通過(guò)網(wǎng)絡(luò)進(jìn)行的,一個(gè)remote module 需要借由broker來(lái)與另一broker中的module進(jìn)行通信。網(wǎng)絡(luò)通信是通過(guò)SOAP協(xié)議進(jìn)行的。兩個(gè)不同broker中的module(換句話說(shuō)兩者相對(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:?jiǎn)蜗蛲ǖ溃琾roxy所代理的module可以訪問(wèn)另一側(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)前視覺(jué)內(nèi)容,并顯示。程序執(zhí)行界面:在啟動(dòng)時(shí)將直接指定nao IP地址,也就是naoqi broker所在的IP地址。這里將顯示nao的視覺(jué)信息:調(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,不再多說(shuō)。方案二:制作遠(yuǎn)程module,通過(guò)調(diào)用遠(yuǎn)程module中的方法實(shí)現(xiàn)特定的功能,這里我實(shí)現(xiàn)了一個(gè)VisionModule,并實(shí)現(xiàn)了與機(jī)器人視覺(jué)相關(guān)的部分內(nèi)容。啟動(dòng)remote module界面如下:這里可以看出VisionModule監(jiān)聽(tīng)的端口為: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,但是卻仍然通過(guò)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)用這樣的語(yǔ)句來(lái)創(chuàng)建proxy:ALVideoDeviceProxy camProxy(getParentBroker(); 從另一個(gè)方面印證了上述觀點(diǎn)。作為父broker理應(yīng)能夠得到子broker中的全部信息(這句話有待推敲,并沒(méi)有找到確鑿的證據(jù)說(shuō)明這一點(diǎn),只是通過(guò)naoqi framework的 自省機(jī)制(introspection)推斷得來(lái))。這樣我便得到了這樣的結(jié)論,naoqi broker 作為 test application 與 vision module (remote module) 的中介存在,在test看來(lái),vision module 也不過(guò)是 naoqi broker 中的一個(gè) module,并不需要知道它是remote module 還是 local module。
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省長(zhǎng)春市九臺(tái)區(qū)2024-2025學(xué)年小升初總復(fù)習(xí)數(shù)學(xué)測(cè)試卷含解析
- 新入院患者的入院護(hù)理評(píng)估
- 教科版2025屆高考?xì)v史試題實(shí)戰(zhàn)演練仿真卷含解析
- 瓊臺(tái)師范學(xué)院《國(guó)際結(jié)算與貿(mào)易融資》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東省汕頭市潮陽(yáng)區(qū)2024-2025學(xué)年初三最后一模英語(yǔ)試題含答案
- 湖南省瀏陽(yáng)一中2025屆學(xué)業(yè)水平考試物理試題試卷含解析
- 國(guó)際關(guān)系學(xué)院《篆刻技法與研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《建筑設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 單詞游戲比賽課件
- 糖尿病的護(hù)理診斷及護(hù)理措施
- 爆花(2023年陜西中考語(yǔ)文試卷記敘文閱讀題及答案)
- 海上救援合同
- 2024年義務(wù)教育階段國(guó)家質(zhì)量監(jiān)測(cè)模擬測(cè)試
- 纏論-簡(jiǎn)單就是美
- 兒童神話故事-女媧補(bǔ)天
- 高一數(shù)學(xué)下學(xué)期考點(diǎn)精講+精練(人教A版2019必修第二冊(cè))第六章平面向量及其應(yīng)用章末檢測(cè)卷(一)(原卷版+解析)
- 2024車輛掛靠證明
- DL∕T 2138-2020 電力專利價(jià)值評(píng)估規(guī)范
- 異地就醫(yī)備案的個(gè)人承諾書
- JT-T-1039-2016公路橋梁聚氨酯填充式伸縮裝置
- 航空航天概論智慧樹知到期末考試答案章節(jié)答案2024年西安航空學(xué)院
評(píng)論
0/150
提交評(píng)論