行動認識におけるセンサーの特徴

かなり久々のエントリ。

今回は卒業研究でやっている行動認識での、センサー毎の特徴についてまとめてみた。
認識した行動は

  • 徒歩
  • 電車
  • 操作
  • 停止

の5つ。
すげぇ頑張れば加速度センサーで全部識別できそうな気もするけど、せっかくAndroidツールとして使うので複数のセンサーを使って認識したいと思う。

そこで、さっそく搭載されているセンサーを使って取得したデータをグラフ化して統計を取ってみた。
センサーのサンプルレートは1000ms。
微妙に連続値とはならないので波形とはならないが、それなりに特徴のあるグラフができたように思われる。
ちなみに使用したセンサーは

  • 三軸加速度(LINER_ACCELERATION)
  • 重力(GRAVITY)
  • 地磁気(MAGNETIC_FIELD)
  • 傾き(ORIENTATION)
  • 回転ベクトル(ROTATION_VECTOR)

の5つ。
それぞれどんなセンサーなのかは過去のエントリに書いてあると思うので、そちらを参照。

前にも書いたが、各センサーには3つのargumentがある。
それぞれがどんな値を取るかも、一応調べてまとめてみた。

GRAVITY(m/s^2)
arg1:X方向の重力
arg2:Y方向の重力
arg2:Z方向の重力

ORIENTATION(°)
arg1(0~360):方位角。磁北方向とy軸との間の角度。0=北、90=東、180=南、270=西
arg2(-180~180):傾斜。X軸周りの回転角度。ZからYに向かう時に正の値。
arg3(-90~90):回転。Y軸周りの回転角度。XからZに向かう時に正の値。

MAGNETICFIELD(uT)
arg1:X方向の磁界
arg2:Y方向の磁界
arg2:Z方向の磁界

ROTATIONVECTOR(void)
arg1:x軸を角度θだけ回転した値(sin(θ/2))
arg2:y軸を角度θだけ回転した値(sin(θ/2))
arg3:z軸を角度θだけ回転した値(sin(θ/2))


さて、以下が実際にグラフ化したデータに基いて見られる特徴(ぱっと見た感じ)
これをもとに学習させて、分類をしていきたいと思う。

考えられる特徴量

① walk を判別
??[gravity arg2,arg3]がほぼ同じ振動、かつ[gravity arg1]は±10付近を振動

② train を判別
[manetic_field arg1]が大幅に振動しているならばtrain
??[gravity arg1,arg3]が0以上で振動かつ[gravity arg2]が0以下で振動

③ stop を判別
[orientation]のすべてのargが0で一定ならばstop
[gravity]のarg1,arg2が0で一定ならばstop
[gravity arg3]が10で一定ならばstop
[rotation_vector]のarg1,arg2が0で一定ならばstop
[rotation_vector arg3]が-10で一定ならばstop

④ operate を判別
[orientation]arg2,arg3の振幅が20未満で振動
[orientation arg1]が滑らかな振動

⑤ car を判別
[orientation arg2]が大幅に振動かつ[orientation arg3]は振幅20未満で振動。

備忘録として、今日はここまで。