如何使用Wiimote的加速度计考虑重力影响?

10

我的团队和我正在尝试使用内置的加速度计和WiiMotion Plus陀螺仪在3D空间中跟踪Wiimote。

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

我们查看了Accelerometer gravity components,其中提供了公式(在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;
    }

但它根本没有起作用。加速度是直接从加速计获得的,旋转是指经过常微分方程计算后以弧度测量的。

此外,我们对这个公式如何工作有疑问。由于我们的跟踪考虑了所有维度,为什么偏航角没有被考虑进去呢?

提前感谢任何提供帮助或建议的人。

编辑:

在与我的队友和老板讨论之后,我们发现如果我们正确使用 X、Y 和 Z,则该公式实际上可以起作用。不过我们又遇到了一个问题。

我们遇到的问题是,我们使用的 Wiimote 库基于陀螺仪运动返回相对旋转值。换句话说,如果按钮朝上,将 Wiimote 左右旋转就是偏航角,如果按钮朝向你,偏航角与整个 Wiimote 的旋转应该是相同的,但事实却不是这样。

我们发现欧拉角可能是我们的答案,但我们不确定如何恰当地使用它们。如果在这个新发展方面有任何建议或其他建议,请提出来。

2个回答

2

我敢打赌你的加速度计没有在零重力环境下校准,因此至少要去除重力影响是困难的。


这是否意味着当你把遥控器倒过来时,它就失灵了? - Mark Ransom
不需要在零重力环境中进行校准。重力是向下的1g,并且非常可预测。你可以很容易地进行补偿,这并不像你无法解决的问题。 - dan_waterworth
@dan_waterworth:是的,重力非常可预测;是的,你可以对其进行补偿。这与“从加速度计中消除重力影响”不同。补偿不能消除影响;它只能进行补偿,但在去除和补偿之间存在不同的精确度水平。 - Paul Sonier
您还可以在垂直于重力的平面上校准每个轴。 - dan_waterworth
@dan_waterworth:实际上,多次校准会带来一系列问题。设备并不是理想的;测量(和校准)有其误差范围和公差。问题在于,在(假设)垂直于重力的三个轴向进行校准将给出三组不同的测量值;这些值将不同;其中多少差异是由于测量误差引起的,多少是由于单独轴向的校准引起的?对于理想的设备,您的建议是好的;只是问题不是关于理想设备的。 - Paul Sonier

1

首先,我建议不要使用单独的组件来存储旋转(万向锁),矩阵会更好。通过保持静止并测量(它将向下1g)进行校准。然后对于每个旋转,将旋转矩阵乘以它。然后您可以知道哪个方向是向上,并从表示加速度的向量中减去一个1g向下的矩阵。我知道这听起来有点不可思议,但我有点赶时间,如果您有问题,请添加注释。


当你说“通过‘它’将旋转矩阵乘以多个”时,我不确定你指的是什么。然而,我们正在使用四元数(如果需要,可以将其转换为旋转矩阵),但我们不确定如何正确捕捉重力。如果我们不考虑重力在两个轴上的周期性(wiimote滚动45度,重力在z和x上),我们可以做到这一点。 - Keith D Ball
为了捕捉重力,保持遥控器静止并测量加速度(确保没有旋转)。这将给您一个矢量,它在重力方向(即向下)是1g。对此向量进行归一化,并将其乘以-1。现在您有一个代表与wiimote相关的“上”的向量。现在构造一个矩阵,将单位Z向量旋转到上向量(您将不得不选择前向)。如果对于每个旋转,您将此矩阵乘以旋转矩阵的转置。那么当您通过矩阵旋转Z向量时,您会得到向上的向量。 - dan_waterworth
感谢您的输入。我们目前正在尝试使用四元数来耗尽所有资源。就您的回复而言,我们不确定如何处理它。您所说的“构造一个将单位Z向量旋转到上向量的矩阵”是什么意思? - Keith D Ball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接