如何利用TinyML实现语音识别机器人车的设计

描述

  在本文中,我将在 Wio 终端上制作一个带有内置麦克风的声控机器人车,以通过 TinyML 识别行驶、停止和背景噪音。

  使用由 Edge Impulse 提供支持的 Codecraft 训练了一个唤醒词识别模型!

  在这篇详细的博客文章中,我将介绍以下内容:

  什么是 UART 串​​行通信?

  Wio终端和uKit之间的UART串行通信探索

  1.0 使用 Codecraft 训练嵌入式机器学习模型

  2.0 Arduino文本代码修改

  3.0 对机器人汽车进行编程(uKit 探索 - 基于 Arduino Mega 2560)

  4.0 预期结果

  什么是 UART 串​​行通信?

  通俗地说,UART 允许嵌入式设备(例如 Arduino)通过 TX(发送)和 RX(接收)线将数据发送到另一个 Arduino,如下所示。

  

嵌入式

  举一个具体的例子:

  Arduino UNO 没有内置的 WiFi,因此不可能做 IOT 相关的项目。通过了解基本的 UART 串​​行通信,我能够利用ESP8266/ESP32作为 Arduino UNO 的协处理器,以便从连接到 Arduino UNO 的传感器收集的数据将发送到 ESP8266/ESP32 发送转移到云平台,例如 Web 服务器、Blynk 或 FAVORIOT。

  Wio终端和uKit之间的UART串行通信探索

  Wio 终端的 TX 和 RX 引脚在引脚 8和10上可用。

  TXD - 引脚 8

  RXD - 引脚 10

  

嵌入式

  而对于 uKit Explore,引脚 D0 和 D1 上也有可用的 TX/RX 引脚。您可以在此处查看完整的 uKit 探索引脚排列

  RX0 - D0

  TX0 - D1

  

嵌入式

  对于硬件连接,基本上,您只需要如下连接:

  Wio 终端(引脚 8)到 uKit 探索(引脚 0) - TXD 到 RXD

  Wio 终端(引脚 10)到 uKit 探索(引脚 1) - RXD 到 TXD

  我将详细解释软件编程如何在 3.0 Program the Robot Car(uKit Explore - Arduino Mega 2560 based)上完成。

  第 1 步:使用 Codecraft 训练嵌入式机器学习模型

  在第一部分中,我们的目标是使用 Codecraft 平台创建一个嵌入式机器学习模型(语音识别)。

  使用 Codecraft 训练嵌入式机器学习模型涉及 4 个步骤。

  1.创建“唤醒词识别(内置麦克风)”模型

  2.数据采集(车载)

  3.培训和部署

  4.编程与模型使用

  创建“唤醒词识别(内置麦克风)”模型转到https://ide.tinkergen.com/。选择“(对于 TinyML)Wio 终端”。

  

嵌入式

  点击左中嵌入式机器学习框上的“模型创建”。然后选择“Wake-Up Words Recognition(内置麦克风)”,如下图。根据需求输入模型名称。

  

嵌入式

  点击确定,窗口会自动切换到“数据采集”界面。

  第 2 步:数据采集(车载)

  

嵌入式

  系统会自动为您创建 3 个默认标签(hi wio、background 和其他词)。

  除非您想为标签使用不同的名称,否则您可以不加任何更改地使用它。就我而言,我更改了两个默认标签,如下所示:

  hi wio 删掉

  其他词改成停止

  重要提示:现在,您必须记住更改默认数据采集程序上的标签以反映正确的修改标签

  

嵌入式

  连接 Wio 终端和上传数据采集程序。

  注意:您需要下载“ Codecraft Assistant ”才能在Codecraft在线IDE上连接和上传代码。

  数据采集​​:在右上角的超链接中,您将找到数据采集的分步介绍。按照说明根据修改后的标签收集数据。

  第 3 步:培训和部署

  点击“Training & Deployment”,您将看到如下图所示的模型训练界面。

  

嵌入式

  选择神经网络和参数。选择合适的神经网络大小:小、中、大

  设置参数:

  训练周期数(正整数),

  学习率(从 0 到 1 的数字)

  最小置信度(从 0 到 1 的数字)

  接口提供了50个训练周期的默认参数值,但是准确度不是很好。因此,我将训练周期更改为 100。

  

嵌入式

  点击“开始训练”。单击“开始训练”时,窗口将显示“正在加载。”!等待训练完成!

  观察模型性能以选择理想模型。在“模型训练报告”窗口中,您可以观察训练结果,包括模型的准确率、损失和性能。

  

