あるあるセンサー問題を知っておく
- 遅延がある
- 精度のよしあしがある
- 速い動きは取得できないことが多い(分解能)
- 姿勢推定は腕組みすると死亡する (最近は学習が極まってきて取得できるやつもある: BlazePose、MoveNet)
- 慣性系のセンサーは使い続けていくうちに、値がずれたりする (ドリフト)
- 光学系 + 慣性系の組み合わせで動くものもある(Steam VRのLighthouseシステム: 赤外線+加速度+ジャイロ)
- 例えばモーションキャプチャーツールのWikipediaを見ると、各種センシングでメリット・デメリットがあることがわかる
などなど、JavaScriptやUnityと違って、生身を扱うぶん、クセがだいぶある。
なので正しい使用方法を知ることから始めなくてはならない。説明書を読まずに進めると、確実にハマる。
正しい使用方法を知るとは
- 使い方を正しく知る
- 動作環境を知る
- 精度の限界を知る
- 遅延を知る
1. 使い方を正しく知る
- 公式の使い方を本当によく読む
- 「推奨する使い方。推奨しない使い方」が書いてある
- データシートを読む
- 俺もよく知らんけど、ふいんき(なぜかへんかん略)で読んでる
2. 動作環境を知る
- 動作する温度は重要
- 温度が高い場所や排熱ができない空間で使うと、ふつうに落ちる (回路保護等)
- 温度が低いと起動しない場合もある(気温が低いとバッテリーが弱くなる等)
- 屋外
- 「屋外で20mまで測定可能!」と書いていても、実際は3-5mしか使えない、ということは多数ある (Kinect/RealSense等)
- 光学系
- 光学系だと反射するものや、日光のような強い照明があると機能しなくなることがある (Kinect/RealSense/HTC VIVE等)
3. 精度の限界を知る
限界性能を知っておく。ついついなんでも取得できると思っちゃうけど、絶対にそんなことはない。真っ暗闇で写真を撮ろうとしても無理なのと同じで、各種センサーにも限界がある。
- ログを取ってビジュアライズして、限界を検証する
- 録画してビジュアライズしたものと突き合わせて検証する
- → 野球のバットにセンサーをつけて、バットの軌道を取得するものなら
- センサーで取った値をプロットしてみたものとと、カメラで録画したものを並べて比較してみる
- バットのスイング開始時はセンサーの値が正常だが、スイングスピードが最速になったタイミングではズレる。といったことを確認して、どのような対応が可能かを考える。
- → 野球のバットにセンサーをつけて、バットの軌道を取得するものなら
- 値がガクガクすることも多数
- 安定せずに値が大きくズレたり、穴があくこともある
- 外れ値をフィルターしたりなめらかに補間したりする必要あり
- TouchDesignerならFilterノードがあって便利
4. 遅延を知る
センサー内で処理 → 送信 → 受信 → 解析 → 表示
表示までにかかる工程はけっこうある。必ず遅延する。どれくらいズレているのか、それが体感で許容できるズレなのかを確認しておく。
例: OptiTrackでバットをトラッキング→Unityで表示するまでの遅延を計測してみた
- 画面にフレームカウントやタイムコードを書く
- ハイフレームレートカメラで録画
- →どの動きのときに、何フレーム遅延しているかを確認する
まとめ
どうあがいても100%の精度にはならない。あるあるネタをストックしておき、体験として成立できるのかどうかを見極めていく。