【问题标题】:How do I account for gravity using a wiimote's accelerometer?如何使用 wiimote 的加速度计计算重力?
【发布时间】:2011-05-08 03:01:21
【问题描述】:

对于一个项目,我和我的团队一直在尝试使用内置加速度计和 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;
    }

但它根本不起作用。作为参考,加速度直接来自加速度计,旋转通过 ODE 后以弧度测量。

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

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

编辑:

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

我们遇到的问题是,我们使用的 Wiimote 库会根据陀螺仪的运动返回相对旋转值。换句话说,如果按钮朝上,左右旋转wiimote就是yaw,如果按钮朝向你,yaw应该是整个wiimote的旋转。

我们发现欧拉角可能是我们的答案,但我们不确定如何正确使用它们。如果对这个新开发有任何意见或任何其他建议,请给他们。

【问题讨论】:

    标签: c# accelerometer wiimote gravity


    【解决方案1】:

    首先我建议不要使用单独的组件来存储旋转(万向节锁),矩阵会更好。通过保持静止并测量来校准(它将向下 1g)。然后对于每次旋转,将旋转矩阵乘以它。然后你可以知道哪条路是向上的,并从代表加速度的向量中减去一个向下 1g 的矩阵。我知道这没有多大意义,但我有点着急,如果您有问题,请添加 cmets。

    【讨论】:

    • 当您说“将旋转矩阵乘以 'it'”时,我不确定您指的是什么。但是,我们使用的是四元数(如果需要,可以将其转换为旋转矩阵),但我们不确定如何正确捕捉重力。如果我们不考虑重力在两个轴上的时间段(wiimote 滚动 45 度,重力在 z 和 x 上),我们可以这样做
    • 要捕捉重力,请保持遥控器静止并测量加速度(确保没有旋转)。这将为您提供在重力方向(即向下)为 1g 的矢量。将此向量归一化并将其乘以 -1。现在你有一个向量表示相对于 wiimote 的“向上”。现在构造一个矩阵,将单位 Z 向量旋转到上向量,(您必须选择向前)。如果对于每次旋转,您都将该矩阵乘以旋转矩阵的转置。然后,当您通过矩阵旋转 Z 向量时,您会得到向量。
    • 感谢您的意见。我们目前正在尝试使用四元数耗尽所有资源。就您的回复而言,我们不确定如何处理它。你是什​​么意思 - “构造一个将单位 Z 向量旋转到向上向量的矩阵?”
    【解决方案2】:

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

    【讨论】:

    • 这是否意味着当你把它倒过来时遥控器会失效?
    • 它不需要在零重力下校准。重力下降1g,非常可预测。这不是你无法弥补的。
    • @dan_waterworth:是的,重力是非常可预测的;是的,你可以弥补它。这与“消除加速度计的重力效应”不同。补偿不会消除效果;它会对其进行补偿,但在移除和补偿之间存在不同程度的准确度。
    • 您还可以在垂直于重力的平面中校准每个轴。
    • @dan_waterworth:实际上,多次校准会带来一系列问题。设备并不理想;测量(和校准)有其误差范围和公差。问题变成了在(比方说)垂直于重力的 3 个轴上进行校准会给您提供三组不同的测量值;这些会有所不同;有多少是由于测量误差造成的,有多少是由于个别轴校准造成的?使用理想的设备,您的建议是好的;只是问题与理想设备无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2014-04-01
    相关资源
    最近更新 更多