如何使用wiimote的加速度计来计算重力?

Kei*_*all 9 c# accelerometer gravity wiimote

对于一个项目,我和我的团队一直在尝试使用内置的加速度计和WiiMotion Plus陀螺仪在3D空间中跟踪wiimote.

我们已经能够使用ODE(在http://www.alglib.net/上找到)跟踪旋转和位置,但是我们遇到了从加速度计中移除重力分量的问题.

我们研究了具有公式的Accelerometer重力组件(在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;
    }
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.作为参考,加速度直接来自加速度计,并且在通过ODE工作之后以旋转角度测量旋转.

此外,我们在理解这个公式是如何工作方面遇到了问题.由于我们的跟踪考虑了所有维度,为什么不考虑Yaw?

提前感谢您提供的任何建议或帮助.

编辑:

在与我的队友和老板讨论之后,我们发现如果我们正确使用X,Y和Z,这个公式实际上会有效.我们来到另一个树桩了.

我们遇到的问题是我们正在使用的Wiimote库根据陀螺仪运动返回相对旋转值.换句话说,如果按钮朝上,左右旋转wiimote是偏航,如果按钮面向你,当它应该是整个wiimote的旋转时,偏航是相同的.

我们发现欧拉角可能是我们的答案,但我们不确定如何恰当地使用它们.如果对此新开发项目有任何意见或任何其他建议,请给予他们.

Pau*_*ier 2

我敢打赌,你的加速度计没有在零重力下进行校准,所以至少消除重力的影响是很困难的。