Interface編集部
【広告企画】
センサを身に着けて運動状態を判定!
ローム・センサ評価キット「SensorMedal-EVK-002」
活用レポート(応用編)
◆センサ評価キットを身に着けて,運動の種類を自動判定する
今回は,ロームのSensorMedal2を身に着けて,歩行やランニング,スクワットの運動を行い,センサで取得したデータからどのような運動をしているかを判定して,自動で記録する「ウェアラブル・センサ」を製作します.
センサからは1秒ごとに変化する値を取得できます.これを時系列のデータと考えて,時系列データを高速フーリエ変換を使って周波数解析することで,運動状態を自動判定できるかを実験します.
アンケートのお答えいただいた方から抽選で4名様に,本記事で紹介している 「SensorMedal-EVK-002」をプレゼントいたします. 【アンケートはこちらから】 |
1.キー・デバイス…「SensorMedal-EVK-002」
センサ・データの取得には,加速度や気圧,地磁気,温湿度,照度,ホール・センサがコンパクトにワン・ボードとしてモジュール化されている,ローム社製のセンサ評価キット「SensorMedal-EVK-002 (図1)」を使います.
このキットSensorMedal-EVK-002 はコンパクトで電池による長時間動作可能なため,ウェアラブル・センサには最適です. Bluetooth通信できるので,スマホやRaspberryPiなどに接続して容易にデータを取得できます. これだけそろっていて参考価格:19,030円(税込)はお得です.
今回は,運動のパターンを判定したいので,「SensorMedal-EVK-002」に搭載されているセンサのうち,加速度センサと地磁気センサ,気圧センサ,運動開始の判断に照度センサの4種類のセンサを使用します.
・加速度センサ・・・動作状態を知る
・地磁気センサ・・・動いた向き(方角)を知る
・気圧センサ ・・・・高さの変化を知る
・照度センサ・・・・環境光の変化(センサの取り外し:運動の開始・終了)を知る
図1 センサ評価キット「SensorMedal-EVK-002」の詳細
ローム社のWebサイト:
https://www.rohm.co.jp/sensor-medal-support
https://www.rohm.co.jp/documents/11401/3946483/sensormedal-evk-002_ug-j.pdf
2.ウェアラブル・センサの全体構成
SensorMedal-EVK-002は電池で単独動作します.
今回はRaspberryPi ZeroWからBluetooth通信でセンサ値を読み出します.読み出したセンサ値を解析して「歩行」,「ランニング」,「スクワット」を自動で判断して1.44インチTFTモニタに表示します.
センサからRaspberryPi ZeroW上でPythonを使って読みだしたデータをFFT(高速フーリエ変換)により周波数解析をします.解析結果から取得したセンサ値の特徴をもとに歩行,ランニング,スクワットの各運動を自動で判別して運動の種類を表示します.
全体構成を図2に,それぞれ機器の仕様を表1に示します.これらをランニング・ポーチに入れて運動します.
図2 ウェアラブル・センサの製作に使用した機器
表1 製作に使用した機器の仕様
No. | パーツ名 | 仕様・用途 |
1 | SensorMedal-EVK-002 | ローム社製センサ評価キット, CR2450電池駆動 |
2 | RaspberryPi ZeroW | センサ値の読み出しと解析に使用 |
3 | 1.44インチTFTモニタ | 解析結果の表示 |
4 | スマホ・バッテリー | RaspberryPi用電源に使用(10000mA/h) |
5 | USBケーブル | RaspberryPi用電源供給 |
※1.44インチTFTモニタ(https://www.waveshare.com/wiki/1.44inch_LCD_HAT)
3.センサ・データを取り出すプログラム
SensorMedal-EVK-002からRaspberryPi ZeroW上で,Pythonを使ってBluetoothにてデータを受信します.以下に「SensorMedal-EVK-002を認識する手順」と「RaspberryPi ZeroW上で受信したセンサ値を保存するプログラム」を示します.
(1) RaspberryPi ZeroWとSensorMedal-EVK-002とのBluetooth通信の設定手順
(2) RaspberryPi ZeroW側のセンサ値受信プログラム(Python) (必要なLibrary 変数初期化)
(3)データの受信プログラム(抜粋)
(4)受信データの運動解析およびTFT表示プログラム(Python)(抜粋)
4.ウェアラブル・センサの装着方法
SensorMedal-EVK-002は,図3の向きに注意して使用する必要があります.
図3 センサの向き
今回はウェアラブルで判別するために,SensorMedal-EVK-002,RaspberryPi ZeroW,スマホ・バッテリーをランニング・ポーチに入れます(図4).これを腕に装着して運動します(図5).
+x方向[図3(長辺でBluetoothモジュール側)]が地面に向けて使用することになり,加速度センサや地磁気センサの入力値の向きが変わってしまうことに注意します.
図4 センサとRaspberryPi ZeroWをランニング・ポーチに入れている様子
図5 ランニング・ポーチを腕に装着している様子
5.各センサ・データを観測する
「スクワット」,「歩行」,「ランニング」の3種類の運動をしたときに取得できるデータを観察してみます.照度センサ,加速度センサ,地磁気センサ,気圧センサで取得したデータのグラフを次に示します.
●照度センサ
図6(a)の照度センサを見てみると,ランニング・ポーチにSensorMedal-EVK-002とRaspberryPi ZeroWを入れたところから運動終了後に取り出すまでの値がゼロになっています.
このデータは,他のセンサ値の解析開始のタイミングに使えそうです.
図6(a) 照度センサのグラフ
●加速度センサ
図6(b)の加速度センサを見てみると,特にランニング中に特徴が表れています.変化の密度を検出できれば「ランニング」と判断できそうです.
図6(b) 加速度センサのグラフ
●地磁気センサ
図6(c)は地磁気センサのグラフです.RaspberryPi ZeroWとスマホ・バッテリーと重なるように装着しているので,センサにとってはノイズ源の近くとなってしまう点を考慮する必要があります.
●気圧センサ
図6(d)は気圧センサの取得値をグラフ化したものです.特にスクワット運動の上下の変化の検出ができるか期待できます.
図6(d) 気圧センサのグラフ
6.データ解析して運動の種類を自動判別する
以上のグラフから「ランニング」,「スクワット」,「歩行」の3種類の運動を判別するためには,どのセンサの特徴を組み合わせると良いのかを検討してみました[前述の(4)プログラム内A 参照].
FFT変換や周波数解析の詳細については,Interface 2021年3月号の特集および,高速fourier変換の解説ページを参考にしました.ご興味のある方は本記事と合わせてご参照ください.
照度センサで取得した図6(a)のデータは,他のセンサ値解析開始のタイミングとして活用しました.
(1)「ランニング」の判定…加速度センサを使用
加速度センサxの値が他の運動に比較して激しく変動している状態,つまり加速度の値が大きく繰返し変動して表れている周波数をFFT変換し周波数解析しました(注:今回はセンサの設置向きが機器の想定と90°異なり上下方向の加速度xのセンサ値を使用する).
図7に,ランニング開始前後の加速度のデータを100サンプリング値とFFTを使用し周波数解析したグラフを表します.グラフから0.15Hz付近である程度繰り返し運動した結果から判定できそうです.センサ・データは約1秒ごとに送信されることから,およそ15秒程度の繰り返し運動が表れているので,0.15Hz付近にデータ解析の結果が有るか無いかでランニングの状態を判断します.
図7 ランニング時の加速度センサの値から周波数解析したグラフ
(2)「スクワット」の判定…加速度センサと気圧センサを使用
ランニングや歩行と異なり,体を大きく上下させるので,その上下動が気圧センサに表れます.気圧センサが上下に変動し,且つ上下方向の加速度センサの変動もある状態を検出し,スクワットの状態を判定しています(図8).
図8 スクワット時の加速度と気圧センサの値から周波数解析したグラフ
(3)「歩行」の判定…加速度センサと地磁気センサを使用
「ランニング」や「スクワット」ほど加速度の変化が少なく,地磁気のデータもゆるやかに変化している状態を検出し,歩行の状態を判定しています(図9).ランニング時と異なり0.15Hz付近には周波数解析結果ピーク値が検出されていません.
図9 歩行時の加速度・地磁気センサの値から周波数解析したグラフ
7.グラフと判別結果をモニタに表示する
図10と図11に自動判別した時のグラフと判別結果を1.44インチTFTモニタに表示した様子を示します.SensorMedal-EVK-002,RaspberryPi ZeroWなど一式をランニング・ポーチに入れて「スクワット」,「歩行」,「ランニング」と運動を繰り返して自動で判別できるかを試してみました.
スクワットについては,かがんだ状態で一呼吸おいてから立ち上がるようにしたところ,うまく判定できるようになりました.ランニングについては,グラフからもはっきり特徴がわかるように確実に判断できています.
図11 自動判別した状態を表示している様子
8.ウェアラブル・センサにて運動時のデータを取得した感想
今回は【応用編】として,ローム社のセンサ評価キットと小型のRaspberryPi ZeroWをランニング・ポーチにまとめて携帯し,歩行やランニング,スクワットの3種類の運動を行い,取得したセンサ・データから運動の種類を自動で判別してみました.
運動の状態判定を限定しているため,歩行についても判断できていますが,もっと違う運動の特徴量を抽出できるとよいのかもしれません.センサ値が1秒ごとに送信されFFTを用いて周波数解析をしているため,やや判定の遅れや少し一定のテンポで運動を続けたほうが判定しやすい傾向が見られました.この点については,時系列データから機械学習により特徴量を抽出して判定してみてもおもしろそうです.今後の課題としたいと思います.
また,RaspberryPi ZeroWにて実行するため,FFT処理は10数回センサ・データ受信ごとに行い,処理の重いグラフ表示は運動判定にて変化のあった場合に限ったりして,CPU負荷を軽減するなど工夫しました.メモリについてもSwapメモリを1Gバイトに増設してようやく動作しています.もう少しCPUパワーなどリソースが欲しいところです.
SensorMeda-EVK-002は,Bluetooth搭載のスマホやRaspberryPiなどのコンピュータ・ボードに接続すれば,すぐにセンサ値を取得できます.今後機会があれば,センサ値から時系列モデルの機械学習による自動判別に挑戦したいと思います.
●参照ページ
・ロームセンサ評価キット(SensorMedal-EVK-002);
https://www.rohm.co.jp/sensor-medal-support
・SensorMedal-EVK-002使い方資料;
https://www.rohm.co.jp/documents/11401/3946483/sensormedal-evk-002_ug-j.pdf
・The Scanner class;https://ianharvey.github.io/bluepy-doc/scanner.html
・BLE Logger for Rohm SensorMedal-EVK-002 [ファイル保存機能付き];
https://github.com/bokunimowakaru/SensorMedal2/blob/master/ble_logger_SensorMedal2_save.py
・1.44inch LCD HAT;https://www.waveshare.com/wiki/1.44inch_LCD_HAT
・
運動センサを用いた歩行分析における特徴量の可視化について;
https://www.msi.co.jp/tmstudio/stu18contents/No39_muc18_VMSVRP
・Interface,2021年3月号,特集記事.
・高速fourier変換;
http://www.turbare.net/transl/scipy-lecture-notes/intro/scipy.html#fast-fourier-transforms-scipy-fftpack
●使用したOS,ライブラリ・バージョン
・Linux raspberrypi 4.19.66+ #1253 Thu Aug 15 Swap memory 1Gb増設
・Python3.6.8 bluepy 1.3.0 numpy 1.19.5 matplot 0.1.9 scipy 1.5.4 Pillow 8.1.0
9.補足情報
●「SensorMedal-EVK-002」の購入方法
センサ評価基板[参考価格:19,030円(税込)は,コアスタッフオンラインやチップワンストップ,アールエスコンポーネンツで購入できます.詳しくは,ローム社のWebサイト(https://www.rohm.co.jp/sensor-medal-support)をご覧ください.
●「SensorMedal-EVK-002」の使い方
ローム社のWebサイトから入手できる「SensorMedal-EVK-002使い方資料」(https://www.rohm.co.jp/documents/11401/3946483/sensormedal-evk-002_ug-j.pdf)を参考にしてください.この資料で,スマホアプリや接続方法など詳細に説明されているため,本原稿では説明を割愛します.
◆筆者紹介:中島 幸一(なかじま・こういち)◆
株式会社 VSN 所属 ( https://www.modis-vsn.jp/ ).組込エンジニアとして自動車メーカにて先進安全装置の開発に従事.日本ロボット学会,農業食糧工学会,計測自動制御学会(正会員)に所属し,SLAM ROS を応用した室内監視ドローンの研究・開発中.ドローン/IoT関連学会での講演や大学との共同研究など活躍の場を広げる.月刊インターフェース特集記事や各種論文を執筆.