2

我正在 Android 传感器上编写一些程序,我对磁力计传感器的读数感到困惑。

磁力计报告手机三个轴上的磁场强度。我观察到在同一位置,如果手机的航向发生变化,磁读数会发生巨大变化。但是,在我的理解中,无论手机的放置姿势如何,特定位置的地球磁场都应该是相对稳定的。

所以,我的问题是,有没有办法将原始读数从 3 轴磁力计传感器转换到世界坐标系?加速度计和方向数据也可在手机上获得。如果是这样,我怀疑即使手机的航向发生变化,转换后的磁力也应该是相同的。

我参考了 Android 源代码,特别是 getOrientation() 函数和 getRotationMatrix() 函数。我希望从他们的代码实现中得到一些帮助。但我不是很明白。有人能解释一下这些函数的算法原理吗?

函数代码链接:http: //www.netmite.com/android/mydroid/cupcake/frameworks/base/core/java/android/hardware/SensorManager.java

谢谢!我真的很急于解决这个问题。

4

1 回答 1

0

这是不可能的,因为设备不知道它在世界空间中的方向。

当然,可以通过传感器输入来猜测方向,这就是 getOrientation() 和 getRotationMatrix() 所做的。然而,在很长的时间尺度上,只有加速度(通过重力)和磁场的测量才能提供必要的信息。陀螺仪数据可用于在更短的时间内细化估计,但不能保证 getOrientation 使用它,并且可能该传感器甚至不存在于特定设备上。这意味着使用 getOrientation 进行反向转换将使用您想要更正的完全相同的数据,从而使其无用。

于 2013-04-14T20:12:20.317 回答