梶研 [センシングはじめました]
2023年4月18日

センシングはじめました
出席率
- 3年セミナー:??%
スケジュール
短期的な予定
- Androidアプリ開発 お試し
- Android Stdio の設定
- 加速度センサーを見るアプリをつくる
- csv出力 & PCに移す
- 加速度から距離を出してみる
- 加速度センサーの値を取る(直線運動)
- Pythonでグラフ化する
- 加速度グラフを距離グラフ
- 歩数推定
- 加速度センサーの値を取る(歩行)
- グラフ化 & フィルターをかける
- 歩数を取得する
長期的な予定
未定 (歩行軌跡の可視化をしてみたい)
Androidアプリ開発 お試し
参考サイト
リポジトリ
変更点
- バージョンに合わせたコードに修正
TextViewを行ごとに分割した
加速度から距離を出してみる
加速度センサーの値を取る
スマホをx軸正の方向に30cm動かした
環境
- 端末
- iPhone 12
- 使用アプリ
- phyphox
Pythonでグラフ化する
- バージョン
- 3.10.10
- 使用ライブラリ
- pandas
- matplotlib
- numpy
加速度グラフを距離グラフにする
加速度[m/s^2]を微分※すると速度[m/s]になる速度[m/s]を微分※すると距離[m]になる
※間違い
x軸の加速度, 速度,距離グラフ (誤り1)
速度, 距離グラフ の形がおかしい
→ 微分 と 積分 を逆に認識していた
(気付くのに3時間掛かった...)
x軸の加速度, 速度,距離グラフ (誤り2)
形はそれっぽくなった
値が明らかに大きすぎる
→サンプリング周波数を考慮していなかった
面積分のイメージ
面積分は1本1本の面積を足していくもの
面積ではなく長さ(図で言う縦)を足していた
→ 全ての値に x0.01(100Hz) する
最終的なグラフ
歩数推定
加速度センサーの値を取る(歩行)
まっすぐ5歩
(スマホのz軸正が上向き、y軸正が左向きになるように腰の位置で手に持つ)
グラフ化 & フィルター
平滑化フィルター
平滑化1
(N0 + N-1 + N-2 + N-3 + N-4) / 5
(N0が現在の値)
サンプリング周波数100Hzなので、5つの平均ではあまり意味がない?
平滑化2
(N0 + N-1 + N-2 + ... + N-9) / 10
だいぶ滑らかになったが、1歩に対し頂点が複数ある
平滑化3
(N0 + N-1 + N-2 + ... + N-19) / 20
1歩に対し1頂点になった。
(平滑化フィルターだけでいいのだろうか)
過去との平均の為、波が大きく後ろにずれた。
より良いやり方があるらしい
→歩数推定(esa)
rolling_mean = data.rolling(window=10).mean()
加速度のノルムのグラフ
norm: そのままのデータ
自作関数: さっきまでのやり方
pandas.rolling(): 良さそうなやり方
pandas.rolling() を上手く使ったほうが良い
歩数を取得する
ピーク検出
赤丸が 6つ
→ 6歩?
正しくは5歩
原因
5歩ののちに立ち止まる時の足を揃える動作も含まれてしまった
データを取り直す
進路関係
なし