0

试图了解加速度计传感器的官方 Android 文档。那里说:

显然,为了测量设备的真实加速度,必须消除重力的影响。这可以通过应用高通滤波器来实现。相反,可以使用低通滤波器来隔离重力。

过滤器的代码是:

 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];
 }

好的。假设我以 6 m / s^2 的加速度将设备纵向推向天空。我认为在那种情况下我应该得到类似[0, 15, 0]in 的东西event.values,对吧?

因此,当我在 Excel 中将此过滤器应用于 20 个点时,结果gravity往往等于[0, 15, 0]linear_acceleration旨在[0, 0, 0].

我错过了什么?

PS我知道TYPE_GRAVITY,只是想理解数学。

PPS 另外,为什么TYPE_GRAVITY传感器y在纵向模式下返回正值(+9.806)?不应该-9.806取而代之吗?

4

1 回答 1

1

关于 TYPE_GRAVITY,这样想:

你坐在没有重力的空间中漂浮的盒子里。如果喷气机以 +9.8 的加速度向上推动您(在 +Y 方向)。你感觉到的是向下 9.8 的重力。因此,从技术上讲,您因重力而感受到的力相当于将您向上推的空间中的力。

这就是你得到+9.8的原因。但同样,这些就是它们的“定义”方式。如果他们将重力定义为 -9.8,则没有任何问题。您需要做的就是使数学的所有部分都遵循相同的规则。不要改变约定...

于 2014-03-09T22:44:37.190 回答