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

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

3天内不再提示

如何在ESP32上使用代码运行TensorFlow模型?

电子设计 来源:电路城 作者:电路城 2021-04-27 14:54 次阅读

该项目使用在ESP32上运行的TensorFlow Lite创建一个语音控制的机器人。它可以响应简单的单字命令:“左”,“右”,“前进”和“后退”。

硬件部件:

乐鑫ESP32S× 1个

伺服模块(通用)× 2

通用车轮× 2

Gerneric USB移动电源× 1个

I2S麦克风板× 1个

软件应用程序和在线服务:

PlatformIO IDE

我在Google的Commands数据集上使用TensorFlow训练了一个模型。其中包含大约20个单词,我选择了一个很小的单词子集-足以控制机器人的单词,但数量不多,以至于模型变得难以管理。

为了生成训练数据,我们将WAV文件加载到其中,并从每个文件中提取频谱图。

为了获得足够的数据用于命令词,我已经多次重复这些词,以改变音频的位置并添加随机噪声-这为我们的神经网络提供了更多训练数据,并应该有助于其推广。

几个单词-前进和后退的示例更少,因此我更经常重复这些示例。

我最后得到了一个相当简单的卷积神经网络,其中包含2个卷积层,然后是一个完全连接的层,然后是一个输出层。

当我们试图识别多个不同的单词时,我们使用“ softmax”激活函数,并使用“ CategoricalCrossentropy”作为我们的损失函数。

训练模型后,我得到的训练数据准确度不到92%,而验证数据的准确度则超过92%。测试数据集为我们提供了类似的性能水平。

查看混淆矩阵,我们可以看到它主要是将单词误分类为无效单词。这对于我们的用例来说是相当不错的,因为这应该意味着机器人会误判误报而不是误报。

由于模型似乎不适合,我已经在完整的数据集上对其进行了训练。这给了我们大约94%的最终精度,而在混淆矩阵上我们看到了更好的结果。但是,可能会有些过度拟合。

对于实际的机器人,我构建了一个非常简单的两轮机器人。为了驱动车轮,我使用了两个连续的伺服系统和小型动力单元。它具有相当宽的轴距,因为带有ESP32的面包板非常大。

为了在ESP32上运行TensorFlow模型,我使用了TensorFlow Lite。我将其包装在自己的代码中,使其更易于使用。

要读取音频,我们使用I2S-它可以从模拟麦克风的内置ADC读取,也可以直接从I2S数字麦克风读取。

命令检测器由一个任务运行,该任务等待音频样本可用,然后为命令检测器提供服务。

我们的命令检测器将音频数据后退一秒钟,获取频谱图,然后运行预测。

为了提高检测的鲁棒性,我们在多个音频片段上对预测进行了采样,并且还拒绝了在先前检测的一秒钟内发生的任何检测。

如果我们检测到命令,则将其排队等待命令处理器处理。

我们的命令处理器运行一个任务,该任务侦听此队列中的命令。

当命令到达时,它将更改发送到电动机的PWM信号,以停止电动机或设置所需的方向。

为了向前移动,我们将两个电机都向前驱动,对于向后,我们将两个电机都向后驱动。对于左,我们反转左电动机并向前驱动右电动机,而对于右,我们进行相反的,右电动机反向,左电动机向前。

对于我们的连续伺服器,1500us的占空比将使它们停止,低于此值应使它们反向,而高于此值将使它们向前驱动。

我略微调整了右马达正向值的值,因为它的旋转速度不如左马达快,这导致机器人转向一侧。

请注意,因为我们有正确的电机上下颠倒驱动它,所以我们将其反向运行,而将其向后驱动,则我们将其向前驱动。

您可能需要校准自己的电动机才能使机器人直线运动。

它运作良好!

它偶尔会混淆单词并左右混合。
责任编辑:pj

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

    关注

    206

    文章

    26971

    浏览量

    201289
  • 检测器
    +关注

    关注

    1

    文章

    809

    浏览量

    47281
  • 数据
    +关注

    关注

    8

    文章

    6509

    浏览量

    87555
  • 频谱
    +关注

    关注

    7

    文章

    846

    浏览量

    45127
