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

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

    关注

    210

    文章

    28152

    浏览量

    206104
  • 检测器
    +关注

    关注

    1

    文章

    857

    浏览量

    47643
  • 数据
    +关注

    关注

    8

    文章

    6854

    浏览量

    88775
  • 频谱
    +关注

    关注

    7

    文章

    876

    浏览量

    45570
收藏 人收藏

    评论

    相关推荐

    基于ESP32C3运行RT-THREAD

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

    ESP32-WROOM-32电后不会运行的原因?

    最近我们在调试ESP32-WROOM-32板子是发现一个问题。代码是完整下载到芯片里并且是可以运行的。但是,但板子电后,ESP32芯片却不
    发表于 06-05 08:05

    请问ESP32如何运行TensorFlow模型

    请问ESP32如何运行TensorFlow模型
    发表于 07-09 07:30

    何在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

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

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

    关于C程序源代码是如何在硬件运行的?

    C程序源代码是如何在硬件运行的?
    的头像 发表于 02-05 12:37 2823次阅读

    ESP32模组的主要特性

    WT-ESP32-DevKitC V4是一款基于ESP32的小型开发板,集WIFI+蓝牙方案于一体,板模组绝大部分管脚均已引出,开发人员可根据实际需求,轻松通过跳线连接多种外围器件,或将开发板直接
    发表于 11-04 14:54 3926次阅读

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

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

    何在ESP32/ESP8266使用MicroPython

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

    在MaaXBoard RT运行几乎任何TensorFlow模型

    电子发烧友网站提供《在MaaXBoard RT运行几乎任何TensorFlow模型.zip》资料免费下载
    发表于 10-31 10:28 2次下载
    在MaaXBoard RT<b class='flag-5'>上</b><b class='flag-5'>运行</b>几乎任何<b class='flag-5'>TensorFlow</b><b class='flag-5'>模型</b>

    使用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><b class='flag-5'>上</b>显示时间

    使用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进行人脸检测

    ESP8266或ESP32的WiFi Webradio

    电子发烧友网站提供《ESP8266或ESP32的WiFi Webradio.zip》资料免费下载
    发表于 06-13 11:38 1次下载
    <b class='flag-5'>ESP</b>8266或<b class='flag-5'>ESP32</b><b class='flag-5'>上</b>的WiFi Webradio

    esp32esp8266代码共用吗

    本文将介绍ESP32ESP8266两款流行的微控制器在代码共用性方面的可能性与差异性。 一、引言 随着物联网技术的飞速发展,越来越多的智能设备开始进入我们的生活。其中,ESP32
    的头像 发表于 08-19 18:23 950次阅读