0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

eeDesigner ? 来源:11 ? 作者:111 ? 2024-05-07 14:51 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过对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所示。

wKgaomY5z2GAa0WMAADUZj2YrR4728.jpg

图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所示。

wKgZomY5z2SAZ15CAA59oUUTFB4768.gif

图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;

wKgaomY5z2eAOIohABjreAfi1K8099.gif

图3.

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

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

wKgZomY5z2iAW2lBAACHu8BhatQ404.jpg

图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;

wKgZomY5z2uAdwomAADg8mGeXes569.jpg

图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"。确保你不碰"沉默"或"未知"的标签。

wKgaomY5z26ALsvMAAfmw-KeQaM101.gif

图6.

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

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

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

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

wKgaomY5z3OAffFDAADbkUsywBw091.jpg

图7.

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

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

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

wKgZomY5z3WAaeAqAACljt0pTbc919.jpg

图8.

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

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

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

wKgaomY5z3eATI6HAACN1CK_4VU391.jpg

图9.

我们的马达驱动电路

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

审核编辑 黄宇

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

    关注

    213

    文章

    29952

    浏览量

    214496
  • BLE
    BLE
    +关注

    关注

    12

    文章

    708

    浏览量

    64953
  • 语音控制
    +关注

    关注

    5

    文章

    503

    浏览量

    28919
  • Arduino
    +关注

    关注

    190

    文章

    6501

    浏览量

    193121
  • TinyML
    +关注

    关注

    0

    文章

    43

    浏览量

    1611
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    伺服电动缸人形机器人中的应用

    将伺服电机自身优势转变成精确速度控制、精确位置控制和精确推力控制,从而实现高精度直线运动。这种特性使其成为人形机器人的核心运动部件,特别是
    发表于 02-06 09:04

    智能语音机器人

    ` 本帖最后由 星希望532 于 2015-12-2 20:06 编辑 作品名称:基于微型操作系统的智能多平台控制语音机器人http://v.youku.com/v_show
    发表于 12-02 19:08

    机器人语音需求

    本帖最后由 NAO语音外包 于 2017-6-28 09:19 编辑 现在亚马逊Echo音箱很火爆,根据调研结果,可以机器人上,嵌入式板上集成语音功能,包含了
    发表于 06-28 09:13

    嵌入式系统机器人中的应用

    10亿美金的技术高度密集移动机器人,采用的是VxWorks 操作系统,它可以不与地球联系的情况下自主工作。下面从运动控制系统、远程控制、视
    发表于 07-06 11:08

    超声波传感器机器人中的应用

    做到实时控制,并且测量精度方面能达到工业实用的要求,因此移动机器人的研制上也得到了广泛的应用。为了使移动机器人能自动避障行走,就必须装备
    发表于 08-09 15:19

    现代机器人中有什么传感器?

    控制和通信 IC 的发展实现下一代的机器人中起到重要作用。然而,这些复杂的现代机器人的核心是许多新的、小型化和低成本的传感技术的出现与融合。对实现下一代
    发表于 07-31 07:46

    怎么设计基于DSP和FPGA的机器人声控系统

    机器人听觉系统主要是对人的声音进行语音识别并做出判断,然后输出相应的动作指令控制头部和手臂的动作,传统的机器人听觉
    发表于 08-21 07:51

    怎么设计基于DSP和FPGA的机器人声控系统

    机器人听觉系统主要是对人的声音进行语音识别并做出判断,然后输出相应的动作指令控制头部和手臂的动作,传统的机器人听觉
    发表于 08-30 08:23

    工业机器人中面对的控制问题是什么

    刚开始接触机器人的时候,我师兄的机器人代码里死活找不到有关控制计算的函数,作为常年和控制框图打交道的我,很是疑惑
    发表于 06-28 09:29

    工业机器人中有哪些控制问题

    工业机器人中的伺服驱动的目的是什么?工业机器人中的关节内部驱动结构是怎样构成的?
    发表于 10-11 08:37

    浅谈儿童陪护机器人

    儿童陪护机器人中得到了广泛应用。 儿童陪护机器人中,步进电机芯片主要用于转动控制。在此过程中,控制器通过对步进电机芯片输出的脉冲信号进行
    发表于 05-11 15:12

    语音合成技术智能机器人中的应用

    语音合成技术智能机器人中的应用!资料来源网络,如有侵权,敬请原谅!
    发表于 12-25 09:51 ?8次下载

    机器人设计教程之机器人控制和决策子系统

    本文档的主要内容详细介绍的是机器人设计教程之机器人控制和决策子系统。主要内容包括了:机器人典型控制
    发表于 12-25 11:40 ?25次下载
    <b class='flag-5'>机器人</b>设计教程之<b class='flag-5'>机器人</b><b class='flag-5'>控制</b>和决策<b class='flag-5'>子系统</b>

    语音识别技术智能语音机器人中的应用

    语音识别技术智能语音机器人中的应用,一般语音机器人的设计开发主要着眼于“能听会说”,力图利用
    的头像 发表于 06-12 11:24 ?5927次阅读

    探讨 GaN FET 人形机器人中的应用优势

    :探讨人形机器人中的应用优势.pdf 人形机器人系统挑战 :人形机器人集成多个子系统,其中伺服
    的头像 发表于 02-14 14:33 ?968次阅读
    探讨 GaN FET <b class='flag-5'>在</b>人形<b class='flag-5'>机器人中</b>的应用优势