TinyML在机器人中的应用——创建语音控制机器人子系统

描述

通过对TinyML领域基础概念的坚实理解,我们将把我们的知识应用到现实生活中的项目中。nbsp;

在深入研究这个项目之前,我想说明一下,这个项目将使用现有的数据集,Google Colabs和由Pete Warden和哈佛大学TinyML团队开发的Arduino代码。为了在我们的微控制器单元(MCU)上部署,他们的资源将为我们提供:

访问数据集

模型架构

培训脚本

量化脚本

评价工具

Arduino代码

作为免责声明,我们没有开发绝大多数代码,我们不拥有它的权利。nbsp;

所有的说和做,这个项目假设编程和电子的基本理解。

TinyML项目-构建语音命令机器人子系统

在这个项目中,我们将构建一个简单的机器人子系统,使用机器学习来响应语音命令。微控制器将收集来自麦克风的输入,使用ML来监听唤醒词,如“向前”和“向后”,然后在命令的方向上驱动一个小型直流电机。

由于已经有很多关于用微控制器控制电机的好信息,本文将主要集中在演示如何:  

使用现有资源使用TensorFlow Lite for Microcontrollers训练ML模型

量化并将模型部署到Arduino Nano 33 BLE Sense

在Arduino上运行本地推理,并让它控制由标准电池电源(AA或9 V)供电的电机

带声控电机的TinyML机器人子系统的BOM

在下面的表1中,您将找到此项目的物料清单(BOM)。

表1.

 BOM例如TInyML声控电机项目。整个项目将花费不到30美元。

部分 例如 费用 * 美元 注意到
Arduino Nano 33 BLE Sense 链路 二十二块五 这是一个标准的TinyML开发设备。
L293D Dual
H-Bridge Motor Driver
链路 四元五角 我用这个IC,因为我已经有它躺在周围。在您的项目中,这可以由您选择的H桥代替。
直流电机L 链路 一块九毛五 我使用的是Elegoo Uno R3入门套件中的直流电机。任何便宜的5 VDC电机将为这个项目工作。
3x 1k电阻器   0.30美元  
4x AA电池和连接器 链路 0.58美元 这个项目的输入电压范围可以从4.5到21 V。在我的项目中,我使用了4节AA电池(~6 V),因为我有它们,但在这个范围内的9V或其他电源将工作。

(* 注:所有费用均自2021年9月起计算)

对于这个特定的项目,我从手头已有的部件中选择了大部分部件,如图1所示。

BLE

图1.

 我在这个项目中使用的部件

在这个项目中,你将有很大的自由选择其他类似的部分来复制这个项目。nbsp;

设置TinyML软件Arduino纳米33 BLE感

要在我们的Arduino Nano 33 BLE Sense上运行TinyML脚本,我们需要安装一些包和依赖项。如果您的

安装完成后,我们需要安装Arduino Nano 33 BLE Sense的板文件。要执行此操作,请从IDE中转到Tools → Board → Boards Manager。在这里,搜索“mbed nano”并安装“Arduino Mbed OS Nano Boards.“

如下图2所示。

BLE

图2.

 我们需要安装Nano 33 BLE Sense的板文件

在此之后,我们需要安装此项目所需的库。要执行此操作,请转到工具→管理库。从那里,搜索并下载以下库:

Arduino_TensorFlowLite

哈佛_TinyMLx

完成了这些,我们就可以开始这个项目了!

步骤1:使用TensorFlow Lite训练机器学习模型 

一般来说,ML工作流将从收集和标记数据集开始开始,然后从头开始设计模型架构。 为了时间和简单起见,我们将通过利用一些现成的数据集和预先训练的关键字识别模型来“作弊”,这两个模型都是由Pete Warden开发的。 为了利用这些资源并训练我们的模型,我们将使用哈佛大学TinyML团队开发的Google Colab中的脚本。nbsp;

Google Colab可以在这里找到。

首先,确保您在Colab中使用图形处理单元(GPU)运行时(如图3所示),因为这将显著加快训练时间。一旦你这样做了,所有的代码都可以按原样使用了。nbsp;只需点击每个单元格左上角的黑色"运行"按钮,按顺序运行每个单元格。& nbsp;

BLE

图3.

 您必须确保在Colab中使用GPU运行时

我们使用的模型架构是tiny_conv,我们将总共训练15,000步。前12,000个将使用0.001的学习率,最后3,000个将使用0.0001的学习率。此外,我们还将训练模型来理解“forwards”和“backwards”这两个词,Warden的关键字定位(KWS)数据集已经包含了这两个词。  这可以在图4中看到。

