查看: 731|回复: 2

[入门] 【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安...

[复制链接]
【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安装库及添加测试样本
【在 Arduino 上使用机器学习】(二)Tensorflow上构建及训练模型
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义手势识别模型

机器学习可以让没有嵌入式研发背景的程序员也能使用微控制器

准备材料

Arduino Nano 33 BLE Sense 拥有各类板载传感器,可能带来一些酷炫的 Tiny ML 应用:
  • 语音 - 数字麦克风
  • 移动 - 9 轴 IMU(加速度计、陀螺仪、磁力计)
  • 环境 - 温度、湿度和压力
  • 光线 - 亮度、颜色和接近传感器

刚看到Tensor Flow微信公众号的推广时非常感兴趣,第一时间找了DF商城,发现还没有的卖。立马找万能的某宝,果不其然,真有。340大元一个,带header的,比官网33.4美刀的价格贵100,还算能接受。下单了一个,发货很快,没两天就收到了。做工一如既往的精良,非常小巧,就和宣传的一样,只有一片口香糖大小。

Nano33BLE1.jpg
Nano33BLE2.jpg

Nano33BLE3.jpg

Nano33BLE4.jpg




最近事情很多,板子放了几天,实在忍不住心痒痒,把手头的事先放一边,开始研究这个新物种。没想到还是非常好上手,前后一天时间就顺利的完成了整个过程。

以下是详细的体验过程。

设置 Arduino IDE

为了将推理模型配置到开发板中,并从开发板中下载后面所需的训练数据,请按照以下步骤设置 Arduino IDE 应用。因为我们将需要在 Arduino IDE 中下载并安装特定开发板和库,本方法采用的步骤比使用 Arduino Create 网页编辑器要多一些。

  • https://arduino.cc/downloads 下载并安装 Arduino IDE
    • 打开安装的 Arduino 应用
  • 在 Arduino IDE 菜单中,依次选择 Tools > Board > Boards Manager…
    • 搜索“Nano BLE”,并点击“Install”
01board搜索nano.png



  • 安装过程需要几分钟时间

02board安装nano.png

依次点击库管理器:Tools > Manage Libraries…
  • 搜索并安装 Arduino_TensorFlowLite 库
04安装Arduino_Tensorflow库.png
03搜索Arduino_Tensorflow库.png
安装完成


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

05搜索Arduino_LSM9DS1库.png
06安装Arduino_LSM9DS1库.png
安装完成

  • 最后,用 Micro USB 数据线连接开发板和电脑
    • 选择开发板:Tools >  Board > Arduino Nano 33 BLE
07选择板子.png

  • 选择端口:Tools > Port > COMXX (Arduino Nano 33 BLE)。我的端口是54.

07选择端口.png

TensorFlow Lite for Microcontrollers 示例:语音识别micro_speech
  • 打开示例文件:
09示例micro_speech.png

  • 选择板子的型号和对应的端口
10上传IMU_Capture.png

  • 打开串口监视器
11SerialPlotter.png

  • 在串口监视器观察识别结果:
08micro_speech_monitor.png
体验结果:识别结果不尽如人意。说No的时候识别率比较高,说Yes的时候识别率比较低,需要把Yes拖的时间比较长,而且强调e。这也正如团队所说的“此模型仅使用 256KB RAM,并在本地微控制器上运行,因此不要期待与商业级别“语音助手”相同的准确性。模型没有连接到互联网连接,并且本地可用 RAM 相差了近 2000 倍。"

收集 Arduino 传感器的流数据

我们将使用预制例程 IMU_Capture.ino 执行以下操作:
  • 监控开发板的加速度计和陀螺仪
  • 在检测到开发板的显著线性加速时触发采样窗口
  • 当达到 119Hz 时采样一秒,并通过 USB 输出 CSV 格式的数据
  • 循环,继续监控下个手势

在 Arduino IDE 中使用此例程对开发板进行编程:
  • 下载 IMU_Capture.ino并在 Arduino IDE 中将其打开
  • 对其进行编译,并依次点击 “Sketch” > “Upload”,将其上传到开发板


实时显示 Arduino 开发板的传感器数据日志
完成上述步骤后,我们现在可以显示来自开发板的数据。
  • 在 Arduino IDE 中,依次点击 Tools > Serial Plotter,以打开 Serial Plotter
  • 如果返回错误,则表示开发板不可用,请重新选择端口:
    • Tools > Port > 端口名称 (Arduino Nano 33 BLE)
  • 拿起开发板,练习 “击拳” 和 “弯曲肘部” 的动作
  • 了解采样窗口仅持续一秒,然后等待下一个手势
  • 传感器数据采集的实时图表(参见下方 GIF)



12SerialPlotter.png

采集手势训练数据
如要将数据采集为 CSV 日志以上传到 TensorFlow,您可以依次点击 Arduino IDE > Tools > Serial Monitor,以查看数据并将其导出到您的台式电脑:
  • 按顶部的白色小按钮,重置开发板
  • 单手拿起开发板(之后再拿起会触发采样)
  • 在 Arduino IDE 中,打开 Serial Monitor :Tools > Serial Monitor
    • 如果返回错误,则表示开发板不可用,重新选择端口:
    • Tools > Port > 端口名称 (Arduino Nano 33 BLE)
  • 将开发板拿在手中做一个“击打”手势
    • 确保出拳手势要快,以便触发采集
    • 缓慢恢复到自然姿势,以免再次触发采集
    • 做手势时请务必小心!
  • 重复之前的手势采集步骤 10 次以收集更多数据
  • 从串口控制台 (Serial Console) 中将数据复制粘贴到名为 punch.csv 的新文本文件
  • 清空控制台输出窗口,并重复上述所有步骤,这次做一个“弯曲肘部”手势,将数据粘贴到名为 flex.csv 的文件中
    • 快速做出向内弯曲肘部手势,以便触发采集,每次恢复自然姿势时要缓慢

有时端口会重复出现在列表中,不用管它,不影响使用
16multiports.png

上传成功后打开串口监视器,在触发采集前可以看到显示aX, aY, aZ, gX, gY, gZ
13serialmonitor_capture.png

触发手势,串口监视器返回多组数据
13serialmonitor_capture1.png

“击拳”10次,将串口监视器的数据全部选中,复制粘贴到punch.csv文件中。注意最后一行没有数据的不要选,否则会出错(后面会提及)。
13serialmonitor_capture2.png

复制粘贴后显示如下,此时数据是一个单元格一条数据,没有按aX, aY, aZ, gX, gY, gZ分开
13punch_fist.png
选择data-->Text to Column,将数据按列分割
14split.png

同样的方法操作曲肘数据也是一样,全选后保存到flex.CSV中,将多余的列删除即可
17flex_csv.png

注意,两个 csv 文件的首行应当包含以下字段:aX、aY、aZ、gX、gY、gZ
csvheader.png

每次采集有119条数据,采集10次,每个CSV文件有1190条数据,加上标题行,一共1200行数据。注意要删除空行,并观察CSV记录的条数。如果存在不合格的数据,在后面Tensor Flow数据解析的时候会报错(大坑!)
15punch_csv.png

下一个教程学习在Tensor Flow中训练模型

参考资料:
Tensoflow:在 Arduino 上使用机器学习
Arduino:Get started with machine learning on Arduino







17flex_csv1.png

hnyzcj  版主

发表于 2020-7-23 07:59:17

8错的
回复

使用道具 举报

20060606  高级技匠

发表于 2020-7-31 05:42:31

没想到arduino也能玩出这么高端的应用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail