- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NAOqiframework相关概念
Broker?—经济人,Proxy—代理,Module—模块,method—方法。这四个可以说是构成naoqi框架的主要内容,直接进行分析,主要的参考资料就是官方文档。?Broker,直译为经纪人,主要完成两项任务1,提供字典服务,能够查找该broker下的Module及Method。2,提供网络连接,使得模块中方法能够被外部模块调用。在大多数情况下,你不需要考虑broker,可以视作透明的,将允许你像调用local?module(本地模块)一样对?remote?module(远程模块)进行调用。Proxy作为module的代理存在,在对module访问其内部method的时候,总是通过proxy来进行操作的。有两种思路来创建一个proxy:1,直接使用module的名字。AL::ALProxy?proxy?=?AL::ALProxy(modulename);在这种情况下,必须要求你运行的代码与你将要生成的module在同一个broker中。2,使用?module?名字,及broker的ip、port。AL::ALProxy?proxy?=?AL::ALProxy(modulename,?ip_adress,?port_number);在这种情况下,module一定是位于你指定ip的broker中。也就是说,必须保证明确module所在的位置,如果位于同一个broker中,则不需要指明,如果位于不同的broker中,则需要明确broker的ip-addr,prot-number。在实际应用中可能会用到AL::ALProxy?proxy?=?AL::ALProxy(boost::shared_ptrAL::ALBroker?broker);这里可以参考文档中C++ API 中的alcommon - Proxy的构造函数,需要注意的是里面的modulename参数,往往在进行初始化的时候将ALProxy替换为具体的Proxy,不需要再特别给出该参数值。同样分析最后一行实际应用用的案例,其实是调用了?ALProxy (boost::shared_ptr ALBroker pBroker, conststd::string pModuleName, intpProxyMask=0, int timeout=0) 构造函数,同样省略modulename。?ModuleModule可以看做是简单的类库中的类,当类库在autoload.init中加载的时候,会自动实例化module类,(调用构造函数,及init()方法)。在module类的构造函数(继承自ALModule)中你可以绑定方法。这将会向其broker广告method名字及其方法,这样该这些方法就可以被其他module调用了。Module?分为两类,local?module,remote?module:Local?module,将会被编译成一个库文件,只能在robot内部调用,执行效率较高。是指相对于同一个broker中的module而言的。由于都在一个broker中,module之间的调用不必通过网络,所以更加迅速,Remote?module,将会被编译成一个可执行文件,并且可以在机器人外部运行。Rmote?module?可以方便的使用和调试,但是运行速度慢效率低。是相对于位于不同的broker中的module而言的。Remote?module之间的通信必须是通过网络进行的,一个remote?module?需要借由broker来与另一broker中的module进行通信。网络通信是通过SOAP协议进行的。两个不同broker中的module(换句话说两者相对是 remote ?module)此时存在两种通讯方式,broker-broker,proxy-broker。Broker-broker:双向通道,两侧所有的module均可互联。建立这种连接,在启动module的时候要指定main?broker的ip、port。因为你在建立broker连接的时候就已经指定ip、port,所以在之后进行module调用的时候不需要再指明,直接利用名字进行proxy的创建。Proxy-broker:单向通道,proxy所代理的module可以访问另一侧所有的module,反之则不可以。你需要在你的module内部创建一个proxy,同时指定想要连接的broker的ip、port。?案例分析:现有NAO(IP:192.168.169.4),PC(IP:192.168.168.2)实现多组方式通讯。方案一:不制作module,直接C++编程实现对NAO内部API的调用,具体是实现获取nao当前视觉内容,并显示。程序执行界面:在启动时将直接指定nao IP地址,也就是naoqi broker所在的
文档评论(0)