BLE

图4

.这是Colab中的一部分,我们在这里定义要训练的单词、训练参数和模型架构

请记住,培训可能需要几个小时才能完成,因此请确保您的计算机已插入电源,并且您的互联网连接稳定。

步骤2:量化和评估ML模型

训练完成后,您将到达Colab中标记为步骤2的点。这里是量化开始的地方。

首先,我们冻结我们的模型,这是将所有相关的训练结果(图,权重等)组合到一个文件中进行推理的过程。一旦我们有了一个冻结的模型,我们将把模型转换成一个TFLite模型。哈佛建立的脚本使这个过程相对容易,输出的TFLite模型应该是完全量化的。最终的模型大小应该在20 kB以下。

当完全转换后,Colab有脚本可用于比较量化和非量化模型之间的准确性。如果一切正常,准确度应该几乎相同。

步骤3:将机器学习模型部署到Arduino

在继续之前,我想让你知道你可以在这里找到我的完整代码作为参考。

一旦我们有了一个完全量化和转换的TensorFlow Lite模型,我们需要将其部署到Arduino。我们将修改哈佛预先存在的micro_speech示例,您可以在Arduino IDE中找到:文件→示例→不兼容→哈佛_TinyMLx → micro_speech。nbsp;

您可能会有点不知所措,因为这段代码中有很多内容;但是,出于本项目的目的,我们不需要关注其中的大部分内容。 

首先,我们必须输入新的TFLite Micro模型来代替当前在micro_speech示例中使用的模型。nbsp;在Colab的最后一个单元格中,我们应该输出一个十六进制字符的大矩阵,如图5所示。这是我们的TensorFlow Lite for Microcontrollers模型,将用于我们的Arduino代码。nbsp;

BLE

图5.

 Google Colab输出的TensorFlow Lite Micro模型片段

在micro_features_model.CPP文件中,仅复制并粘贴Colab中的十六进制字符,以取代文件中已有的字符。在Colab代码的最底部,应该有一行写着unsigned int g_model_len,后面跟着一个数字。最后一件事是从Colab复制这个数字,并将其插入Arduino代码文件底部当前用于const int g_model_len的数字。

在此之后,与模型相关的唯一更改是在micro_features_micro_model_settings.CPP文件中。如图6所示,将类别标签"yes"和"no"更改为"forwards"和"backward"。确保你不碰"沉默"或"未知"的标签。

BLE

图6. 

我们必须改变我们的新单词的预期类别标签

步骤4:解释推理并编写电机驱动程序代码

此时,TFLite Micro模型应该按预期运行,现在我们需要驱动电机以响应TinyML推理输出。为此,我们将修改arduino_command_responder. CPP文件。

如图7所示,在文件的顶部,我们将添加几个#define语句来定义Arduino上的哪些引脚将连接到电机驱动器上的哪些引脚。对于我们的项目,我们将使用D2作为ENABLE信号,D3作为Driver1A输入,D4作为Driver2A输入。请确保还将这些引脚设置为RespondToCommand()函数中的pinMode()函数的输出。

BLE

图7. 

我们需要定义引脚,将其设置为输出,并编写简单的motorCTRL函数。

从那里我们可以定义我们的运动控制功能。这个函数接受一个速度(我们不会为了这个项目的目的而改变它),以及一个Driver1A和Driver2A的逻辑值。基本上,如果驱动程序1A是高,驱动程序2A是低,电机将在一个方向旋转。如果反过来,我们的马达就会朝相反的方向旋转。

现在剩下的唯一事情就是更改代码中已经存在的命令响应。如图8所示,我们将更改命令响应,以便如果找到的命令的第一个字符是"f"(即找到的命令是"Forward"),它将使电机向前旋转。我们对"后退"命令执行相同的操作。

BLE

图8. 

我们将根据ML模型找到的命令控制电机向前或向后移动。

步骤5:构建电机电路-电机驱动器电路

有了所有的软件的方式,我们现在可以建立我们的电机驱动器电路。上面列出了BOM,示意图如下图9所示。

BLE

图9. 

我们的马达驱动电路。

我们使用4.5到21 V的电压源为Arduino和L293D供电。接线中的D4连接到电机驱动器2A输入端,D3连接到电机驱动器1A输入端,D2连接到EN 1,2。我们在每个信号上都有一个1 k Ω下拉电阻,以确保始终定义我们的状态,为了安全起见,我们还有一个0.1 μ F电容用于去耦。

审核编辑 黄宇

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

全部0条评论

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

×
20
完善资料,
赚取积分