语音指令模块

功能演示视频

功能介绍

使用此模块,您可以通过语音控制 Petoi 机器人执行各种技能,无需唤醒词。目前,该模块支持两种语言(中文和英语)的 40 个固定语音命令和通过录制任何声音片段创建的 10 个自定义命令。

NyBoard

硬件设置

该模块可以使用线缆连接到 NyBoard 的 Grove 接口(包含D8、D9两个引脚):

软件设置

可以通过以下两种方式来进行软件设置:

桌面应用程序

您可以使用 Petoi 桌面应用程序中的 固件上载 上传程序。

Arduino IDE

您可以使用 Arduino IDE 上传和修改源代码。

模块功能代码已集成到 OpenCat 项目中。如下图所示,在 OpenCat.ino 中将代码行 #define VOICE 的注释符去掉。然后将程序上传到机器人NyBoard主板上。机器人将工作在语音模式下。此程序将允许机器人根据语音指令进行操控。以Bittle为例,代码设置如下图所示:

BiBoard

硬件设置

  • BiBoard V0 此模块内置在 BiBoard V0 的扩展板中,如下图所示:

  • BiBoard V1 此模块直接内置在BiBoard V1主板上,如下图所示:

软件设置

可以通过以下两种方式来进行软件设置:

桌面应用程序

您可以使用 Petoi 桌面应用程序中固件上载来上传程序。

请选择正确的产品类型、主板号和串口名称。模式选择标准,点击升级固件按钮。例如,Bittle、BiBoard_V0_2、COM3 如下:

Arduino IDE

您也可以使用 Arduino IDE 上传程序(OpenCatEsp32.ino)。

使用最新的 OpenCatESP32.ino 代码,激活与当前机器人相应的产品宏定义、主板型号宏定义,并将其他的产品宏定义,主板型号宏定义语句注释掉。如果机器人带有机械臂,请激活此行宏义语句:

#define ROBOT_ARM                 // for attaching head clip arm

否则请用//将此行代码注释。

例如,当前机器人是Bittle, 主板型号是BiBoard_V0_2,不带机械臂,代码修改如下图所示:

上传程序后,默认即为语音模式。打开串口监视器后,可以输入串口指令“X?”后,按下回车键,查询当前所在工作模式。如果是其他模式,请并输入串口指令“ XA ”后,按下回车键,切换到语音模式。

玩转语音指令

常规用法

  1. 切换语言模式

    切换到中文的方式:

    • 说语音指令: “嘀-嘀-”

    • 在手机App中创建一个名为“中文”的命令按钮,使用代码: X65,98

    切换到英语的方式:

    • 说语音指令: “冰-冰-”

  2. 开启/关闭语音指令功能(语音响应+机器人动作响应)

    开启语音指令功能的方式

    • 说语音指令:“打开音效”

    • 在手机App中创建一个名为“启用语音指令”的命令按钮,使用代码: X65,99

    关闭语音指令功能的方式

    • 说语音指令:“安静点”

    • 在手机App中创建一个名为“禁用语音指令”的命令按钮,使用代码: X65,100

  3. 使用预定义的语音指令 您可以参考以下语音指令列表:

  4. 串口指令 有 7 个相关的串口配置命令;您可以在串口监视器中的文本框中输入上述命令后,按 回车键 将指令发送给机器人。

串口命令
手机App自定义命令代码
功能

XAa

X65,97

切换到英语

XAb

X65,98

切换到中文

XAc

X65,99

开启回复音并启用反应

XAd

X65,100

关闭回复音效并禁用反应

XAe

X65,101

进入自定义语音指令模式

XAf

X65,102

退出自定义语音指令模式

XAg

X65,103

删除所有自定义语音指令

为了避免意外触发机器人响应语音指令,例如在与其他人交谈时,您可以对机器人说“安静点”,禁用语音指令模块。

如果上述语音指令在中文模式下不起作用,请尝试使用手机App创建一个带有代码: X65,100 的自定义命令按钮;或者在串口监视器中输入 XAd 来禁用语音模块。

您可以对机器人说“打开音效”,启用语音指令模块。也可以使用手机App创建一个带有代码: X65,99 的自定义命令按钮;或者在串口监视器中输入 XAc 以启用语音指令模块。

语音命令“爬上去”对你来说是一个挑战。你可以自行设计行为。然后,你可以在 Petoi 论坛挑战区发布,或者发送邮件至 support@petoi.com。我们可能会将其纳入官方固件,并送你一份礼物!

您也可以通过短视频社交媒体平台分享您设计的技能动作,比如:

记录自定义语音指令

当机器人在中文模式下工作时,您可以说语音指令“开始学习”(或在串口监控器中输入 XAe)进入到自定义语音指令模式,并根据语音提示依次录制您的语音指令,如需结束录入语音指令,请说语音指令“结束学习”(或在串口监控器中输入 XAf),即可退出自定义语音指令模式。

如果模块不在中文模式,您可以说 “嘀-嘀-”(或在串行监视器中输入序列命令 XAb )以切换到中文模式。

您最多可以录制 10 个语音指令。

退出自定义语音指令模式后,说出其中一个已录制的语音命令以触发机器人做出反应技能。

说语音指令“清除学习数据”,将一次性删除所有的自定义语音指令。

