SatooRu's Profile

全ての記事梶研の進捗日常の記録制作物一覧

梶研 [端末姿勢推定]

2023年9月12日

thumbnail

端末姿勢推定

出席率

  • 3年セミナー:??%

スケジュール

短期的な予定

  • 端末姿勢推定
    • データを収集
    • グラフを作成
    • 静止状態の判別
    • 端末の姿勢を推定
    • 加速度を世界座標に変換
    • 角速度を世界座標に変換
    • カルマンフィルターを用いた推定

長期的な予定

  • 9月23日 技育展 決勝
  • 9月中旬まで 端末姿勢推定(加速度, 角速度)
  • 10月まで? 端末姿勢推定(カルマンフィルター)
  • 10月中 Kotlin(とRust)の勉強 「いつでもセンシングアプリ」

進捗

やりたいこと

端末の姿勢推定
加速度を端末座標から世界座標にする

考え方

  • 加速度に変化がない(動いていない)時は、重力加速度の方向から端末状態を出す
  • 変化がある時は、ジャイロセンサーから端末状態を出す
  • 最終的には カルマンフィルター を使う

前回

output_0.png (113.5 kB)

灰色は動いていると判断した区間
橙は区間内の最大値と最小値の差

200ms(80フレーム) ごとに区切り、区間内の最大値と最小値の差が 1m/s^2 以下の時は、
動いていないと判断する

静止状態の判別を変更

差ではなく、分散を用いる
200ms(80フレーム) ごとに区切り、区間内の分散が 0.15m/s^2 以下の時は、静止状態とする

加速度のグラフ(ノルム)

output_1.png (111.4 kB)
  • 静止状態との差が大きくなっていて良い

角速度から端末の傾きを出す

角速度を積分して角度を出す
output_5.png (82.1 kB)

output_3.png (67.5 kB)

加速度から端末の姿勢を出す

加速度の絶対値で各軸の加速度を割って、arccosをとる

1gravity = math.sqrt(x ** 2 + y ** 2 + z ** 2) 2angle_x = math.acos(x / gravity) 3angle_y = math.acos(y / gravity) 4angle_z = math.acos(z / gravity)
output_2.png (94.7 kB)

回転軸の参考

assets_2.png (5.8 kB)

加速度と傾きを使い分ける

分散が 0.15m/s^2 以下の時は、加速度からの傾きを使う
0.15m/s^2 以上の時は、角速度を足して端末の回転を反映させる

output_4.png (78.9 kB)
  • 傾きが大きすぎる
    • 角速度を反映時にサンプリング周波数を掛けていない
    • 単位が raddeg で違った
  • より大きな動作(傾き)でやるべき?
    • スマホ持って各軸90度程度回転など

修正後

output_6.png (56.9 kB)

結構理想通りにはなったが正解が分からない

  • 加速度を世界座標系に変換する
  • 正解データとの比較ができるデータを取る

加速度を世界座標系に変換

output_7.png (136.6 kB)

明らかにおかしい

  • ベクトル(加速度)を回転させる関数は以前のものを使用したため合ってるはず
  • 元の加速度と姿勢推定後のデータのサンプリング周波数の違い?

余談

キャンプした

geekcampcamp.jpg (801.2 kB)

センシングした
bluesheet.png (64.0 kB)

技育CAMP vol9(工科展)

学校(食堂等)の混雑を知れるアプリ

koukaten.png (387.7 kB)

賞はもらえなかったが、多くの反響をいただけた

x.png (1.5 MB) kaepon.png (1.6 MB)