【问题标题】:how to calibrate the orientation sensor in android?如何在android中校准方向传感器?
【发布时间】:2010-07-04 09:48:49
【问题描述】:

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

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

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

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

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

有什么办法可以做到“正确”吗?

编辑:

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

【问题讨论】:

  • 一旦我在市场上看到一个指南针应用程序。如果磁场牵引力不好,此应用程序会发出消息。我不知道这是如何工作的,所以我对这个答案也很感兴趣

标签: java android android-sensors


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答,但遗憾的是我根本无法在此应用程序中使用 gps。问题是,我让我的 htc 英雄一直无意义地返回我,直到我让它重新校准它的传感器。我真的需要知道如何通过 sdk/ndk 触发它...
  • 有一个论坛,他们提到了一些 shell 指令来强制传感器写入新的设置文件,但它需要使用 su 命令,这意味着您可能无法在普通的android版本......除此之外,你可以通过Java打开一个shell,然后输入这些命令,即使它需要重新启动才能生效,假设它仍然可以工作。您可以在此处查看链接:forum.xda-developers.com/…
  • 这种 GPS 校准方法只有在您指示用户将手机指向运动方向时才有效,对吗?还是我错过了什么?
  • 我认为使用指南针的 GPS 校准只需要一致的方向运动。假设用户向东北移动,然后转向西。只要用户将设备保持在相同的方向(在仪表板上或手中),指南针就应该适当地改变,如果它与 GPS 读数不匹配,那么这就是校正因子。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多