【问题标题】:How to transform Android magnetometer readings to the the world's coordinate space?如何将Android磁力计读数转换为世界坐标空间?
【发布时间】:2012-11-13 00:15:15
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android android-sensors magnetometer


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多