我需要使用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轴的变化我们将应用经过精确修正以获得准确的感应值。
请建议任何链接或指南
提前致谢