AN-2554:ADXL367 を用いた歩数計測

はじめに

このアプリケーション・ノートでは、歩数計アルゴリズムを3 軸デジタル加速度センサーADXL367 に実装する方法について説明します。アルゴリズムは、事前設定されたタイム・ウィンドウで行われる、1 歩ごとに生成される加速度のピーク検出解析に基づきます。手首に装着した場合の経験的結果は、様々な状況における平均精度が約 97%であることを示しています。

慣性センサーを用いた歩数計測

歩数計測はフィットネス・ウェアラブル・デバイスの中で最も一般的な機能の 1 つで、通常は、加速度センサーやジャイロ・センサーなどのデジタル慣性センサーを用いて行われます。

歩数を計測する方法は主に 2 種類あり、これらについて、腕振り動作の解析のセクションと踏み出し時の衝撃加速度の測定のセクションで説明します。


腕振り動作の解析


片足を踏む出すときに反対側の腕が振られ、2 歩ごとに 1 回の振りが行われます。一般的に、腕振り動作を解析するにはジャイロ・センサーが適しています。


踏み出し時の衝撃加速度の測定


歩く場合でも走る場合でも、1 歩ごとに前方向と垂直方向の加速度が生じますが、その振幅や周波数は個人によって異なります。垂直方向の加速度は、前方向の加速度より大きい傾向があり、図 1 に示すように、歩行サイクルにおいて踏み出した足のかかとが着地する段階で発生します。この特性は、通常加速度センサーを用いた歩数計測で利用され、このアプリケーション・ノートではここに焦点を合わせます。

図 1. 歩行の各段階と加速度パターン(Zhao、2010 年)
図 1. 歩行の各段階と加速度パターン(Zhao、2010 年)

一般的にフィットネス・トラッカはバッテリ駆動の小型デバイスであるため、加速度センサーは、消費電力が最小限に抑えられ、フットプリントが小さいことが重要です。また、これらのデバイスは手首に装着されるため、踏み出し時の加速度を検出するには以下のような 2 つの課題があります。

  • 臀部や足首など他の部位に比べ、加速度信号がある程度減衰する可能性があります。
  • ランニング時に障害物をよける場合や、友人に向かって手を振る場合など、腕振り動作には歩行以外の動きがあり、これらの周波数成分は一般的に歩行信号の帯域幅内にあります。このような動作は歩行との切り分けが困難です。

最初の課題は、減衰した場合でも加速度信号を検出できるよう、低ノイズの加速度センサーを選択することで克服できます。加速度センサーがウェアラブル・デバイスに適したものになるためには、小型で低消費電力であることも必要です。ADXL367 はこれらの条件をすべて満たします。

ADXL367 は超低消費電力の 3 軸デジタル加速度センサーで、消費電流の代表値は測定モード時でわずか 0.89µA、ウェイクアップ・モード時で 180nA という少ない値になります。±2g から±8gの範囲で測定レンジを設定でき、最大 400Hz の出力データ・レート(ODR)まで 14 ビットの分解能を維持できます。更に、深いマルチモード出力の先入れ先出し(FIFO)、温度センサー、シングルおよびダブルのタップ検出機能を内蔵しています。1.1V~3.6V の電源電圧範囲で動作し、2.2mm × 2.3mm × 0.87mmのパッケージで提供されています。こうした特長のすべてにより、ADXL367 は消費電力とサイズに制約のあるアプリケーションに最適なデバイスになります。

2 つ目の課題を解決することは、加速度信号を歩数計測アルゴリズムによってどう処理するかという問題と関連しています。歩数計測アルゴリズムでは、以下に示す 3 つのステップが最も一般的です(Xiaomin Kang、2018 年)。

  • 時間領域解析
  • 周波数領域解析
  • 機械学習

このアプリケーション・ノートでは、時間領域解析を用います。この方法は他の 2 つの方法に比べ必要とされる演算能力が小さく、しかも、ウィンドウ化されたピーク検出手法を用いれば、97%を超える高い歩数計測精度を示すためです(Agata Brajdic、2013 年)。

歩数計測アルゴリズム

開発されたアルゴリズムは、所定のタイム・ウィンドウ内で加速度ピークを検出し、動的な閾値を基準としたピーク値およびこれらのピークの再現性や繰り返しを解析することで、これらが歩行によるものとみなせるかどうかを判定します。アルゴリズムでは、50Hz のサンプリング・レートで x 軸、y 軸、z 軸の3 つの加速度データが(14 ビットの整数として)入力され、それまでに計測された歩数が返されます。アルゴリズムの実行方法について次に説明します。歩数計アルゴリズムのフローチャートについては図 4 を参照してください。

まず、3 つの軸における加速度の絶対値の合計を計算します。歩行時やランニング時、少なくとも 1 つの軸には加速度の比較的大きな周期的変動があり、これはセンサーの向きには依存しません(アナログ・ダイアログの記事「3 軸デジタル加速度センサーを使用したフル機能の歩数計の設計」(2010 年 6 月 Vol.44)を参照)。従って、絶対値の合計も歩行サイクルのプロファイルを反映したものであるはずです。

次はローパス・フィルタ処理の段階です。絶対値の合計は、4 サンプル・サーキュラ・バッファでその前の 3 つの値と平均化されます。次いで、平均化された信号を用いて、1 歩あたりに生成される加速度ピークの最大値と最小値を検出します。まず、アルゴリズムはタイム・ウィンドウ内の最大ピークを探し、最大ピークを検出すると、最小ピークの検出を開始します。

あるサンプルがピークとみなされるためには、そのサンプルもウィンドウの中心にあり、そのウィンドウで最も高いサンプル(最大を検出する場合)あるいは最も低いサンプル(最小を検出する場合)であることが必要です。ウィンドウのサイズは、アルゴリズムが正確にピークを捕捉できるものであることが必要です。ウィンドウが狭すぎる場合、ノイズや他の動きによる変動が誤って歩行動作と解釈される可能性があります。ウィンドウが広すぎると、ウィンドウ内で 2 つ以上の歩行動作がキャプチャされ、アルゴリズムはそのウィンドウ内で 1 つの最大値または最小値しか検出しないため、検出されない歩行動作が生じることになります。

一般に、人間は1秒間に5歩ものスピードで走る場合もあれば、2 秒間に 1 歩の遅さで歩く場合もあります。そのため、ウィンドウは、最速の歩行動作を捕捉するために 0.2 秒以上の幅が必要ですが、複数の歩行動作がウィンドウ内に含まれることのないように、0.4 秒よりも狭くなくてはなりません。最大ピークを検出した後、アルゴリズムは最大 1 秒間、最小ピークを探します。最小ピークが見つからない場合は、アルゴリズムは歩行動作がないと判断し、最大ピークを破棄して次のピークの検出を開始します。

次に、最大ピークと最小ピークのペアが歩行動作とみなせる可能性があるかどうかを判定します。これを行うために、動的閾値および感度の概念が導入されます。

動的閾値は、ローパス・フィルタ処理段と同じように機能する、4 サンプルのサーキュラ・バッファです。ただし、ここでは、入力データは最大値と最小値の平均値となります。動的閾値は、最大値と最小値の差が感度より大きくなるたびに更新されます。

感度は、動的閾値振幅付近のゾーンを定義するもので、不要な動作が原因となることが多い変動を破棄するのに役立ちます。最大ピークと最小ピークのペアが歩行動作とみなせる可能性を持つためには、次の条件を満たす必要があります。

  • 最大ピーク > (動的閾値 + 感度/2)
  • 最小ピーク < (動的閾値 − 感度/2)

最終的に、アルゴリズムは、歩行とみられる動作が 8 回以上連続して発生した場合、歩行あるいはランニングを行っていると判断します。これは、手を振って呼び掛けている場合や飲み物を飲んでいる場合などの、別の事象による誤検出を防ぐためのアルゴリズムの追加手段です。次の反復試行では、ソフトウェアはその前の 8 回の歩行とみられる動作すべてを有効と認定し、レギュレーション・モードに入ります。このモードでは、連続する歩行動作すべてが有効とカウントされます。

図 2 に、人が歩行している場合の加速度プロファイル例を示します。また、図 3 には、歩行計測アルゴリズムによってこの加速度データがどのように解釈/解析されるかを視覚的に示します。図 3 では、最初に 1 歩の歩行が行われ、次いでその人はその場で停止したことが示されています。歩行とみられる数は最初の検出最小値の後に 1 に増加していますが、次の最大値が歩行とみなすアルゴリズム条件に合わないため、歩行とみられる数は 0 にリセットされています。この人は約 1.4 秒の時点から再度歩き始めています。約 6.5 秒の時点で、歩行とみられる数は 8に達し、ソフトウェアはレギュレーション・モードに入っています。

図 2. 手首にセンサーを装着した歩行者の加速度プロファイル
図 2. 手首にセンサーを装着した歩行者の加速度プロファイル
図 3. アルゴリズムによる加速度信号処理
図 3. アルゴリズムによる加速度信号処理
図 4. 歩数計アルゴリズムのフローチャート
図 4. 歩数計アルゴリズムのフローチャート

検証結果

プロトタイプ回路の回路図を図 5 に示します。

図 5. プロトタイプの回路図とハードウェア
図 5. プロトタイプの回路図とハードウェア

EVAL-ADXL367Z ボードを Arduino Nano 33 Bluetooth® Low Energy(BLE)と共に使用することで、テスト・プラットフォームをセット・アップできます。ADXL367 は単一の電源で動作できるよう構成されています。電圧源には、3.3VのArduino電圧レギュレータを使用します。Arduino には、2 個の 3V コイン電池を直列に接続して給電します。詳細については図 7 および Arduino IDEでのプロトタイプの使用のセクションを参照してください。

歩数計アルゴリズムは 50Hz のサンプリング・レートに合わせて最適化されています。ADXL367 の ODR もそれに合わせて設定されています。加速度レンジは±2g で、FIFO はストリーム・モードに設定されています。INT1 割込みピンは FIFO のウォーターマーク・イベントが生じた場合にトリガするよう設定されています。FIFO に保存されたサンプルの数が、FIFO_SAMPLESレジスタで指定された値以上になると、FIFO ウォーターマークがセットされます。FIFO_SAMPLESレジスタは24にセットされています。これは x 軸、y 軸、z 軸の各データ 8 セットに相当します。

アルゴリズムのパラメータは、特定のユース・ケースに応じて最適な性能となるよう、ユーザが調整する必要があります。ランニング時に手首に装着する場合と歩いているときに臀部に装着する場合とでは必要なパラメータ値が異なる場合もあります。これらのパラメータは次のとおりです。

  • ウィンドウ・サイズ:観察ウィンドウのバッファ・サイズを定義します。
  • 感度:動的閾値の更新をトリガする最小加速度を定めます。
  • フィルタ次数:平均化サーキュラ・バッファのサイズを定義します。
  • 閾値次数:動的閾値サーキュラ・バッファのサイズを定義します。

表 1 に、手首装着アプリケーション向けの良い妥協点となるパラメータ値をまとめます。

表 1. パラメータ値
Parameter Value
Filter Order 4
Threshold Order 4
Window Size Filter order × 4 + 1
Sensitivity 0.1 g

図 6 の例では、人が一定の方向に 10 歩歩き、停止した後反転し、10 歩戻っています。ADXL367 で測定した加速度は、青色、赤色、緑色で示され、アルゴリズムで計算した合計歩数は黒色で示されています。

図 6. ある方向に 10 歩歩き、その後反転して更に 10 歩歩いた場合の加速度プロファイル。アルゴリズムによる歩数計測値は黒色で示しています。
図 6. ある方向に 10 歩歩き、その後反転して更に 10 歩歩いた場合の加速度プロファイル。アルゴリズムによる歩数計測値は黒色で示しています。

表 1 のパラメータを用いた検証結果を表 2 に示します。プロトタイプ PCB は、フックと環状の紐を用いて被験者の手首に巻きつけました。被験者は一般的なランニング・シューズを着用しています。

表 2. 検証結果
Test Test Description Pedometer Step Count Actual Number of Steps
1 Walk 99 100
2 Walk, busy hands 101 100
3 Walk, stop every 10 steps, change direction 53 50
4 Run 103 100
5 Walk up/down stairs 98 96

テスト 1(歩行)では、被験者は毎秒 1.6 歩の平均速度で歩きました。テスト 2(歩行、両手ふさがり)では、被験者は両手で携帯電話を保持しながら歩きました。テスト 5(歩行による階段昇降)は、硬い木製床の 12 段の階段で行われました。このテストでは、階段を 4 回昇り降りしました。テスト 5 以外のテストはすべて、コンクリート床で行いました。これらすべてのテストから求められた平均歩数精度は 97.4%です。テスト 3(歩行、10 歩ごとに停止、方向転換)では 94.3%の精度で、これが最低性能を示したテストです。

アルゴリズムの平均処理時間を見積もるために、表 2 で行った各テストでは実行時間をモニタしました。それによると平均時間は 24µs でした。

図 7. Arduino コードのフローチャート
図 7. Arduino コードのフローチャート

Arduino IDE でのプロトタイプの使用

検証テストで用いた歩数計アルゴリズムのソース・コードは、ADXL367 製品ページのツールおよびシミュレーションのセクションでダウンロードできます。

Arduino IDEでプロトタイプ PCBを使用するには、次の手順を実行します。

  1. Arduino統合開発環境(IDE)アプリケーション・ソフトウェアを Arduino のウェブサイトからインストールします。

  2. Arduino IDE を開き、[ツール]>[ライブラリを管理]に移動します。

    図 8. Arduino IDE の[ライブラリを管理]
    図 8. Arduino IDE の[ライブラリを管理]
  3. [ライブラリマネージャ]ウィンドウで[タイプ]のリストから[Arduino]を選択し、[トピック]のリストから[コミュニケーション]を選択して、ArduinoBLE と入力します。[インストール]をクリックします。

    図 9. ArduinoBLE ライブラリの[インストール]
    図 9. ArduinoBLE ライブラリの[インストール]
  4. ユニバーサル・シリアル・バス(USB)ケーブルを Arduinoと PC に接続します。

  5. [ファイル]>[開く]に移動し、ADXL367_pedometer.inoファイルを選択して ADXL367 歩数計アルゴリズム・プロジェクトを開きます。

  6. [ツール]>[ボード:Arduino Nano 33 BLE]>[ArduinoMbed OS Nano Boards]に移動し、[Arduino Nano 33 BLE]を選択します。

    図 10. Arduino IDE Board の選択
    図 10. Arduino IDE Board の選択
  7. [ツール]>[ポート]に移動し、該当のポートを選択します。

    図 11. Arduino IDE COM ポートの選択
    図 11. Arduino IDE COM ポートの選択
  8. 書込みボタンをクリックしてプログラムを Arduino にアップロードします。

    図 12. ソフトウェアのアップロード
    図 12. ソフトウェアのアップロード
  9. アップロードの完了は、図 13 に示すように、Done で示されます。

    図 13. アップロード完了メッセージ
    図 13. アップロード完了メッセージ
  10. [ツール]に移動し[シリアル・モニタ]を選択します。

    図 14. Arduino IDE シリアル・モニタを開く
    図 14. Arduino IDE シリアル・モニタを開く
  11. 開いたウィンドウでボー・レートのリストから[115200 bps]を選択します。図 15 は現在の歩数計測数を示しています。

    図 15. 歩数計測モニタリング
    図 15. 歩数計測モニタリング

参考資料

Agata Brajdic, R. H. "Walk Detection and Step Counting on Unconstrained Smartphones." ACM international joint conference on Pervasive and ubiquitous computing, (Pages 225–234). 2013.

Xiaomin Kang, B. H. "A Novel Walking Detection and Step Counting Algorithm Using Unconstrained Smartphones. Sensors," 18(1), 297.2018.

Zhao, N、「3 軸デジタル加速度センサーを使用したフル機能の歩数計の設計」アナログ・ダイアログ、2010年