如何将Android磁力计读数转换为世界坐标空间?

时间:2012-11-25 07:52:01

标签: android android-sensors magnetometer

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

Magnetometer报告手机三个轴上的磁场强度。我观察到,在同一位置,如果手机的标题发生变化,磁读数会发生显着变化。 然而,据我所知,无论手机的放置姿势如何,地球在特定位置的磁场都应该相对稳定。

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

我已经提到了Android源代码,特别是getOrientation()函数和getRotationMatrix()函数。我希望从他们的代码实现中获得一些帮助。但我不太了解。有人可以对这些函数的算法原理给出任何解释吗?

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

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

1 个答案:

答案 0 :(得分:0)

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

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