收藏 人收藏

    评论

    相关推荐

    基于ESP32C3运行RT-THREAD

    ESP32上面运行 RT-THREAD.
    的头像 发表于 06-25 07:58 8439次阅读
    基于<b class='flag-5'>ESP32</b>C3<b class='flag-5'>运行</b>RT-THREAD

    怎么运行Faster RCNN的tensorflow代码

    如何运行Faster RCNN的tensorflow代码
    发表于 06-15 09:25

    何在esp32板子实现自己的web_radio

    esp32开发板实现的web_radio,基于wm8978 codec芯片前言下载编译硬件连接烧写测试TODO前言本文介绍了如何在esp32板子
    发表于 08-12 06:49

    何在ESP32使用MicroPython

    ESP32的原有程序,擦除成功后下载MicroPython固件,并使用简单的“Hello World(你好,世界)”程序进行测试。安装esptool打开命令行,输入`pip install esptool此操作将在系统安装esptool,之后将通过python环境下
    发表于 01-11 07:58

    Mali GPU支持tensorflow或者caffe等深度学习模型

    好的Tensorflow或者Caffe模型部署到ARM平台Mali-G71/72 GPU运行,而不重新OpenCL编写代码,但没有看见相关
    发表于 09-16 14:13

    求助,如何在ESP32获得一个微妙级延时?

    求助,如何在ESP32获得一个微妙级延时?
    发表于 02-16 07:20

    使用Arduino SDK进行编码并将代码ESP8266和ESP32代码不工作是怎么回事?

    。以下代码在我的 ESP32 运行良好,但在我的 ESP8266 上会导致 CPU 崩溃。我遇到问题的区域是我试图获取 IP 地址的第四个
    发表于 02-24 08:26

    何在Windows 10启动/设置ESP8266/ESP32 RTOS环境?

    我在 Arduino IDE 上有一些关于 ESP8266/ESP32 的经验。 请告诉我,如何在 Windows 10 启动/设置 ESP
    发表于 05-19 10:33

    ESP32教程之如何在Windows系统上搭建开发环境

    本文档的主要内容详细介绍的是ESP32教程之如何在Windows系统上搭建开发环境。
    发表于 12-13 15:34 40次下载
    <b class='flag-5'>ESP32</b>教程之如<b class='flag-5'>何在</b>Windows系统上搭建开发环境

    ESP32芯片模组机器学习算法运行的应用

    ESP32以其强大的无线通信能力、领先的低功耗和高性价比等特性,已成为各类AIoT应用的理想选择。 用户使用Arduino框架和EdgeImpulse平台,只需添加几行代码,即可在ESP32
    发表于 03-15 17:23 984次阅读

    何在ESP32/ESP8266上使用MicroPython

    在本教程中,我们将了解 MicroPython,它与 Python 有何不同,以及如何在 ESP32/ESP8266 上开始使用 MicroPython。此外,我们将看到一个 LED 闪烁的示例项目来演示 MicroPython
    发表于 08-19 15:09 1.2w次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266上使用MicroPython

    使用Visuino DIY如何在M5StickC ESP32上显示时间

    电子发烧友网站提供《使用Visuino DIY如何在M5StickC ESP32上显示时间.zip》资料免费下载
    发表于 11-21 09:36 0次下载
    使用Visuino DIY如<b class='flag-5'>何在</b>M5StickC <b class='flag-5'>ESP32</b>上显示时间

    ESP32乐鑫开发板

    设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有ESP32芯片的社区。ESP32-C2的ROM代码经过优化,减少了对闪存的需求,ESP32-C2还延续了
    的头像 发表于 12-05 16:00 1209次阅读

    使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人脸检测

    电子发烧友网站提供《使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人脸检测.zip》资料免费下载
    发表于 06-13 15:28 0次下载
    使用MTCNN和用于<b class='flag-5'>ESP32</b>-S3的<b class='flag-5'>TensorFlow</b> Lite进行人脸检测

    何在ESP32中使用PWM

    ESP32 SoC 满载了非常有用的外设,PWM 就是其中之一。是的。ESP32 的芯片中有一个专用的 PWM 硬件模块。脉宽调制或简称PWM是一种成熟且广泛使用的供电技术。
    的头像 发表于 07-13 11:14 1315次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>ESP32</b>中使用PWM