Edge Impulseで加速度センサのデータを学習させました。
XIAO nRF54L15 Senseを使用しています。
プログラムから、Edge Impulseへのデータのアップ含めて紹介します。
Edge Impulseで加速度センサ値を学習(XIAO nRF54L15 Sense編)
Edge Impulseで加速度センサのデータを学習させました。
XIAO nRF54L15 Senseを使用しています。
プログラムから、Edge Impulseへのデータのアップ含めて紹介します。
実際に学習させた際の動画含めて紹介しています。
XIAO nRF54L15 Sense
Seeed社が販売している、XIAO nRF54L15 Sense でデモをしています。
NordicのnRF54L15 がSoCとして搭載されています。概要を紹介したブログ記事が下記です。
XIAO nRF54L15 Senseの始め方(westでのビルド編)

加速度センサ、マイクのセンサが内蔵されているので、簡単にデモが可能です。
nRF Connect
下記の公式手順ではNordicのツールのnRF Connectでテストする手順が紹介しています。
まずはこの手順に従いテストすることをおススメします。
今回実施した環境はV.3.0.1で実施しています。
https://wiki.seeedstudio.com/xiao_nrf54l15_sense_getting_started/
VS Code上でインストールする手順もブログ記事でまとめていますので参照ください。
nRF Connectの開発環境をVSCodeで構築してみた

