6

我需要为我的应用程序构建指南针。

从阅读文档看来,有两种合理的方法可以做到这一点:

  • Sensor.TYPE_ORIENTATION 方法:这是最简单的方法。问题在于它不准确。当我将我的读数与 Snaptic Compass 进行比较时,它大约相差 10-15 度,这对我来说是不可接受的。
  • Sensor.TYPE_ACCELEROMETER、Sensor.TYPE_MAGNETIC_FIELD 和 getRotationMatrix() 与 remapCoordinateSystem() 和 getOrientation() 方法一起使用:文档说这“通常更准确”。问题是无论我向听众注册的延迟如何,即使设备静止在平面上,指南针也会发疯。

任何解决此问题的建议将不胜感激。

4

2 回答 2

8

看起来 mob1lejunkie 已经解决了这个问题,但只是为了将来参考,让我提一下这里的问题是磁偏角(磁北和真北之间的差异)。您可以试用NOAA 的在线模型,以了解您所在地区的不同之处。

Android 包含一个名为GeomagneticField的模型,该模型可用于计算给定纬度、经度和高度的近似偏角。因此,我认为计算真北所需要做的是从 Sensor.TYPE_ORIENTATION 中读出方位角值,然后将其添加到 GeomagneticField.getDeclination() 中。

于 2010-06-14T08:58:37.147 回答
1

这是为手机制造的紧凑型零件的缺点。我们现在使用的价值 5000 美元的 IMU 有 +/- 2 度的误差,在这个范围内它似乎也很疯狂。

尝试远离干扰、金属表面,看看是否有所改善。如果不是,我不想透露坏消息,但那是硬件。

你见过这些吗?

http://developer.android.com/reference/android/hardware/SensorManager.html

http://groups.google.com/group/android-developers/browse_thread/thread/bbb0e8b97c673cf9/5c16bc2e49f6e972?lnk=raot

于 2010-05-04T23:01:06.837 回答