2010-05-04 165 views
5

我需要为我的应用程序构建指南针。指南针精度难题

从阅读文档,似乎有这样两种方式合理:

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

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

回答

8

貌似mob1lejunkie已经想通了这一点了,但只是以供将来参考,让我提的是这里的问题是magnetic declination(磁北与真北之间的差异)。你可以试试an online model from NOAA来了解你在世界上的差异。

Android包含一个名为GeomagneticField的模型,可以使用该模型计算给定纬度,经度和高度的近似偏角。所以,我相信你需要做的是计算真北,从Sensor.TYPE_ORIENTATION中读出azimuth value,然后添加到GeomagneticField.getDeclination()中。

+0

是的,这正是问题所在。 – mob1lejunkie 2010-06-16 05:22:50

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

+0

我想说的是在同一部手机(Nexus One)上厨房桌子上的完全相同的位置Snaptic Compass,Android Market的第三方应用程序,然后我的阅读更准确。 我想知道Snaptic使用什么技巧来获得更准确和可靠的阅读。 – mob1lejunkie 2010-05-04 23:23:32

+0

看到我添加回答的链接。 – 2010-05-07 03:19:41

+0

在突触指南针设置后,我注意到它使用真北,而我使用磁北。现在,我也使用真正的北方我的应用程序和突触指南针具有相同的阅读。当然,阅读并不完美,但这是由于Nexus One硬件不是我指南针实施的缺点。 pinnacler感谢您的帮助! – mob1lejunkie 2010-05-08 08:53:23