使用磁力计从加速度计读数中得出万有引力

时间:2019-01-12 22:45:22

标签: java android android-sensors

我想测量设备的实际加速度,因此必须消除重力的影响。问题是,我无法使用TYPE_GRAVITYTYPE_LINEAR_ACCELERATION之类的传感器,因为TYPE_GYROSCOPE传感器在我的android设备中不可用。我发现here是解决此问题的一种方法,是应用低通滤波器来隔离重力引起的加速度。

public void onSensorChanged(SensorEvent event){
    // alpha is calculated as t / (t + dT)
    // with t, the low-pass filter's time-constant
    // and dT, the event delivery rate

    final float alpha = 0.8;

    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];
}

但是不幸的是,任何高通滤波器或低通滤波器都会引起延迟。 我的Android设备中提供了磁力计传感器。并根据此page

  

也可以使用磁力计从线性加速度传感器中去除重力,因为磁场矢量或多或少是稳定的。

我的问题是,我可以使用加速度计磁力计传感器消除由于重力引起的加速度吗?如果可以,请指导我。 预先感谢。

0 个答案:

没有答案