【Nao-03】 Naoqi APIs 架构概览 & Hello World!

概述

本篇列出了几类常用的 API 功能模块,介绍了一个重要的 API 函数 ALProxy,并自己创建了一个 Python 指令盒,简单实现了让 Nao 说出 Hello World 的程序代码。

Title


一、Naoqi APIs

1. API 概览(官方文档戳我

  Naoqi 的 API 按功能分类可以大致分为八个部分,分别是:

2. 重要API: ALProxy

  在 Naoqi 的 Python SDK 中提供了一条重要的 API: ALProxy,在调用 Naoqi 的各个功能模块时通常都要先调用此API,从而获取指定功能模块的代理服务,其返回的应该是指定服务类的一个实例。ALProxy 有两个不同的构造函数,详见下面的函数原型:

1
2
3
4
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.
1
2
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 并点击确定,其他参数我们暂时不管。
Title

  这样,我们就造了一个盒子(Box),双击我们刚才造的 Box 即可打开文本编辑器,可以看到其中已经有一些初始代码了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 函数。

  函数原型:

1
void ALTextToSpeechProxy::say(const std::string& stringToSay)

  say 函数本身非常的简单,只有一个参数即要说的内容,由于 say 函数是 ALTextToSpeech 类中的成员函数,为了调用它我们首先要借助 ALProxy 来获得 ALTextToSpeech 模块的实例(代理):

1
tts = ALProxy ("ALTextToSpeech", "localhost", 7096)

  之后就可以大大方方的调用 say 函数来让 Nao 机器人说出我们想它说出的内容了:

1
tts.say ("Hello World!")

  为了让程序在 Box 被运行时执行,并在运行完所有内容后自动结束,我们将代码写在 OnStart 函数中、self.onStopped() 代码行上方,并取消 self.onStopped() 前的 # 号注释,完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

  运行效果:

Title

--- END ---
如果你觉得文章内容对你有帮助,可以打赏支持一下哦!

0%