安卓的“游戏旋转向量”传感器是否忽略垂直轴周围的旋转?

4
我正在开发一个应用程序,利用Android传感器帮助车辆在室内位置导航。作为对不同传感器评估过程的一部分,我想尝试“旋转矢量”传感器。由于各种原因,磁场读数对我的位置没有太大用处,因此我想尝试“游戏旋转矢量”传感器(传感器融合,从API 18及更高版本可用)。该说明指出,它与常规旋转矢量传感器相同,只是没有使用磁场信息来校正垂直轴周围的陀螺仪漂移。
当寻找有关旋转矢量传感器的信息时,我发现Google的一个示例,他们展示了使用3D立方体的旋转矢量传感器。它工作得非常好,除了对当地磁场非常敏感(并且我距北极很远,水平分量非常小)以外。
由于长期漂移可以通过其他参考数据(地图信息)进行补偿,因此我想在我的应用程序中使用游戏旋转矢量传感器。但是,当将所有引用从“TYPE_ROTATION_VECTOR”更改为“TYPE_GAME_ROTATION_VECTOR”时,示例代码中的立方体不再对垂直轴周围的旋转(例如我在椅子上旋转并将设备保持在我面前)做出反应。将设备向另外两个方向倾斜会移动立方体。我还注意到这次立方体反应非常缓慢,对任何移动反应非常慢。
这是游戏旋转矢量传感器应该工作的方式吗(例如忽略任何Z轴旋转)?这有点有道理,因为在后座玩游戏的玩家不应受车辆转弯的影响,但与Google提供的描述不同(我的第一个链接)。从描述中,我认为它会缓慢漂移,而不是完全忽略旋转。
对于这个问题的任何意见,我将不胜感激。
最好的问候,
约翰
1个回答

5

好的,以防万一有人发现这篇文章,以下是我的研究结果:

游戏旋转向量传感器确实可以检测垂直轴周围的旋转。在大多数情况下,它非常准确。

然而,它存在一些问题...首先,在静止时,它会出现加速水平漂移(即使基于陀螺仪的方向具有线性漂移)。对于我的设备来说,游戏旋转向量一开始表现良好,但随着时间的推移加速并最终漂移超过400度。

其次,更令人不安的是,它似乎没有忽略磁场,与官方说明相反(链接在问题中)。我试着开车在停车场上,我的设备固定在副驾驶座位上,游戏旋转向量大幅落后(40秒内完成一次完整旋转后,它偏差超过180度),而集成陀螺仪数据则在几度之内准确。当陀螺仪在零点附近徘徊时,它还显示了旋转的变化,这表明它实际上正在补偿(我认为是)磁场的变化。

我仍然不知道为什么它在我之前链接的测试应用程序中表现奇怪,但我已经决定使用补偿滤波器来组合加速度计和陀螺仪数据。


这种过度漂移的行为导致您建议分别使用加速度计和陀螺仪?还是只适用于您的情况(我的是游戏)?无论哪种方式,都很有趣;现在我可以毫不担心地使用API 8了! ;) 注意:能否分享一下测试所用的设备? - José
1
在车辆中有奇怪的漂移是主要的缺点。我不能确定它是否是隐藏磁场依赖性问题,还是基础卡尔曼滤波器错误地将车辆加速度解释为重力方向的变化。无论哪种方式,我使用了补偿滤波器(Mahony,2008)。我的设备是三星Tab S,特别是用于这些测试。 - Svj0hn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接