【发布时间】:2012-04-10 19:46:42
【问题描述】:
亲爱的程序员/脚本编写者/工程师/其他人,
问题: 我目前正在为 Android 3.2 平板电脑开发增强现实应用程序,但在获取准确的指南针读数时遇到了一些问题。我需要准确地知道平板电脑所面对的 (z) 方向,从北方测量。不管是度数还是弧度数。
我目前尝试过的:
我使用磁力计和加速度计来计算角度。它有一个很大的缺点。如果旋转 90 度,传感器将测量更大或更小的角度。即使我在远离金属或任何磁性物体的开阔场地中。即使偏角也不能解决问题。
可以选择使用陀螺仪。我试图测量旋转速度并将测量的单位存储到变量中以了解确切的视图方向。不过,似乎有一个因素会导致失真。我发现快速旋转会扭曲准确的方向测量。陀螺仪的漂移并没有那么麻烦。该应用程序检查其他传感器是否有任何移动。如果没有检测到,则不会考虑陀螺的旋转变化。
旋转矢量工作正常。它有一些问题,如陀螺仪。如果你缓慢移动并突然停下来,它会飘走几秒钟。另一个问题是快速旋转会不准确,具体取决于速度和您转了多少圈。 (当我向各个方向摆动平板电脑时,你不会想知道我的同事是如何看我的……)
Sensor.Orientation,没什么好说的。由于某种原因它已被弃用,所以我不会使用它。互联网上很多例子都在使用这种传感器,它可能与磁/加速度计组合相同。
所以我目前没有想法。你能帮我进行头脑风暴/解决方案吗? 在此先感谢您,Roland
- 编辑 1: 我愿意提供我尝试过的代码。
【问题讨论】:
-
我认为选项 1 是您的第一个选择,因为这是获取设备方向的官方方法。我了解您对这种方法的问题是抖动?您可以使用低通滤波器来解决这个问题。取最后一个 x 值的中值或平均值。当然还有其他更复杂的方法来处理信号噪声,但这可能就足够了。
-
感谢您的帮助!我确实尝试了一些过滤器。我忘了提。但我会再试一次。但主要问题更多的是准确性。至少,磁力计的误差可能高达 20 度。这不能用过滤器解决,对吧?还是你不这么认为?
-
如此大的误差可能是由于校准不当造成的。在开发我的指南针应用程序期间,它极大地帮助了我将这个 app 与我的比较,并检查我是否做得对。
-
我对此表示怀疑。我最近检查了其他指南针应用程序,但它们似乎产生与磁场传感器相同的错误率。但是有没有办法校准传感器本身?我会试着再看看这个......
-
手机上的传感器一开始就不是很准确。但是你做了 8 字形的动作,把手机平放在你面前?
标签: java android rotation tablet compass-geolocation