语音指令模块
Last updated
Last updated
使用此模块,您可以通过语音控制 Petoi 机器人执行各种技能,无需唤醒词。目前,该模块支持两种语言(中文和英语)的 40 个固定语音命令和通过录制任何声音片段创建的 10 个自定义命令。
该模块可以使用线缆连接到 NyBoard 的 Grove 接口(包含D8、D9两个引脚):
您可以使用 Petoi 桌面应用程序中的 固件上载 上传程序。
您可以使用 Arduino IDE 上传和修改源代码。
模块功能代码已集成到 OpenCat 项目中。如下图所示,在 OpenCat.ino 中将代码行 #define VOICE
的注释符去掉。然后将程序上传到机器人NyBoard主板上。机器人将工作在语音模式下。此程序将允许机器人根据语音指令进行操控。以Bittle为例,代码设置如下图所示:
BiBoard V0 此模块内置在 BiBoard V0 的扩展板中,如下图所示:
BiBoard V1 此模块直接内置在BiBoard V1主板上,如下图所示:
您可以使用 Petoi 桌面应用程序中固件上载来上传程序。
请选择正确的产品类型、主板号和串口名称。模式选择标准,点击升级固件按钮。例如,Bittle、BiBoard_V0_2、COM3 如下:
您也可以使用 Arduino IDE 上传程序(OpenCatEsp32.ino)。
使用最新的 OpenCatESP32.ino
代码,激活与当前机器人相应的产品宏定义、主板型号宏定义,并将其他的产品宏定义,主板型号宏定义语句注释掉。如果机器人带有机械臂,请激活此行宏义语句:
否则请用//
将此行代码注释。
例如,当前机器人是Bittle, 主板型号是BiBoard_V0_2,不带机械臂,代码修改如下图所示:
上传程序后,默认即为语音模式。打开串口监视器后,可以输入串口指令“X?”后,按下回车键,查询当前所在工作模式。如果是其他模式,请并输入串口指令“ XA
”后,按下回车键,切换到语音模式。
使用预定义的语音指令 您可以参考以下语音指令列表:
串口指令 有 7 个相关的串口配置命令;您可以在串口监视器中的文本框中输入上述命令后,按 回车键 将指令发送给机器人。
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
以启用语音指令模块。
当机器人在中文模式下工作时,您可以说语音指令“开始学习”(或在串口监控器中输入 XAe)进入到自定义语音指令模式,并根据语音提示依次录制您的语音指令,如需结束录入语音指令,请说语音指令“结束学习”(或在串口监控器中输入 XAf),即可退出自定义语音指令模式。
如果模块不在中文模式,您可以说 “嘀-嘀-”(或在串行监视器中输入序列命令 XAb
)以切换到中文模式。
您最多可以录制 10 个语音指令。
退出自定义语音指令模式后,说出其中一个已录制的语音命令以触发机器人做出反应技能。
说语音指令“清除学习数据”,将一次性删除所有的自定义语音指令。
在OpenCatEsp32工程代码中的 voice.h
文件中,我们已定义好由10个字符串组成的技能列表(customizedCmdList[]
)作为自定义语音指令的响应技能(比如对于产品 Bittle 只有前五个可以看到机器人的实际反应,因为它们是符合串口协议的串口指令):
比如:kpu1
是动作技能单手俯卧撑的串口指令, kmw
是动作技能滑步的串口指令,m0 80 0 -80
是一条控制关节动作(左右摇头)的串口指令,b14,8,14,8,21,8,21,8,23,8,23,8,21,4
是一条播放旋律串口指令。
如果想让机器人使用上述自定义回复,您需要说“开始学习”,进入自定义语音命令模式,录制5个语音指令,比如录入以下5条指令:“演示一下”(上一次从技能创作坊中导出的技能动作)、“单手俯卧撑”、“摇头”、“滑步”、“小星星”),然后说“结束学习”退出自定义语音命令模式。
如果您已录制语音命令,相应的响应技能字符串不是符合串口协议的串口指令。例如 6th
,则机器人没有实际技能演示效果;当您说出第6条语音指令时,它只会在串口监视器上打印出一条简单消息。
在某些情况下,语音指令模块可能不会响应您的语音指令。请检查以下内容:
如果是BiBoard V0主板,请将BiBoard 扩展板底部的拨动开关拨到语音命令(Voice command)侧。
说语音指令“打开音效”以检查机器人是否以 Do-Mi-So 旋律响应。有时,语音指令模块可能因 “安静点” 而意外设置为关闭状态。
如果模块在播放声音时没有发出任何声音,请说出“嘀-嘀-”以切换到中文模式。您可以尝试不同的音调和速度说出“嘀-嘀-”。如果不在中文模式,机器人会响应“切换中文”。如果已经在中文模式,它就不会再做出语音响应了。
如果语音模块仍然没有发出任何声音,您可以尝试使用我们的软件工具重置它。 移动应用: 从手机App 1.2.0 版本开始,您可以使用复合代码创建一个新按钮:
^X65,99;!1000;X65,97;!1000;X65,98
将语音模块重置为中文模式。
将语音指令模块中麦克风收集到的语音命令转换为串口指令。
通过软串口端口 Serial2,发送串口指令到主控板 MCU 。
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上载器连接电脑与主板,选择正确的串口名称,然后点击“上传”按钮为主板上传程序,如下图所示:
您可以通过打开串口监视器来检查每个语音指令的原始返回值。
在您对机器人说出语音指令后,这些返回值(XA11
或 XA21kup
)是发送到主控板 MCU 的相应串口指令。第三个数字(11 或 21)是一个不可见字符。为了理解它,我们将其转换为数值并打印出来。
为了提高语音模式中机器人的自定义语音控制命令利用率,您可以修改自定义指令字符串列表(customizedCmdList[]
)为实际动作响应的技能名称。
使用任务队列创建动作序列,请参考以下源代码(voice.h
) :
使用技能创作坊创作新技能,并将自定义语音指令绑定到新技能
修改 voice.h
文件以将自定义语音命令绑定到新技能:将'k
'加上新技能名称插入到字符串变量中(例如, customizedCmdList[]
中的第一个字符串,对应您想绑定第一个自定义语音指令)
在手机App中一个名为“英语”的命令按钮,使用代码: X65,97
X65,99
或在串口监视器中输入 XAc
可启用语音模块。
X65,98
或在串口监视器中输入 XAb
等同于说“嘀-嘀-”,但排除了声音未被识别的可能性。然后您可以尝试再次说“打开音效”。
使用 技能创作坊 设计新技能,然后将其到 InstinctX.h
(X表示产品名称,比如BittleESP, NybbleESP)
桌面应用程序: 从版本 1.2.1 开始,您可以使用调试器重置语音指令模块。