Edge Impulseでデバイス上の加速度センサ値を取得
Edge Impulseでデバイス上でのデータ値を取得するには、事前準備が必要です。
- USBシリアルでデバイスからデータ値を取得
- Edge Impulse CLIを使ってアップロード
ZephyrでUSBシリアルでデータ値を取得
下記公式ドキュメントを参考にしながら、加速度センサ値を取得するプログラムを作ります。
https://docs.edgeimpulse.com/tools/clis/edge-impulse-cli/data-forwarder
https://github.com/nrfconnect/sdk-nrf/tree/main/samples/edge_impulse/data_forwarder
XIAO nRF54L15 Senseに搭載されている加速度センサはLSM6DS3TR-Cです。
Seeed公式にも加速度センサの値を取得するプログラムが用意されています。
https://github.com/Seeed-Studio/platform-seeedboards/tree/main/examples/zephyr-imu
上記を改造して、Edge Impulse CLIで104Hzで取得できるように改造しました。
実際に使ったプログラムは下記に保存しています。
下記のようにI2C経由でx,y,xの加速度センサ値が104Hzで連続して表示するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
*** Booting nRF Connect SDK v3.0.0-3bfc46578e42 *** *** Using Zeph -0.3113 0.0493 0.8643 yr OS v4.0.99-3e0ce7636fa6 *** [00:00:00.007,690] <inf> lsm6dso_i2c_ -0.2337 0.0651 0.8126 example: I2C device i2c@104000 is ready. [00:00:00.007,910] <inf -0.3076 0.0559 0.8090 > lsm6dso_i2c_example: LSM6DSO WHO_AM_I check passed. ID: 0x6a [00:0 -0.3076 0.0559 0.8090 0:00.008,184] <inf> lsm6dso_i2c_example: LSM6DSO initialized successf -0.4432 0.0261 0.8708 ully at 104 Hz. -0.5849 -0.0048 0.8728 -0.7191 -0.0162 0.8596 -0.7857 -0.0099 0.8517 -0.7959 0.0016 0.8439 -0.7702 0.0113 0.8621 -0.7041 0.0294 0.8430 -0.6242 0.0544 0.7893 -0.5568 0.0706 0.7762 -0.5568 0.0706 0.7762 -0.5123 0.0796 0.7578 -0.5236 0.0741 0.7968 |
Edge Impulse CLI
シリアルメッセージをEdge Impulseにデータを上げるための環境を下記を見て整えます。
https://docs.edgeimpulse.com/tools/clis/edge-impulse-cli/installation
公式ドキュメントに従って、PythonとNode.jsが入っていること確認してインストールしました。
コマンドプロンプトでCLIを入れたログを下記に残しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Microsoft Windows [Version 10.0.26100.6584] (c) Microsoft Corporation. All rights reserved. C:\Users\ioten>python Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) [MSC v.1943 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit C:\Users\ioten>node Welcome to Node.js v22.16.0. > .exit C:\Users\ioten>npm install -g edge-impulse-cli --force npm warn using --force Recommended protections disabled. npm warn deprecated are-we-there-yet@1.1.7: This package is no longer supported. npm warn deprecated npmlog@4.1.2: This package is no longer supported. npm warn deprecated gauge@2.7.4: This package is no longer supported. npm warn deprecated har-validator@5.1.5: this library is no longer supported npm warn deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm warn deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm warn deprecated @zeit/dockerignore@0.0.5: "@zeit/dockerignore" is no longer maintained added 548 packages in 27s 50 packages are looking for funding run `npm fund` for details npm notice npm notice New major version of npm available! 10.9.2 -> 11.6.0 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.6.0 npm notice To update run: npm install -g npm@11.6.0 npm notice C:\Users\ioten> |
Edge Impulseで加速度センサ値を学習する
冒頭でも紹介しましたが、実際に学習させた際の動画含めて紹介しています。
XIAO nRF54L15 Senseにはプログラムは書き込み済です。
Edge Impulse CLIでログインして、加速度センサの値をアップロードします。
ラベル、各データの名前なども入力したりします。
実際のEdge Impulse CLI上でのログが下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
C:\Users\ioten>edge-impulse-data-forwarder --frequency 104 Edge Impulse data forwarder v1.34.1 Endpoints: Websocket: wss://remote-mgmt.edgeimpulse.com API: https://studio.edgeimpulse.com Ingestion: https://ingestion.edgeimpulse.com ? Which device do you want to connect to? (🔍 type to search) COM28 [SER] Connecting to COM28 [SER] Serial is connected (03:72:69:C7) [WS ] Connecting to wss://remote-mgmt.edgeimpulse.com [WS ] Connected to wss://remote-mgmt.edgeimpulse.com ? To which project do you want to connect this device? (🔍 type to search) 786300 [SER] Detecting data frequency... [SER] Detected data frequency: 171Hz ? 3 sensor axes detected (example values: [-268,-2301,16545]). What do you want to call them? Separate the names with ',': accx,accy,accz [SER] Overriding frequency to 104Hz (via --frequency) ? What name do you want to give this device? 03:72:69:C7 [WS ] Device "03:72:69:C7" is now connected to project "imu-test". To connect to another project, run `edge-impulse-data-forwarder --clean`. [WS ] Go to https://studio.edgeimpulse.com/studio/786300/acquisition/training to build your machine learning model! [WS ] Incoming sampling request { path: '/api/training/data', label: 'idle', length: 100000, interval: 9.615384615384615, hmacKey: '***', sensor: 'Sensor with 3 axes (accx, accy, accz)', labelColor: undefined, collectedSampleCount: undefined, targetSampleCount: undefined } |
サンプリングを繰り返し、必要なデータを入手します。
idle, circle, updown, flickの4パターンで学習させています。
3分間の学習データ、1分間のテストデータを取得しました。
Create Impulseの箇所でどのように学習させるかを設定できます。
この辺りは、下記公式のサンプルを参考にしています。
https://docs.edgeimpulse.com/datasets/time-series/continuous-motion-recognition
今回は下記設定で対応しています。他は全てデフォルト設定です。
- Time series data…Window size:1000ms→2000ms
- Processing block…Spectral Analysis
- Learning block…Classification, Anomaly Detection (K-means)
後は全てデフォルト設定で進めていきます。
Spectral features, Classifier, Anomaly detectionを順に学習します。
Anomaly detection settingsではaccx RMS, accy RMS, accz RMS の3つを設定しています。
最後はDeploymentの箇所でビルドします。
今回はC++ライブラリを設定して、ビルドします。
raw_data(加速度センサ)
ビルド済のデータはパラメータ・モデルなどの箇所にライセンスがあるため、展開できません。
各個人でEdge Impulseで作成をお願いします。
但し、今回取得した加速度センサのデータ値は共有しています。
もし必要でしたら、idle, circle, updown, flickの4パターンのデータを使ってください
下記にGitHubに保存しています。
最初のデータのupload data箇所で解凍したフォルダを選択すれば使用可能です。
おまけ(XIAO nRF52840 Sense)
今回のデータ収集方法を、一つ古いモデルのXIAO nRF52840 Senseでも試してみました。
しかし、結果はNGでした。(多分プログラムが悪いと思います)
nRF52840では104Hzで加速度センサのシリアルメッセージを表示できませんでした。
ただ12.5Hzの加速度センサ値のシリアルメッセージは取得できました。
Edge Impulse にもデータをアップロードできることは確認しました。
下記にプログラムを置いています。
nRF52840のUSBのIPの速度影響なのか、それともスペックの影響なのか不明でした。
(nRF52840はnRF54L15と違って、USBが直接ICに繋がっています。)
参考までに、情報を展開しときます。
まとめ
Edge Impulseで加速度センサのデータを学習させました。
XIAO nRF54L15 Senseを使用しています。
プログラムから、Edge Impulseへのデータのアップ含めて紹介しました。
下記の記事で、今回作ったモデルを利用して実際にジェスチャー認識をしています。
一緒にご覧ください。
コメント