繁体   English   中英

消除加速度计读数中的重力影响

[英]Removing gravity effect from accelerometer readings

我正在开发一个应用程序,其中使用了Accelerometer来感测线性加速度 ,但是一段时间后,我知道Accelerometer不会显示线性加速度( 也对其产生重力影响 )。

因此,为了消除重力,我尝试了一些方法,并得出结论,必须设计一个过滤器。

为了设计过滤器,我尝试了以下代码。

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 Developers

现在,我在上面的代码中遇到了一些问题:

  1. 什么是alpha,t和dt?
  2. 如何获得t和dt的值以及如何计算它们?
  3. 还让我知道我用于获得线性加速度的代码是否有效?

这种方法可以“抑制”传感器值的变化。 这就是所谓的“指数平滑” 在快速变化的变量中,您可以通过获取最新值并将其计算为分数(alpha)来找到平均值的估计值。

该算法使用此过滤器来找到常数,“必须”为重力。 总加速度=重力+瞬时加速度,因此可以通过event.values - gravity计算瞬时加速度。

除非您不断加速(火箭发射,在高速公路上加速...),否则此方法有效。 因子α告诉您“平均值”的变化速度,当您想测量变化更快的加速度时,该值需要更大。 这由术语dt反映:当相对于过滤器时间常数较小(较高的事件发生率)时,alpha会变大。 时间常数告诉您平均而言,纹波效应衰减的速度有多快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM