【问题标题】:Accurate (azimuth) compass direction Android 3.2 tablet准确(方位角)罗盘方向 Android 3.2 平板电脑
【发布时间】:2012-04-10 19:46:42
【问题描述】:

亲爱的程序员/脚本编写者/工程师/其他人,

问题: 我目前正在为 Android 3.2 平板电脑开发增强现实应用程序,但在获取准确的指南针读数时遇到了一些问题。我需要准确地知道平板电脑所面对的 (z) 方向,从北方测量。不管是度数还是弧度数。

我目前尝试过的:

  1. 我使用磁力计和加速度计来计算角度。它有一个很大的缺点。如果旋转 90 度,传感器将测量更大或更小的角度。即使我在远离金属或任何磁性物体的开阔场地中。即使偏角也不能解决问题。

  2. 可以选择使用陀螺仪。我试图测量旋转速度并将测量的单位存储到变量中以了解确切的视图方向。不过,似乎有一个因素会导致失真。我发现快速旋转会扭曲准确的方向测量。陀螺仪的漂移并没有那么麻烦。该应用程序检查其他传感器是否有任何移动。如果没有检测到,则不会考虑陀螺的旋转变化。

  3. 旋转矢量工作正常。它有一些问题,如陀螺仪。如果你缓慢移动并突然停下来,它会飘走几秒钟。另一个问题是快速旋转会不准确,具体取决于速度和您转了多少圈。 (当我向各个方向摆动平板电脑时,你不会想知道我的同事是如何看我的……)

  4. Sensor.Orientation,没什么好说的。由于某种原因它已被弃用,所以我不会使用它。互联网上很多例子都在使用这种传感器,它可能与磁/加速度计组合相同。

所以我目前没有想法。你能帮我进行头脑风暴/解决方案吗? 在此先感谢您,Roland

  • 编辑 1: 我愿意提供我尝试过的代码。

【问题讨论】:

  • 我认为选项 1 是您的第一个选择,因为这是获取设备方向的官方方法。我了解您对这种方法的问题是抖动?您可以使用低通滤波器来解决这个问题。取最后一个 x 值的中值或平均值。当然还有其他更复杂的方法来处理信号噪声,但这可能就足够了。
  • 感谢您的帮助!我确实尝试了一些过滤器。我忘了提。但我会再试一次。但主要问题更多的是准确性。至少,磁力计的误差可能高达 20 度。这不能用过滤器解决,对吧?还是你不这么认为?
  • 如此大的误差可能是由于校准不当造成的。在开发我的指南针应用程序期间,它极大地帮助了我将这个 app 与我的比较,并检查我是否做得对。
  • 我对此表示怀疑。我最近检查了其他指南针应用程序,但它们似乎产生与磁场传感器相同的错误率。但是有没有办法校准传感器本身?我会试着再看看这个......
  • 手机上的传感器一开始就不是很准确。但是你做了 8 字形的动作,把手机平放在你面前?

标签: java android rotation tablet compass-geolocation


【解决方案1】:

我在总结我们的 cmets:

  1. video 可以清楚地看出,手机上的传感器一开始就不是很准确。同样有趣的是this
  2. 重要的是,用户通过保持手机平放的 8 字形动作来校准传感器。应用程序可以以编程方式检查是否需要进行此类校准并通知用户。详情请见question
  3. 为了消除抖动,从传感器获得的值需要通过某种低通滤波器进行过滤。这也是 StackOverflow 上的discussed
  4. 获得的方向不是真北。要获得真北,必须使用GeomagneticField

【讨论】:

  • 1.是的,这就是为什么我在这里询问如何获得准确测量的任何其他想法。 2.仍然没有改变准确性。 3. 即使校准也不会改变 20 度的偏移量。 :) 4. 我根据纬度/经度/高度等计算了偏角。这“可悲”并没有改变它。
  • 如果硬件问题,您根本无法提高准确性。我读过(但丢失了来源)-/+6 度是正常的。您是否阅读了不同设备上的 20 度偏移量?您是否检查过附近没有金属物体(笔记本电脑)?
  • 是的,我在开放领域。我已经测试了另一个(Android 3.2)设备,它给出了其他结果......似乎更准确并且偏移量不同。但我仍然觉得它不够准确。也许我会再次混合这些传感器。
  • 我不认为你会从传感器中得到好的结果 :-( 看到这个post
  • 这里也一样...但我有另一个想法!根据加速度,陀螺仪似乎足够准确。我今天会尝试一下,让你知道它是否有效。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多