10

プロジェクトのために、私のチームと私は、組み込みの加速度計と 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 リモコン全体の回転であるべき場合と同じです。

オイラー角が答えになる可能性があることがわかりましたが、それらを適切に使用する方法がわかりません。この新しい開発についての意見やその他の提案があれば、お寄せください。

4

2 に答える 2

2

あなたの加速度計は無重力状態で校正されていなかったに違いないので、少なくとも重力の影響を取り除くのは難しいでしょう。

于 2010-11-10T20:46:58.100 に答える
1

First I'd suggest not using individual components to store the rotation (gimbal lock), a matrix would work better. calibrate by holding it still and measuring (it will be 1g downward). then for each rotation, multiple the rotation matrix by it. then you can tell which way is up and subtract a matrix of 1g down from the vector representing the acceleration. I know that doesn't make a lot of sense but I'm in a bit of a rush, add comments if you have questions.

于 2010-11-10T21:07:22.817 に答える