17

我正在用 Google Android 2.1 编写一个应用程序,它需要知道设备(HTC Hero)面对的方向(n/w/s/e)。传感器及其监听器运行良好,但我从传感器获得的值完全糟糕。例如,它告诉我当设备面向西南时我将面向北方......

这似乎是 android 设备的一个已知问题。我在网上找到的“解决方案”如下所示:

  • 摇晃设备
  • 像八个一样移动设备
  • 点击设备背面

这被认为会触发传感器重新校准。而且:“四处走动”的东西对我有用……但我猜这不是很专业……

所以 - 如何从 SDK 触发方向传感器的重新校准?我需要正确校准传感器,没有任何花哨的东西会使这个应用程序的用户在他们“手动”重新校准他们的手机时看起来像完全白痴......

有没有办法做到这一点“正确”?

编辑:

或者:是否有任何方法可以通过编程方式确定设备是否正确校准?可以这么说,作为后备选项......然后我可以警告用户设备需要“手动”重新校准。

4

2 回答 2

3

我不相信有一种方法可以以编程方式知道您的罗盘传感器是否正确校准,除非您使用 GPS 等辅助数据源。如果您可以使用 GPS,那么当用户移动时,您可以将 GPS 移动与指南针航向进行比较并进行校正。请记住,本地磁场会破坏罗盘读数,并且设备不知道您是在森林中间​​还是在变压器旁边。

使用这些微型设备,您总是需要处理一些偏差。如果您也检查加速度计的值,您会发现它们在静止时并不总是返回 9.8 m/s^2(或至少在设备之间始终如一)。

在您的帮助下,您可能只需要告诉用户以八字形旋转/扭转他们的手机即可重置指南针。

于 2010-07-04T19:39:28.447 回答
0

我假设您指的是 Hero 内部的磁力计。

校准它是一项艰巨的任务,并且将/应该始终需要用户交互才能实现可靠的校准。有不同的策略来处理它。您可以要求用户将设备保持在北向,然后重新调用。如果用户不知道北方在哪里,您可以要求他们将设备指向太阳,并根据位置和时间计算出北方在哪里。

撇开校准不谈,我猜您的问题是您从传感器获得的读数不准确。当然,校准是准确读数的先决条件,但还有其他因素在起作用。

通常的做法是用不同传感器的数据补充来自一个传感器的传感器数据以提高准确性。当用户移动时,您可以使用 GPS 来确定航向。但是,如果他移动缓慢,这也是不准确的。您可以整合加速度计报告的数据来猜测方向变化(而不是绝对方向)。但老实说,在这种情况下,陀螺仪会更理想。

像这样工作的系统有时被称为惯性导航系统(INS),因为它们可以在空间中给定一个固定点的情况下准确地确定它们随后的相对位置和方向,而无需进一步的外部数据。当绝对位置(例如通过 GPS 检索)可用时,使用卡尔曼滤波器不时地重新调用系统是常见的做法。

尽管实现一个成熟的 INS 是不现实的,但您当然可以从它们的工作原理中汲取一些想法,以使您的方向读数更准确。

于 2010-07-24T08:29:03.390 回答