Android加速度计在应用耕作修正时检测数据以检测Z轴的变化时出现问题

时间:2017-03-07 13:25:18

标签: java android matrix coordinates accelerometer

我需要使用3轴加速度计检测Android设备Z轴的变化,其中x1和y1是水平分量,z1是某些耕作状态下感应加速度信号的垂直分量该设备。

现在假设3轴加速度计放置在平坦的水平面上时会出现空闲情况,在这种情况下,它可以感知来自地球的重力加速度,

z1 = g = 9.8 

x1 = y1 = 0

重力加速度的方向是绝对的,因此它可用于计算加速度计的倾斜角度。

倾斜角度'角度X'与x1和z1有关,我使用下面的等式找到它:

double angleX = Math.toDegrees(Math.atan2(x1, z1));

倾斜角度'角度θ'与y1和z1有关,我用下面的等式找到它:

 double angleY = Math.toDegrees(Math.atan2(y1, z1));

考虑到沿x和y方向倾斜的情况,我将(1)和(2)组合以获得真实的水平和垂直分量,记为x2,y2和 Z2。

使用以下等式来校正感应加速度:

 double x2 = x1 - (9.8 * Math.sin(angleX));
 double y2 = y1 - (9.8 * Math.sin(angleY));
 double z2 = z1 - (9.8 * Math.cos(angleX) * Math.cos(angleY));

现在,当我使用上述方法测试空闲情况并使用我的值时,如下所示

x1=0
y1=0
z1=9.8

这意味着不应该有需要修正的

public static void testCase() {
        float[] values = {0, 0, 9.8f};
        tilledCorrection(values);
    }

    public static double[] tilledCorrection(float[] values) {
        float x1 = values[0];
        float y1 = values[1];
        float z1 = values[2];
        double angleX = Math.toDegrees(Math.atan2(x1, z1));
        double angleY = Math.toDegrees(Math.atan2(y1, z1));
        double x2 = x1 - (9.8 * Math.sin(angleX));
        double y2 = y1 - (9.8 * Math.sin(angleY));
        double z2 = z1 - (9.8 * Math.cos(angleX) * Math.cos(angleY));

        Log.e("", "x2=" + x2);
        Log.e("", "y2=" + y2);
        Log.e("", "z2=" + z2);

        Log.e("", "angleX=" + angleX);
        Log.e("", "angleY=" + angleY);

        return new double[]{x2, y2, z2};
    }

输出

X2 = 0.0

Y2 == 0.0

Z2 = 1.9073486

的AngleX = 0.0

angleY = 0.0

我不知道为什么我的z轴在休息两轴没有变化时发生变化,而且是空闲状态。

如果设备未处于空闲状态,我需要做的是找到z轴的变化我们将应用经过精确修正以获得准确的感应值。

请建议任何链接或指南

提前致谢

0 个答案:

没有答案