我想测量设备的实际加速度,因此必须消除重力的影响。问题是,我无法使用TYPE_GRAVITY
和TYPE_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:
也可以使用磁力计从线性加速度传感器中去除重力,因为磁场矢量或多或少是稳定的。
我的问题是,我可以使用加速度计和磁力计传感器消除由于重力引起的加速度吗?如果可以,请指导我。 预先感谢。