Arduino 机器学习实战入门(下)

2019年11月03日 由 sunlei 发表 398066 0
前文回顾:Arduino 机器学习实战入门(上)

设置Arduino IDE


按照以下步骤设置Arduino IDE应用程序,该应用程序用于将推理模型上载到您的电路板,并在下一节中从电路板下载培训数据。因为我们需要在Arduino IDE中下载和安装特定的板和库,所以比使用Arduino Create web editor要多几个步骤。



  • 从https://arduino.cc/downloads下载并安装Arduino IDE

  • 打开刚刚安装的Arduino应用程序

  • 在Arduino IDE菜单中选择工具>板>板管理器…

  • 搜索“Nano BLE”并按下安装按钮

  • 安装需要几分钟时间

  • 完成后,关闭Boards Manager窗口




  • 现在转到库管理工具>管理库…

  • 搜索并安装Arduino_TensorFlowLite库

  • 接下来搜索并安装Arduino_LSM9DS1库:




  • 最后,将micro USB插入主板和计算机

  • 选择板工具>板> Arduino Nano 33 BLE

  • 选择端口工具>端口> COM5 (Arduino Nano 33 BLE)

  • 注意,您计算机上的实际端口名可能不同


如果需要帮助,Arduino网站上有更详细的入门故障排除指南。

从Arduino板上传输传感器数据


首先,我们需要获取一些训练数据。你可以通过USB数据线从Arduino板上获取传感器数据日志,你可以用笔记本电脑或个人电脑给板编程。

Arduino板运行小应用程序(也称为示意图),这些程序是由.ino格式的Arduino源代码编译而成,并使用Arduino IDE或Arduino Create在板上编程。

我们将使用一个预先制作好的草图IMU_Capture.ino,它执行以下操作:

  • 监控电路板的加速度计和陀螺仪

  • 触发检测电路板显著线性加速度的采样窗口

  • 以119Hz采样1秒,通过USB输出CSV格式数据

  • 回循环并监视下一个手势


我们选择从板上读取的传感器、采样率、触发阈值,以及我们是否将数据输出为CSV、JSON、二进制或其他格式,这些都可以在Arduino上运行的示意图中定制。在将数据输出到日志之前,还可以在设备上执行信号预处理和过滤——这一点我们可以在另一个博客中讨论。现在,您只需要上传草图并开始采样。

要在Arduino IDE中使用此草图对电路板进行编程:

  • 下载ino并在Arduino IDE中打开它

  • 用Sketch > Upload编译并上传到板上


从Arduino板上可视化实时传感器数据日志

完成这些之后,我们现在就可以看到黑板上的数据了。我们还没有捕获数据-这只是让你感觉一下传感器数据捕获是如何触发的,以及一个样本窗口有多长。这将有助于收集训练样本。

  • 在Arduino IDE中,打开串口绘图仪工具>串口绘图仪

  • 如果出现主板不可用的错误,请重新选择端口:

  • 工具>端口>端口名(Arduino Nano 33 BLE)

  • 拿起板子,练习你的击打和弯曲动作

  • 您将只看到一秒钟窗口的示例,然后等待下一个动作

  • 您应该会看到传感器数据捕获的实时图(参见下面的GIF)。


[caption id="attachment_46340" align="aligncenter" width="480"] Arduino IDE串行绘图仪将显示从板输出的CSV数据的实时图形[/caption]

当你完成时,一定要关闭串行绘图仪窗口——这很重要,否则下一步将无法工作。

获取手势训练数据


要将数据捕获为CSV日志以上载到TensorFlow,可以使用Arduino IDE>Tools>Serial Monitor查看数据并将其导出到计算机桌面:

  • 按下面板顶部的白色小按钮来重置面板

  • 一手拿起板子(以后拿起板子会触发采样)

  • 在Arduino IDE中,打开串口监控工具>串口监控

  • 如果出现主板不可用的错误,请重新选择端口:

  • 工具>端口>端口名(Arduino Nano 33 BLE)

  • 用手拿着板做一个出拳的手势(做的时候要小心!)

  • 以足够快的速度向外击打以触发捕捉

  • 缓慢回到空档位置,以免再次触发捕捉

  • 重复手势捕捉步骤10次或更多次以收集更多数据

  • 将数据从串行控制台复制并粘贴到名为csv的新文本文件中

  • 清除控制台窗口输出并重复上面的所有步骤,这次是在一个名为csv的文件中使用flex手势

  • 使向内弯曲足够快,以触发捕获,每次缓慢返回


注意,两个csv文件的第一行应该包含字段aX、aY、aZ、gX、gY、gZ



Linux提示:如果愿意,可以将传感器日志输出从Arduino直接重定向到命令行上的.csv文件。串行绘图仪/串行监视器窗口关闭后使用:
$ cat /dev/cu.usbmodem[nnnnn] > sensorlog.csv

训练TensorFlow


我们将使用谷歌Colab来训练我们的机器学习模型,该模型使用的是我们在前一节中从Arduino板上收集的数据。Colab提供了一个Jupyter notebook,允许我们在web浏览器中运行我们的TensorFlow训练。



Colab将指导您完成以下步骤:

  • 设置Python环境

  • 上传csv和flex.csv数据

  • 解析和准备数据

  • 建立和训练模型

  • 将训练后的模型转换为TensorFlow Lite

  • 将模型编码到Arduino头文件中


colab的最后一步是生成要下载的model.h文件,并将其包含在下一节的Arduino IDE手势分类器项目中:



让我们打开Colab中的笔记本,运行单元中的步骤- arduino_tinyml_workshop.ipynb

IMU数据分类


接下来我们将在Arduino IDE项目中使用之前章节中我们刚刚训练并从Colab下载的model.h文件:

1.在Arduino IDE中打开imu_classifier.ino。

2.在IDE中创建一个新选项卡命名为model.h。



3.打开model.h选项卡并粘贴您从Colab下载的版本

4.上传草图:草图>上传

5.打开串口监视器:工具>串口监视器

6.做一些手势

7.将每个手势的置信度打印到串行监视器(0 =低置信度,1 =高置信度)

祝贺您,您刚刚为Arduino培训了第一个ML应用程序!



为了增加乐趣,emoji_button.ino示例演示了如何在Linux和MacOS中创建打印emoji字符的USB键盘。尝试将emoji_button.ino示例与imu_classifier.ino草图结合起来,创建一个手势控制的emoji键盘。

结论


这是一个激动人心的时刻,有很多东西可以在Tiny ML中学习和探索。我们希望这篇文章能让你了解它的潜力,并成为开始在你自己的项目中应用它的起点。

原文链接:https://medium.com/tensorflow/how-to-get-started-with-machine-learning-on-arduino-7daf95b4157
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消