入门篇(3)NAO机器人的NAOqi框架和模块代理

NAO机器人运行的是基于Linux的Gentoo操作系统,基于naoqi操作者框架。
连接NAO机器人无非就是连接NAOqi框架以获取框架下的所有模块。

NAOqi介绍

NAOqi框架

NAOqi是机器人上运行的主要程序,由它完成对NAO机器人的整体控制。NAOqi架构是对Aldebraran公司的机器人进行编程的一种编程框架。此框架允许不同模块(视频、运动、语音)之间的通讯、编程和信息共享,其主要特点如下:

  • 跨平台:NAOqi架构能用于Windows、Linux、MacOS系统,同样也能在这些系统下开发NAOqi架构。
  • 跨语言:使用Python进行编程,既能够在电脑上运行也能直接在机器人上运行;使用C++进行编程时,为了使程序能在机器人操作系统NAOqi OS上运行,需要使用交叉编译工具CMake生成能在NAOqi OS上运行的代码。
  • 分布式设备:一个实时应用程序,无论只是在一台设备上运行,还是分布在多台机器人的多个进程或模块实现,它们的调用方法是一样的,即配置正确的IP地址和端口号(通常为9559),并且远程调用API文件和本地调用的方法是完全相同的。

NAOqi的运作方式

运行于机器人上的NAOqi系统称为中间人(broker),在启动时中间人会自动加载一个名为“autoload.ini”的配置文件,该文件定义了需要被加载的库(libraries),每个库中又包含一个或多个模块(modules),这些模块通过中间人(broker)发布它们的方法(methods)。NAOqi的运行过程如图1所示。
同时,中间人(broker)还提供了查询服务,因此Broker下的modules或者同一个局域网中其他的modules都能够调用此broker的modules发布的方法。Broker、modules、methods的具体关系如图2所示。
NAOqi运作方式

Broker、modules、methods的具体关系

中间人(Broker)的本质其实是一个对象,它提供搜寻模块和方法的功能,并且能让它的模块所绑定的方法被外部程序通过网络访问调用。基于此特点,使得用户在另一个进程或另一台设备中调用这些远程模块如同机器人在本地进程中调用本地模块一样方便。
代理(Proxy)是代表着模块的一个对象,通过代理用户能调用它代表的模块所对应的方法。例如,如果创建一个代表着视觉模块ALVideoDevice的代理,则得到一个含有视觉模块ALVideoDevice所有方法的对象。创建代理的方式有两种,分别为本地调用和远程调用,前者仅注明了模块的名字,只能使用本地Broker的方法,后者除此之外还需注明IP地址和端口号。本文主要采取远程代理的方式,以ALVideoDevice为例其头文件定义及创建代理的C++代码如下:

#include <alproxies/alvideodeviceproxy.h>//包含头文件
#include <alvision/alimage.h>
#include <alvision/alvisiondefinitions.h>
AL::ALVideoDeviceProxy cameraProxy(IP, 9559); //创建视频模块的代理
cameraProxy.setActiveCamera(AL::kTopCamera); // 设置顶部摄像机
const std::string clientName = cameraProxy.subscribe("test", AL::kQVGA, AL::kBGRColorSpace, 30); // 通过成员函数subscribe订阅摄像机

查看官方开发文网址如下:
http://doc.aldebaran.com/2-1/dev/naoqi/index.html

后续我们将实现NAO的各个模块的功能!

猜你喜欢

转载自blog.csdn.net/zz683693/article/details/73500604