naoqi:是运行在机器人系统上的一个应用程序,它起到管理程序运行相关的作用;
naoqi:同时在python SDK中,有一个基本的模块,就叫做naoqi,在python程序中常需要导入该模块import naoqi。
NAOqi Framework:是一个帮助于实现程序编写、调用、执行等等一些非明显可见过程的编程的框架,可以理解成一个仓库管理组织的工具。它能够帮助于寻找依赖于该框架下的相应的模块和方法,自动加载依赖的模块,主要工作过程如下:
其中,“naoqi”程序就是起到一个Broker的作用,启动时会自动加载.ini文件中配置好的模块,然后会帮助于查找、调用依赖的模块和方法,当你在机器人系统外(本地)执行程序时,Broker还会帮助于实现方法的调用。
Broker:可以理解成一个仓库经理,掌管着存放在这个仓库中的所有Modules和Methods,你要使用这些东西就要和Broker打交道,然后他也会帮你更省心的来使用这些东西;
Modules:自带的一些API模块或自定义的模块,在编程使用时常需要用一个代理Proxy,motion=ALProxy("ALMotion"),通过代理来调用方法,可以把代理理解成对应module的一个别名;
模块还分为local model 和remote model:
local module:两个相互调用的模块依赖于同一个Broker,此时互相调用不需要网络的连接,速度最快
remote module:两个模块不属于同一个Broker,此时互相调用就需要通过Broker作为中介,调用速度慢
在remote module中,要想实现相互调用,则需要先进行连接,连接方式有两种:
1.Broker to Broker:此种方式下,调用可以是相互的
2.Proxy to Broker:此种方式的调用只能是单向的,此时在定义broker时可以不指定要连接的broker的pip和pport
如下所示:
// c++
const std::string brokerName = "mybroker";
const std::string pip = "127.16.1.21" ; // local naoqi ip
int pport = 9559;
// create your broker
boost::shared_ptr<AL::ALBroker> broker = AL::ALBroker::createBroker(brokerName,"0.0.0.0", 5400, pip, pport);
// broker to broker
AL::ALProxy proxy = AL::ALProxy(<modulename>);
// proxy to broker
AL::ALProxy proxy = AL::ALProxy(broker, <modulename>);
对于最新版系统NAOqi 2.8,其定义了一个新的编程框架qi framework,里面包含有相应的API以供调用,目的是提供一种更加简单的语法来调用模块和方法。相关内容以及使用方法参阅:http://doc.aldebaran.com/2-8/dev/libqi/index.html
注:此文档根据nao官方文档整理而成