質問
Wiimoteには3つの加速度計があるため、加速度計の読み取り値を3Dベクトルに変換することは可能ですか?
ピッチ/ロールを抽出するトリックは知っていますが、XおよびZ加速度計のみを使用し、ジンバルロックの問題があります。
私が望むのは、完全な3Dベクトルで、四元数回転表現に変換できます。
解決
さらに考えると、加速度計の値は、私が探していたベクトルの成分です ...参照ベクトルとこのベクトル間の最短アークをクォータニオンとして表現するだけです。
たとえば、 accel
が加速度計の値を含む(正規化された)ベクトルの場合:
reference = Vector3(0, 0, 1)
axis = crossp(accel, reference)
angle = acos(dotp(accel, reference))
q = Quaternion::from_xyzr(axis, angle)
rotation_matrix = q.matrix()
「静止位置」における加速度計の値であるため、基準ベクトルとして{0、0、1}を選択しました。 (テーブルの上でWiimote、あなたの方を指しています)。
これにより、X / Z加速度計のピッチ/ロール変換と同じ種類の動きが得られますが、垂直位置でのジンバルロックはありません。
唯一の問題は、地球の重力軸で行われた回転に関する情報を取得できないことです...これがMotionPlusの目的であると思います。
所属していません StackOverflow