プロジェクトのために、私のチームと私は、組み込みの加速度計と WiiMotion Plus ジャイロスコープを使用して、3D 空間で Wiimote を追跡しようとしています。
ODE ( http://www.alglib.net/にあります) を使用して回転と位置を追跡することはできましたが、加速度計から重力コンポーネントを削除する際に問題が発生しました。
式を持つ加速度計の重力コンポーネントを調べました(C#/ XNAで実装)
private Vector3 RemoveGravityFactor(Vector3 accel)
{
float g = -1f;
float pitchAngle = (Rotation.Z);
float rollAngle = (Rotation.Y);
float yawAngle = (Rotation.X);
float x = (float)(g * Math.Sin(pitchAngle));
float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle));
float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle));
Vector3 offset = new Vector3(x, y, z);
accel = accel - offset;
return accel;
}
しかし、それはまったく機能しません。参考までに、加速度は加速度計から直接得られたものであり、回転は ODE で処理された後にラジアンで測定されます。
また、この式がどのように機能するかを理解するのに問題があります。追跡ではすべての次元が考慮されているのに、Yaw が考慮されないのはなぜですか?
提供されているアドバイスやヘルプを事前に感謝します。
編集:
チームメイトや上司と話し合った結果、X、Y、Z を正しく使用すれば、この式が実際に機能することがわかりました。しかし、私たちは別の切り株に来ました。
私たちが抱えている問題は、使用している Wiimote ライブラリがジャイロスコープの動きに基づいて相対的な回転値を返すことです。つまり、ボタンが上を向いている場合、wii リモコンを左右に回転させることがヨーであり、ボタンが自分の方を向いている場合、ヨーは、wii リモコン全体の回転であるべき場合と同じです。
オイラー角が答えになる可能性があることがわかりましたが、それらを適切に使用する方法がわかりません。この新しい開発についての意見やその他の提案があれば、お寄せください。