概述
本篇列出了几类常用的 API 功能模块,介绍了一个重要的 API 函数 ALProxy,并自己创建了一个 Python 指令盒,简单实现了让 Nao 说出 Hello World 的程序代码。
文章目录
一、Naoqi APIs
1. API 概览(官方文档戳我)
Naoqi 的 API 按功能分类可以大致分为八个部分,分别是:
- 核心类API:NAOqi Core
- 情感类API:NAOqi Emotion
- 交互类API:NAOqi Interaction engines
- 运动类API:NAOqi Motion
- 音频类API:NAOqi Audio
- 视觉类API:NAOqi Vision
- 人像感知API::NAOqi People Perception
- 传感器与LED灯:NAOqi Sensors & LEDs
2. 重要API: ALProxy
在 Naoqi 的 Python SDK 中提供了一条重要的 API: ALProxy,在调用 Naoqi 的各个功能模块时通常都要先调用此API,从而获取指定功能模块的代理服务,其返回的应该是指定服务类的一个实例。ALProxy 有两个不同的构造函数,详见下面的函数原型:
ALProxy (name, ip, port)
# name is the name of the module,
# ip is the IP of the broker in which the module is running,
# port is the port of the broker.
ALProxy (name)
# name is the name of the module.
ALProxy (name) 作为 ALProxy (name, ip, port) 的重载函数,通常在没有可用的代理实例时才被使用。
二、在 Choregraphe 中创建自己的第一个 Python Box
接下来,我们就要开始着手 Python 程序的编写了,这一系列的学习笔记都将在 Choregraphe 环境中完成代码的编写。首先,我们需要在 Choregraphe 中新建一个盒子,只需在流程图面板右键 -> Create a new box 中选择 Python 即可,填写 Box name 和 Description 并点击确定,其他参数我们暂时不管。
这样,我们就造了一个盒子(Box),双击我们刚才造的 Box 即可打开文本编辑器,可以看到其中已经有一些初始代码了:
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
#put initialization code here
pass
def onUnload(self):
#put clean-up code here
pass
def onInput_onStart(self):
#self.onStopped() #activate the output of the box
pass
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
其中 onLoad 函数和 onUnload 函数分别在初始化和清除的时候调用,而 onInput_onStart 函数与 onInput_onStop 函数则是在盒子启动和停止的时候被调用。
三、Hello World!
好了,下面就让我们通过代码实现,让 Nao 说出那句经典的 Hello World 吧!
为了让 Nao 开口说话,我们还需要一个分类于 NAOqi Audio 的 API: ALTextToSpeech。
ALTextToSpeech 是一个类,或者说是 Naoqi 的一个功能模块,其中包含 setParameter、setVoice、getVoice 等成员函数,而具有能让 Nao 开口说话这种神奇作用的,就是其中的 say 函数。
函数原型:
void ALTextToSpeechProxy::say(const std::string& stringToSay)
say 函数本身非常的简单,只有一个参数即要说的内容,由于 say 函数是 ALTextToSpeech 类中的成员函数,为了调用它我们首先要借助 ALProxy 来获得 ALTextToSpeech 模块的实例(代理):
tts = ALProxy ("ALTextToSpeech", "localhost", 7096)
之后就可以大大方方的调用 say 函数来让 Nao 机器人说出我们想它说出的内容了:
tts.say ("Hello World!")
为了让程序在 Box 被运行时执行,并在运行完所有内容后自动结束,我们将代码写在 OnStart 函数中、self.onStopped() 代码行上方,并取消 self.onStopped() 前的 # 号注释,完整代码如下:
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
#put initialization code here
pass
def onUnload(self):
#put clean-up code here
pass
def onInput_onStart(self):
tts = ALProxy("ALTextToSpeech", "localhost", 7096)
tts.say("Hello World!")
self.onStopped() #activate the output of the box
pass
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
运行效果: