3軸デジタル加速度センサによる人の転倒の検出

Ning Jia
(コメントは英語でお願いします。)  


  • はじめに
  • ADXL345 iMEMS加速度センサ
  • 割込みシステム
  • 転倒転落中の加速度変化特性
  • 代表的な回路接続
  • ADXL345で転倒転落の検出を簡素化
  • 結論
  • 付録—コード例
  • 参考文献


  • はじめに
    人が転倒や転落(転倒転落)したとき、誰も気付く人がいないという事態は二重の意味で危険です。初期段階の怪我と思われる場合であっても、短時間のうちに処置を施さないと、状況によってはさらに悪化する可能性があります。たとえば、高齢者の多くは心身の衰えや目まいによって、また一般的にはセルフケアや自己防衛能力の低下によって思いがけなく転倒転落することがあります。高齢者の身体は虚弱になりがちなので、こういった事故が発生した場合は、すぐに処置を施さなければ、深刻な事態に陥るおそれがあります。統計に示されるように、深刻な結果を招く原因は、転倒転落そのものではなく救護や処置の遅れによるものが大部分です。迅速に救護員に通報できれば、転倒転落後の重大な結果を大幅に低減することができます。

    高齢者以外にも、転倒転落、特に相当高い位置からの転倒転落に対する緊急通報が非常に有益な状態や動作の例は数多くあります。たとえば、登山者、建設作業者、窓の清掃作業員、塗装工、屋根職人などがそうです。

    こうした転倒転落通報の必要性の観点から、あらゆるタイプの転倒転落の検出・予測デバイスの開発が盛んに行われるようになっています。近年、MEMS(マイクロ・エレクトロ・メカニカル・システム)加速度センサが登場したことで、3軸高集積MEMS(iMEMS®)加速度センサを利用した転倒転落検出器の設計が可能になっています。この技術は、3つの直交方向で加速度の変化を追跡してセンサを装着した人の身体の位置と動作の変化を測定するという原理に基づいています。データはアルゴリズム的に絶えず解析され、人体の転倒や転落の有無を判定します。人が転倒あるいは転落すると、デバイスはGPSと無線トランスミッタを使ってその位置を判定し、通報して救助を求めます。転倒転落検出の中核をなすのは、突発的な転倒転落状況の存在を判断する高信頼の有効な検出原理とアルゴリズムです。 本稿では、人体に関する転倒転落検出原理の研究に基づいて、アナログ・デバイセズの3軸加速度センサADXL345を用いた転倒転落状況の検出ソリューションを解説します。



    ADXL345 iMEMS加速度センサ
    iMEMS半導体技術は、マイクロメカニカル構造と電子回路を組み合わせて1個のシリコン・チップに集積しています。この技術を使って、iMEMS加速度センサは1軸または2軸、さらには3軸で加速度を検知し、アナログまたはデジタル出力を提供します。加速度センサはアプリケーションに応じて、数gから数十gまで、さまざまな範囲の検出を提供します。デジタル仕様の場合には、複数の割込みモードを持たせることもできます。これらの機能は便利でフレキシブルなソリューションを提供します。

    iMEMS半導体技術は、マイクロメカニカル構造と電子回路を組み合わせて1個のシリコン・チップに集積しています。この技術を使って、iMEMS加速度センサは1軸または2軸、さらには3軸で加速度を検知し、アナログまたはデジタル出力を提供します。加速度センサはアプリケーションに応じて、数gから数十gまで、さまざまな範囲の検出を提供します。デジタル仕様の場合には、複数の割込みモードを持たせることもできます。これらの機能は便利でフレキシブルなソリューションを提供します。

    ここで推奨している転倒転落検出ソリューションは、内蔵されたこれらの機能を十分に活用し、アルゴリズムの複雑さを最小限に抑えています。実際の加速度値を読み出して余分な計算を実行したりする必要はほとんどありません。

    ページの先頭へ



    割込みシステム
    図1は、ADXL345のシステム・ブロック図とピン定義を示しています。

    図1. ADXL345システム・ブロック図とピン配置

    図1. ADXL345システム・ブロック図とピン配置

    ADXL345は2個のプログラマブル割込みピンINT1とINT2を備えており、全部で8つの割込み機能が得られます。各割込みは個別にイネーブルまたはディスエーブルでき、INT1またはINT2ピンにマップできます。機能はすべて同時に使用できます。ただし、機能的に唯一制限されるのは、機能によって割込みピンを共有することが必要になる場合があるという点です。8つの機能はDATA_READY、SINGLE_TAP、DOUBLE_TAP、ACTIVITY、INACTIVITY、FREE_FALL、WATERMARK、OVERRUNです。割込みはINT_ENABLEレジスタに適切なビットを設定するとイネーブルとなり、NT_MAPレジスタの値に基づいてINT1またはINT2ピンにマップされます。

    割込み機能は次のように定義されます。

    1. DATA_READYは新しいデータが使用可能なときに設定され、使用できる新しいデータがないとクリアされます。


    2. SINGLE_TAPは、THRESH_TAPレジスタの値より大きな加速度イベントがDURレジスタの指定値より短い時間生じると設定されます。


    3. DOUBLE_TAPは、THRESH_TAPレジスタの値より大きな2つの加速度イベントがDURレジスタの指定値より短い時間生じると設定され、LATENTレジスタの指定時間後、WINDOWレジスタの指定時間内に2番目のタップが開始されます。


    4. 図2は有効なSINGLE_TAPとDOUBLE_TAPの2つの割込みを示しています。

      図2. SINGLE_TAP、DOUBLE_TAP割込み

      図2. SINGLE_TAP、DOUBLE_TAP割込み

    5. ACTIVITYは、THRESH_ACTレジスタの値より大きな加速度が感知されると設定されます。


    6. INACTIVITYは、THRESH_ACTレジスタの値より小さな加速度がTIME_INACTの指定時間より長い間感知されると設定されます。TIME_INACTの最大値は255秒です。 注:ACTIVITY、INACTIVITY割込みで、ユーザは各軸を個別にイネーブルまたはディスエーブルできます。たとえば、X軸のACTIVITY割込みをイネーブルし、Y軸とZ軸の割込みをディスエーブルしておくこともできます。


    7. ACTIVITY割込みとINACTIVITY割込みに対してDC結合またはAC結合動作モードを選択できます。DC結合動作では、現在の加速度がTHRESH_ACTおよびTHRESH_ INACTと直接比較され、ACTIVITYまたはINACTIVITYが検出されているかどうかを判定します。動作(アクティビティ)検出のためのAC結合動作では、動作検出開始時の加速度値が参照値として扱われます。次に、加速度の新しいサンプルがこの参照値と比較され、その差の大きさがTHRESH_ACTを越えていると、デバイスはACTIVITY割込みをトリガします。非動作(非アクティビティ)検出のためのAC結合動作では、参照値が比較処理のために使用され、デバイスが非動作スレッショールドを越えていると更新されます。参照値が選択されると、デバイスはTHRESH_INACTの現在の加速度と参照値の差を比較します。その差が全 TIME_INACTの間THRESH_INACTを下回っていれば、デバイスは非アクティブとみなされ、INACTIVITY割込みがトリガされます。

    8. ACTIVITY割込みとINACTIVITY割込みに対してDC結合またはAC結合動作モードを選択できます。DC結合動作では、現在の加速度がTHRESH_ACTおよびTHRESH_ INACTと直接比較され、ACTIVITYまたはINACTIVITYが検出されているかどうかを判定します。動作(アクティビティ)検出のためのAC結合動作では、動作検出開始時の加速度値が参照値として扱われます。次に、加速度の新しいサンプルがこの参照値と比較され、その差の大きさがTHRESH_ACTを越えていると、デバイスはACTIVITY割込みをトリガします。非動作(非アクティビティ)検出のためのAC結合動作では、参照値が比較処理のために使用され、デバイスが非動作スレッショールドを越えていると更新されます。参照値が選択されると、デバイスはTHRESH_INACTの現在の加速度と参照値の差を比較します。その差が全 TIME_INACTの間THRESH_INACTを下回っていれば、デバイスは非アクティブとみなされ、INACTIVITY割込みがトリガされます。


    9. WATERMARKは、FIFOのサンプルの数がSAMPLESレジスタの値にまで達していると設定されます。この値はFIFOが読み出されると自動的にクリアされ、SAMPLESレジスタ値より小さな値に戻ります。
      注:ADXL345のFIFOレジスタには、バイパス、FIFO、ストリーム、トリガという4つのモードがあり、最大32サンプル(X、Y、Z軸)まで格納できます。FIFO機能は重要であり、非常に役に立ちます。ただし、ここで推奨するソリューションではFIFO機能を使用しないため、これ以上解説はしません。


    10. OVERRUNは、未読のデータが新しいデータに置き換えられると設定されます。OVERRUNの正確な動作はFIFOの動作モードに依存します。バイパス・モードでは、DATAX、DATAY、DATAZレジスタの未読のデータが新しいデータに置き換えられるとOVERRUNが設定されます。ほかのどのモードでも、FIFOが32サンプルで一杯になるとOVERRUNが設定されます。OVERRUNはFIFO値の読出しを行うとクリアされ、データが読み出されると自動的にクリアされます。

    ページの先頭へ



    転倒転落中の加速度変化特性
    転倒転落検出の原理に関する主要研究では、人が転倒または転落しているときに発生する加速度の変化に焦点を当てています。

    図3は(a)階段を歩いて下りるとき、(b)階段を歩いて上るとき、(c)腰を下ろすとき、(d)椅子から立ち上がるときにそれぞれ発生する加速度の変化を示しています。転倒転落検出器は被験者のベルトに装着されています。赤いパターンはY軸(垂直)加速度であり、安定時は-1gです。黒と黄色のパターンはそれぞれX軸(進行方向の加速度)、Z軸(横方向の加速度)の加速度です。これらは安定時に両方とも0gです。緑のパターンはベクトル合計であり、安定時の値は1gです。

    a. 階段を歩いて下りる、b. 階段を歩いて上る

    c. 腰を下ろす、d. 立ち上がる

    図3. さまざまなタイプの動作に対する加速度センサ応答

    高齢者の動作は比較的緩慢なので、歩行中の加速度の変化はそれほど顕著ではありません。最も大きな加速度は、腰を下ろす瞬間でY(およびベクトル合計)において3g(瞬間加速度)を示しています。

    転倒転落中の加速度はまったく異なります。図4は、偶発的な転倒転落時の加速度の変化を示しています。図4を図3と比較すれば、転倒転落検出の基準として利用できる転倒転落イベントの重要な4つの差異特性を見て取ることができます。これらの特性は赤い点線の矩形で示されており、以下に詳しく説明します。

    図4. 転倒転落処理中の加速度変化曲線

    図4. 転倒転落処理中の加速度変化曲線

    1. 転倒転落開始:転倒転落開始時には無重力の現象が必ず発生します。これは自由落下中にもっと顕著になり、加速度のベクトル合計は0gに近づきます。その状態の持続時間は自由落下の高さに依存します。通常の転倒転落中の無重力が自由落下中のときほど顕著ではなくても、加速度のベクトル合計はほぼ1g未満となります(通常状態のときは一般に1gより大きい)。したがって、これはADXL345のFREE_FALL割込みで検出できる落下状態に対する最初の判断基準となります。


    2. 衝突:人間の身体は、無重力を経験した後に地面またはその他の物体に衝突しますが、加速度曲線はこれを大きな衝撃として示します。この衝撃は、ADXL345のACTIVITY割込みにより検出されます。したがって、転倒転落を判定する2つ目の基準はFREE_FALL割込み直後のACTIVITY割込みです。


    3. 転倒転落の余波:一般に、人体は転倒転落して衝突した後にすぐに立ち上がることはできません。短時間(意識を失っているときは比較的長い間)は、動けない状態のままとなります。これは、加速度曲線上で一定間隔の平坦なラインとして表されており、ADXL345のINACTIVITY割込みで検出されます。したがって、転倒転落状態を判定する3つ目の基準はACTIVITY割込み直後のINACTIVITY割込みです。


    4. 転倒転落前と転倒転落後の比較:転倒転落後、身体は前とは異なる方向を向いているので、3次元の静的加速度は転倒転落前の最初の状態とは異なります(図4)。ここでは、転倒転落検出器がベルトで身体に装着されているため、最初の状態を含む全加速度履歴が得られるものと仮定します。この場合、INACTIVITY割込み後に3軸の加速度データを読み取り、そのサンプリング・データを最初の状態と比較することができます。図4では静的加速度がY軸上の-1gからZ軸上の+1gに変わっているので、横方向に倒れたのは明らかです。このことから、転倒転落を判定する4つ目の基準はサンプリング・データと初期状態との差が特定のスレッショールド(例:0.7g)を超えているかどうかとなります。

    これらの評価の組み合わせたものが全体的な転倒転落検出アルゴリズムとなります。このアルゴリズムを実行すれば、システムは転倒転落発生時に適正なアラートを出すことができます。もちろん、割込み間の間隔は合理的な範囲の値にする必要があります。一般に、FREE_FALL割込み(無重力)とACTIVITY割込み(衝突)の時間間隔は、人が超高速ビルの屋上から転倒転落することがない限りあまり長くない値に設定します。同様に、ACTIVITY割込み(衝突)とINACTIVITY割込み(実質的に無重力)の時間間隔も、それほど長くない値にします。次のセクションでは、適正な値を実際に用いて具体例を説明します。関連する割込み検出スレッショールドと時間パラメータは必要に応じて柔軟に設定できます。

    転倒転落によって意識不明などの重大な結果が生じる場合は、身体が動かない時間が長くなることもあります。この状態もINACTIVITY割込みで検出することができます。したがって、転倒転落後に非アクティブ状態が検出されて、それが長時間(指定の時間)続く場合は、2つ目のクリティカル・アラートを送ることができます。

    ページの先頭へ



    代表的な回路接続
    ADXL345とマイクロコントローラ間の回路接続は非常にシンプルです。本稿では、テスト・プラットフォームはADXL345とADuC7026アナログ・マイクロコントローラを使用します。ADuC7026は12ビットのアナログI/OとARM7TDMI® MCUを備えています。図5はADXL345とADuC70262間の代表的な接続を示します。ADXL345はCSピンがハイレベルに固定されており、I2Cモードで動作します。SDAとSCL(データとI2Cバスのクロック)はADuC7026の対応するピンに接続されています。ADuC7026のGPIOはADXL345のI2Cアドレスを選択するためのALTピンに接続され、ADXL345のINT1ピンは割込み信号を生成するためのADuC7026のIRQ入力に接続されています。

    ほかのMCUまたはプロセッサ・タイプは、図5に類似した回路接続によってADXL345にアクセスできますが、ADuC7026はマルチチャンネルA/D変換およびD/A変換などのデータ・アクイジション機能も提供します。ADXL345のデータシートには、より高いデータレートを達成するためのSPIモード・アプリケーションの説明があります。



    ADXL345で転倒転落の検出を簡素化
    表1、図5、および付録では、上述したソリューションのアルゴリズムを実現するための情報やプログラムを提供しています。表には各レジスタの機能を記載し、現在のアルゴリズムで使用する値を示しています。各レジスタ・ビットの詳しい定義は、ADXL345のデータシートを参照してください。

    表1のレジスタの一部は2つの値をとります。アルゴリズムは、検出のさまざまな局面に応じてこれらの値を切り替えます。図6はアルゴリズムのフローチャートです。

    図5. ADXL345とマイクロコントローラ間の代表的な回路接続

    図5. ADXL345とマイクロコントローラ間の代表的な回路接続



    16進アドレス レジスタ名 タイプ リセット値 説明 アルゴリズムでの設定 アルゴリズムの各設定の機能
    0 DEVID 読出し専用 0xE5 デバイスID 読出し専用  
    1-1C Reserved - 0x00 予約済み、アクセスしない 予約済み  
    1D THERESH_TAP 読出し/書込み 0x00 タップ・スレッショールド 未使用  
    1E OFSX 読出し/書込み 0x00 X軸オフセット 0x06 X軸オフセット補償、初期化キャリブレーションから取得
    1F OFSY 読出し/書込み 0x00 Y軸オフセット 0xF9 Y軸オフセット補償、初期化キャリブレーションから取得
    20 OFSZ 読出し/書込み 0x00 Z軸オフセット 0xFC Z軸オフセット補償、初期化キャリブレーションから取得
    21 DUR 読出し/書込み 0x00 タップ継続時間 未使用  
    22 LATENT 読出し/書込み 0x00 タップ遅延 未使用  
    23 WINDOW 読出し/書込み 0x00 タップ・ウィンドウ 未使用  
    24 THRESG_ACT 読出し/書込み 0x00 動作スレッショールド 0x20/0x08 動作スレッショールドを2g/0.5gに設定
    25 THRESH_INACT 読出し/書込み 0x00 非動作スレッショールド 0x03 非動作スレッショールドを0.1875gに設定
    26 TIME_INACT 読出し/書込み 0x00 非動作時間 0x02/0x0A 非動作時間を2秒または10秒に設定
    27 ACT_INACT_CTL 読出し/書込み 0x00 動作/非動作の軸イネーブル制御 0x7F/0xFF X軸、Y軸、Z軸の動作/非動作をイネーブルに設定。この場合、非動作=AC結合モード、動作=DC結合モード/AC結合モード
    28 THRESH_FF 読出し/書込み 0x00 自由落下スレッショールド 0x0C 自由落下スレッショールドを0.75gに設定
    29 Time_FF 読出し/書込み 0x00 自由落下時間 0x06 自由落下時間を30ミリ秒に設定
    2A TAP_AXES 読出し/書込み 0x00 タップ/ダブル・タップの軸制御 未使用  
    2B ACT_TAP_STATUS 読出し専用 0x00 動作/タップ源 読出し専用  
    2C BW_RATE 読出し/書込み 0x0A データレートと電源モード制御 0x0A サンプル・レートを100Hzに設定
    2D POWER_CTL 読出し/書込み 0x00 節電機能制御 0x00 通常の動作モードに設定
    2E INT_ENABLE 読出し/書込み 0x00 割込みイネーブル制御 0x1C 動作、非動作、自由落下の各割込みのイネーブル設定
    2F INT_MAP 読出し/書込み 0x00 割込みマッピング 0x00 INT1ピンへの全割込みのマッピング
    30 INT_SOURCE 読出し専用 0x00 割込みソース 読出し専用
    31 DATA_FORMAT 読出し/書込み 0x00 データ・フォーマット制御 0x0B S±16gの測定範囲、13ビット右揃え、ハイレベル割込みトリガ、I2Cインターフェースに設定
    32 DATAX0 読出し専用 0x00 X軸データ 読出し専用
    33 DATAX1 読出し専用 0x00 読出し専用
    34 DATAY0 読出し専用 0x00 Y軸データ 読出し専用
    35 DATAY1 読出し専用 0x00 読出し専用
    36 DATAZ0 読出し専用 0x00 Z軸データ 読出し専用
    37 DATAZ1 読出し専用 0x00 読出し専用
    38 FIFO_CTL 読出し/書込み 0x00 FIFO制御 未使用
    39 FIFO_STATUS 読出し/書込み 0x00 FIFOステータス 未使用
    表1. ADXL345レジスタ機能の説明

    図6. アルゴリズム・フローチャート

    図6. アルゴリズム・フローチャート

    各割込みスレッショールドとアルゴリズム中の関連の時間パラメータについて説明します。

    1. 初期化の後、システムはFREE_FALL割込み(無重力)を待ちます。ここでは、 THRESH_FFは0.75gに設定され、TIME_FFは30ミリ秒に設定されます。


    2. FREE_FALL割込みのアサート後、システムはACTIVITY割込み(衝突)を待ちます。THRESH_ACTは2gに設定され、ACTIVITY割込みはDC結合モードとなります。


    3. FREE_FALL割込み(無重力)とACTIVITY割込み(衝突)の間の時間間隔は200ミリ秒に設定されます。この2つの割込み間の時間が200ミリ秒を上回ると、状態(ステータス)は無効です。200ミリ秒カウンタはMCUタイマによって実現されます。


    4. ACTIVITY割込みのアサート後、システムはINACTIVITY割込み(衝突後動作なし)を待ちます。THRESH_INACTは0.1875gに設定され、TIME_INACTは2秒に設定されます。INACTIVITY割込みはAC結合モードで機能します。


    5. INACTIVITY割込み(衝突後動作なし)は、ACTIVITY割込み(衝突)後3.5秒以内にアサートする必要があります。そうしないと、結果は無効となります。3.5秒カウンタはMCUタイマによって実現されます。


    6. INACTIVITY割込み(衝突後動作なし)は、ACTIVITY割込み(衝突)後3.5秒以内にアサートする必要があります。そうしないと、結果は無効となります。3.5秒カウンタはMCUタイマによって実現されます。


    7. 安定状態と初期状態の加速度差が0.7gのスレッショールドを超えると、有効な転倒転落が検出され、システムは転倒転落アサートを出します。


    8. 転倒転落の検出後に長い無動作の時間があるかどうかを判定するために、ACTIVITY割込みとINACTIVITY割込みを絶えずモニタする必要があります。THRESH_ACTは0.5gに設定され、ACTIVITY割込みはAC結合モードで機能します。THRESH_INACTは0.1875gに設定され、TIME_INACTは10秒に設定され、またINACTIVITY割込みはAC結合モードで機能します。つまり、被験者の身体が10秒間動かないままであれば、INACTIVITY割込みがアサートされ、システムはクリティカル・アラートを出します。被験者の身体が動くと、ACTIVITY割込みが生成されてシーケンス全体が完了します。


    9. アルゴリズムは人が高所から自由落下しているか検出することもできます。2つのFREE_FALL割込み間の間隔が100ミリ秒より短い場合は、それらの割込みを連続的なものとみなします。FREE_FALL割込み(無重力)が300ミリ秒間継続してアサートされた場合は、クリティカルな自由落下アラートが出されます。


    このアルゴリズムは、ADuC7026マイクロコントローラで実行できるようにC言語で開発されています(付録を参照)。アルゴリズムを検証するために、推奨ソリューションではテスト・ケースも提供しています。前方、後方、左方向、右方向の各転倒転落を含む、個々のポジションは10回テストしています。表2にテスト結果を示します。チェックマーク(レ)は各条件が満たされていることを示しています。

    転倒転落ポジション 転倒転落後の長い無動作時間 1 2 3 4 5 6 7 8 9 10
    前方に転倒転落 なし
    あり
    後方に転倒転落 なし
    あり
    左側に転倒転落 なし
    あり
    右側に転倒転落 なし
    あり
    表2. テスト結果


    注:チェックマーク(レ)記号は検出された転倒転落を示しています。アスタリスク(*)記号は転倒転落後の長い無動作時間が検出されたことを示しています。

    この実験は、ADXL345をベースにした推奨ソリューションで転倒転落状態を効果的に検出できることを示しています。ただし、これは単純な実験に過ぎません。推奨ソリューションの信頼性を確認するには、もっと包括的、効果的かつ長期的な実験が必要となります。



    結論
    ADXL345は全機能装備の強力な加速度センサです。本稿では、転倒転落検出の問題に対応した新しい推奨ソリューションをご紹介しました。このソリューションでは、デバイスに内蔵された各種の動作/状態検出機能や高柔軟の割込みを利用しています。テストは、ソリューションが簡素なアルゴリズムと高信頼の検出機能を備えていることを示しています。



    付録—コード例
    このセクションには、ADXL345/ADuC7026プラットフォームをベースにした推奨ソリューションのCコードの例を示しています。プロジェクトには4つの.hファイルと1つの:cファイルがあり、Keil UV3でコンパイルされています。ここには、:cファイルのコードを掲載しています。

    著者
    Ning Jia [ ning.jia@analog.com]はフィールド・アプリケーション・エンジニアであり、アナログ・デバイセズ(中国)のアプリケーション・サポート・チームのメンバーとして2年間の実績があります。中国国内で広範なアナログ製品を技術サポートする仕事を担当しています。北京郵電大学を2007年に卒業し、信号情報処理学の修士号を取得しています。



    参考文献

    1. アナログ・デバイセズの全製品については、 www.analog.com/jpをご覧ください。
    2. www.analog.com/jp/ADuC7026



       

      ご質問、コメントなどございましたら、Analog Diablog™へ英語にてお寄せ下さい。




      ページの先頭へ        Analog Dialogue ホームへ

    沪ICP备09046653号
    感想、意見を送る X
    content here.
    content here.

    感想、意見を送る

    閉じる