如何在安卓中校准方向传感器?

2022-09-03 03:01:21

我正在谷歌Android 2.1中编写一个应用程序,它需要知道设备(HTC Hero)面向哪个方向(n/ w / s / e)。传感器及其侦听器工作得很好,但我从传感器获得的值完全蹩脚。例如,它告诉我,当设备面向SW左右时,我会朝北...

这似乎是Android设备的已知问题。我在网上找到的“解决方案”看起来像这样:

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

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

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

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

编辑:

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


答案 1

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

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

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


答案 2

我假设你指的是英雄内部的磁力计。

调用它是一个困难的过程,并且将/应该始终需要用户交互才能实现可调用。有单独的策略来处理这个问题。您可以要求用户在北方向握住设备,然后召回。如果用户不知道北方在哪里,你可以要求他们将zhe设备指向太阳,并根据位置和时间计算出它的位置。

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

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

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

虽然实现一个成熟的INS是不现实的,但你当然可以从它们的工作方式中得出一些想法,以使您的定向读数更准确。


推荐