智能手机的后处理传感器读数 - 从磁力计计算的重力

时间:2013-03-18 13:38:42

标签: android matlab smartphone gravity magnetometer

我正在尝试从Android应用程序中提取Matlab信息,记录加速度计,陀螺仪和磁力计的输出。由于我需要找到线性加速度,我假设我可以从考虑重力的加速度计计算它。我认为应该可以通过检查基于磁力计输出(地球磁场)的电话方向来找到。但是我无法用任何公式得到正确的结果。我是对的,通过磁力计可以找到重力矢量吗?如果是这样,我应该如何解释传感器读数?

2 个答案:

答案 0 :(得分:0)

不,不可能从磁力计中找到重力。


您正在寻找的是传感器融合。我已根据此手稿为Shimmer platform实现了传感器融合,它基本上是一个教程:

Direction Cosine Matrix IMU: Theory

我强烈推荐的另一个资源是Sensor fusion on Android devices.

但你为什么要自己做呢? SensorManager已经提供了您想要的内容。

答案 1 :(得分:0)

通过对加速度计值执行低通滤波器以获得重力,然后从重力中减去加速度计值,可以获得线性加速度。以下代码来自http://developer.android.com/reference/android/hardware/SensorEvent.html

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