有关Android Accelerometer值的问题

时间:2014-02-04 00:49:47

标签: android accelerometer

我对android加速度计值有几个问题。

请注意我使用的是2.2版本(我知道的旧手机),因此无法获得线性加速度值。

我正在使用加速计测量我项目的一些步态模式。

所以我的第一个问题是,为什么加速度计在连接到腿部时会给出高值,如+ -10-40 m / s ^ 2?考虑到尤塞恩博尔特的加速度大约为10m / s ^ 2,人类不可能达到这种加速度吗?

我的第二个问题是,如何从传感器值中手动移除重力?是什么导致了高价值?我在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];
     }

如何获得引力[0]等的初始值?因为它看起来像一个圆形参考(用于获得重力的公式[0]也使用重力[0] - 我没有)。除非这个公式意味着使用另一个传感器来获得重力?

谢谢。

2 个答案:

答案 0 :(得分:0)

它不测量速度。它测量相对于设备加速度计的加速度。您可以使用Maps API获得速度。

gravity []数组是加速度计值。在此示例中,它们乘以alpha以创建低通滤波器,因为传感器非常敏感。要消除重力常数,请减去重力。您可以从SensorManager.GRAVITY_EARTH获得重力恒定。

答案 1 :(得分:0)

对于第二个问题,我也感到困惑,您只需要在第一个循环中使用event.values初始化引力即可。