分拣机器人原理,如何利用TinyML实现语音识别机器人车的设计

2022-05-22
立体仓库分拣机器人

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

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

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

什么是UART串​​行通信?

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

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

2.0Arduino文本代码修改

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

4.0预期结果

什么是UART串​​行通信?

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

举一个具体的例子:

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

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

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

TXD-引脚8

分拣机器人是什么样子的

RXD-引脚10

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

垃圾分类分拣机器人简介

RX0-D0

TX0-D1

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

Wio终端到uKit探索-TXD到RXD

Wio终端到uKit探索-RXD到TXD

我将详细解释软件编程如何在3.0ProgramtheRobotCar(uKitExplore-ArduinoMega2560based)上完成。

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

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

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

1.创建“唤醒词识别”模型

2.数据采集

3.培训和部署

4.编程与模型使用

点击左中嵌入式机器学习框上的“模型创建”。然后选择“Wake-UpWordsRecognition”,如下图。根据需求输入模型名称。

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

第2步:数据采集

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

智能分拣机器人功能

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

hiwio删掉

分拣机器人有哪家企业制造

其他词改成停止

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

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

垃圾分拣机器人发展历史

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

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

第3步:培训和部署

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

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

设置参数:

训练周期数,

学习率

最小置信度

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

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

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

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

第4步:编程和模型使用

好的,现在我们完成了使用UART通信协议将人工智能与机器人集成的模型和有趣的部分。

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

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

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

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

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

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

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

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

“背景”。命令是‘0’

2.0Wio终端Arduino文本代码修改

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

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

我们在引脚8和10上提供了TX/RX引脚,可用于连接到另一块电路板。

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

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

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

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

复制EdgeImpulseTinyMLArduino库

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

找到与Arduino文本代码顶部的EdgeImpulse头文件具有相同编号的文件夹名称。

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

修改函数

改为将函数修改为。

上传代码

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

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

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

我们将对基于uKitExplore的RobotCar进行编程。

uKit简介探索

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

uKitExplore是UBTECHRobotics制造的机器人套件,它基于Arduino生态系统(芯片组为Arduino2560)。

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

编程uKitExplore以读取UART数据

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

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

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

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

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

物流分拣机器人logo

收到命令‘0’,它也会停止。

上传代码

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

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

智能分拣机器人市场需求广州高速分拣机器人快递分拣机器人缺点