嵌入式

  在“模型训练报告”窗口中,点击“模型部署”。部署完成后,单击“确定”进入“编程”窗口,这是我们将模型部署到 Wio 终端之前的最后一步。

  

嵌入式

  第 4 步:编程和模型使用

  好的,现在我们完成了使用 UART通信协议将人工智能(在本例中为机器学习)与机器人(机器人汽车)集成的模型和有趣的部分。

  这是从块编程接口创建的示例程序:

  

嵌入式

  我们使用 if-else 条件语句来评估标签的置信度。

  如果“go”的置信度大于0.8(80%),我会在串口终端打印“1”。

  如果“停止”的置信度大于 0.8(80%),我会在串口终端上打印“2”。

  否则,如果“背景”的置信度大于0.8(80%),我会在串口终端上打印“0”。

  好的,所以现在,只需记住 3 个不同的条件:

  “go” 》 0.8,命令为 ‘1’

  “停止”》 0.8,命令为“2”

  “背景”。命令是‘0’

  2.0 Wio终端Arduino文本代码修改

  好的,所以请注意以下两个重要发现,因为这将是我们项目的关键部分!

  您可以从 Wio Temrinal 的 40 针接头访问的串行线是 Serial1,而不是通常的 Serial,后者基本上通过串行终端显示输出。

  我们在引脚 8 和 10 上提供了 TX/RX 引脚,可用于连接到另一块电路板(本例中为 uKit 探索)。

  

嵌入式

  如果我们查看相应块代码的文本编码,您会注意到 Serial.print 没有使用 Serial1 行。因此,这导致我们进入第二步,即继续在 Arduino IDE 上进行编码以进行定制。

  

嵌入式

  切换到文本代码区域并复制文本代码

  在文本代码区域,按 CTRL + A 复制所有代码以选择所有代码。

  打开 Arduino IDE,创建一个新文件,按 CTRL+V 将代码粘贴到空草图中。继续以所需名称保存草图。

  

嵌入式

  复制 Edge Impulse TinyML Arduino 库

  导航到 C:\Users\《User_Name》\AppData\Local\Programs\cc-assistant\resources\compilers\Arduino\contents\libraries

  找到与 Arduino 文本代码顶部的 Edge Impulse 头文件具有相同编号的文件夹名称(在我的情况下为 47606)。

  

嵌入式

  复制整个 ei-project_47606 文件夹并将其粘贴到 C:\Users\《User_Name》\Documents\Arduino\libraries\

  

嵌入式

  修改 Serial.println 函数

  改为将 Serial.println 函数修改为 Serial1.println。

  

嵌入式

  上传代码

  确保您已安装 Wio 端子板支持包。如果没有,请参阅Seeed Wiki 上的“ Wio 终端入门”指南。

  在将代码上传到 Wio 终端之前,请确保选择了正确的板和 COM 端口。

  

嵌入式

  第 4 步:对机器人汽车进行编程(uKit 探索 - 基于 Arduino Mega 2560)

  我们将对基于 uKit Explore 的 Robot Car 进行编程。

  uKit 简介探索

  让我让您了解一下这个 uKit Explore 的内容。

  uKit Explore 是 UBTECH Robotics 制造的机器人套件,它基于 Arduino 生态系统(芯片组为 Arduino 2560)。

  “uKit Explore 有一个主控箱,配备 Arduino 开源平台,提供来自全球用户贡献的大量电子和编程学习资源。”

  

嵌入式

  编程 uKit Explore 以读取 UART 数据

  现在,我们需要对 Robo Car 进行编程,使其在收到来自 Wio Terminal 的命令“1”、“2”和“0”时根据不同的条件采取行动。

  这里的关键概念是,如果它包含任何数据,我们将需要让 uKit Explore继续侦听串行线。如果它确实包含串行数据,则串行读取数据并将其分配给一个变量。最后一步是我们将比较变量并执行不同的操作。

  对于我们的案例,当 uKit 探索

  收到命令“1”(go),RoboCar 将向前移动;

  收到命令‘2’(停止),它将停止;

  收到命令‘0’(背景),它也会停止。

  

嵌入式

  上传代码

  最后,我们将代码上传到板上。与往常一样,请确保在上传之前选择了正确的板和 COM 端口。

  最后,Robo Car 可以通过语音“go,go,go”激活,并通过“stopppps.。。。”或“background”停止。达到我们想要的目标!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分