在OpenCatEsp32工程代码中的 voice.h文件中,我们已定义好由10个字符串组成的技能列表(customizedCmdList[])作为自定义语音指令的响应技能(比如对于产品 Bittle 只有前五个可以看到机器人的实际反应,因为它们是符合串口协议的串口指令):

  "kpu1",                                                                  // single-handed pushups
  "m0 80 0 -80 0 0",                                                       // wave head
  "kmw",                                                                   // moonwalk
  "b14,8,14,8,21,8,21,8,23,8,23,8,21,4,19,8,19,8,18,8,18,8,16,8,16,8,14,4,\
  21,8,21,8,19,8,19,8,18,8,18,8,16,4,21,8,21,8,19,8,19,8,18,8,18,8,16,4,\
  14,8,14,8,21,8,21,8,23,8,23,8,21,4,19,8,19,8,18,8,18,8,16,8,16,8,14,4",  // twinkle star
  "T",                                                                     // call the last skill data sent by the Skill Composer
  "6th",
  "7th",
  "8th",
  "9th",
  "10th"  // define up to 10 customized commands.

比如:kpu1 是动作技能单手俯卧撑的串口指令, kmw 是动作技能滑步的串口指令,m0 80 0 -80 是一条控制关节动作(左右摇头)的串口指令,b14,8,14,8,21,8,21,8,23,8,23,8,21,4 是一条播放旋律串口指令。

如果想让机器人使用上述自定义回复,您需要说“开始学习”,进入自定义语音命令模式,录制5个语音指令,比如录入以下5条指令:“演示一下”(上一次从技能创作坊中导出的技能动作)、“单手俯卧撑”、“摇头”、“滑步”、“小星星”),然后说“结束学习”退出自定义语音命令模式。

如果您已录制语音命令,相应的响应技能字符串不是符合串口协议的串口指令。例如 6th ,则机器人没有实际技能演示效果;当您说出第6条语音指令时,它只会在串口监视器上打印出一条简单消息。

如何调试语音指令模块

在某些情况下,语音指令模块可能不会响应您的语音指令。请检查以下内容:

  1. 如果是BiBoard V0主板,请将BiBoard 扩展板底部的拨动开关拨到语音命令(Voice command)侧。

  2. 说语音指令“打开音效”以检查机器人是否以 Do-Mi-So 旋律响应。有时,语音指令模块可能因 “安静点” 而意外设置为关闭状态。

  3. 如果模块在播放声音时没有发出任何声音,请说出“嘀-嘀-”以切换到中文模式。您可以尝试不同的音调和速度说出“嘀-嘀-”。如果不在中文模式,机器人会响应“切换中文”。如果已经在中文模式,它就不会再做出语音响应了。

  4. 如果语音模块仍然没有发出任何声音,您可以尝试使用我们的软件工具重置它。 移动应用: 从手机App 1.2.0 版本开始,您可以使用复合代码创建一个新按钮:

    ^X65,99;!1000;X65,97;!1000;X65,98 将语音模块重置为中文模式。

高级用法

理解背后原理

  1. 将语音指令模块中麦克风收集到的语音命令转换为串口指令。

  2. 通过软串口端口 Serial2,发送串口指令到主控板 MCU 。

  3. MCU收到串口指令后, 将其解析为相应的技能命令,最后根据技能命令,程序中反应模块控制机器人相应地做出反应。

下载测试程序

  • NyBoard 测试程序位于 GitHub 上的 OpenCat 项目仓库中(具体路径:OpenCat/ModuleTests/testVoiceCommander)。您可以访问我们的 GitHub 仓库 https://github.com/PetoiCamp/OpenCat 下载完整代码,如图所示:

  • BiBoard 测试程序位于 GitHub 上的 OpenCatEsp32 项目仓库中(具体路径:OpenCatEsp32/ModuleTests/testVoiceCommander)。您可以访问我们的 GitHub 仓库 https://github.com/PetoiCamp/OpenCatEsp32 下载完整代码,如图所示:

上传测试程序

测试程序 testVoiceCommander.ino,可以用来查看发送到 MCU 的每个串口指令包括如果你已经录制了的自定义语音指令),以NyBoard为例,使用USB数据线及USB上载器连接电脑与主板,选择正确的串口名称,然后点击“上传”按钮为主板上传程序,如下图所示:

您可以通过打开串口监视器来检查每个语音指令的原始返回值。

在您对机器人说出语音指令后,这些返回值(XA11XA21kup)是发送到主控板 MCU 的相应串口指令。第三个数字(11 或 21)是一个不可见字符。为了理解它,我们将其转换为数值并打印出来。

如何设计新的反应技能

为了提高语音模式中机器人的自定义语音控制命令利用率,您可以修改自定义指令字符串列表(customizedCmdList[])为实际动作响应的技能名称。

  • 使用任务队列创建动作序列,请参考以下源代码(voice.h) :

    "qc-2:0>kclap:1000>kpickF:1000>"   // 开头用q表示是任务队列;技能由串口指令和延时时长组成,
                                       // :前面串口指令,:后面是延时时长,单位是毫秒;
                                       // 技能与技能之间用 > 分隔
  • 使用技能创作坊创作新技能,并将自定义语音指令绑定到新技能

    1. 修改 voice.h文件以将自定义语音命令绑定到新技能:将'k'加上新技能名称插入到字符串变量中(例如, customizedCmdList[]中的第一个字符串,对应您想绑定第一个自定义语音指令)

Last updated