【问题标题】:Does Android's "Game Rotation Vector" sensor ignore rotation around vertical axis?Android 的“游戏旋转矢量”传感器是否会忽略围绕垂直轴的旋转?
【发布时间】:2015-04-20 14:51:46
【问题描述】:

我正在开发一款使用 Android 传感器来帮助车辆在室内位置导航的应用。作为我对不同传感器的评估过程的一部分,我想尝试“旋转矢量”传感器。由于各种原因,磁场读数对我的位置不是很有用,因此我想尝试“游戏旋转矢量”传感器(传感器融合,可从 API 级别 18 及更高版本获得)。 description 声明它与常规旋转矢量传感器相同,只是没有使用磁场信息来校正陀螺仪绕垂直轴的漂移。

在查找有关旋转矢量传感器的信息时,我遇到了来自 Google 的 example,他们在其中展示了使用 3d 立方体的旋转矢量传感器。它工作得很好,除了对局部磁场非常敏感(而且我在遥远的北方,更糟糕的是,因为这里的水平分量非常小)。

由于其他参考数据(地图信息)可以补偿长期漂移,我想在我的应用程序中使用游戏旋转矢量传感器。但是,在示例代码中将所有引用从“TYPE_ROTATION_VECTOR”更改为“TYPE_GAME_ROTATION_VECTOR”时,立方体不再对围绕垂直轴的旋转做出反应(例如,我旋转椅子,将设备放在我面前)。向其他两个方向倾斜设备会移动立方体。我还注意到这一次立方体变得更加“迟钝”,对任何运动的反应都非常缓慢。

这是游戏旋转矢量传感器应该工作的方式吗(例如,忽略任何 Z 轴旋转)?这是有道理的,因为在后座上玩的游戏玩家不应该受到车辆转向的影响,但同时它与谷歌提供的描述不同(我的第一个链接)。从描述中我的印象是它会慢慢漂移,而不是一起忽略旋转。

我将非常感谢您对此问题的任何意见。

最好的问候,

约翰

【问题讨论】:

    标签: android rotation android-sensors


    【解决方案1】:

    好的,以防万一有人发现这个,这是我的发现:

    游戏旋转矢量传感器确实检测围绕垂直轴的旋转。在大多数情况下都相当准确。

    但是,它有几个问题......首先,当它静止不动时,它会加速水平漂移(即使基于陀螺仪的方向有线性漂移)。对于我的设备,Game Rotation Vector 一开始还不错,但在一个小时内加速并最终漂移了 400 多度。

    其次,更令人不安的是,它似乎并没有忽略磁场,这与官方描述相反(在问题中链接)。我尝试将我的设备固定在乘客座位上绕着停车场行驶,游戏旋转矢量大大落后(在 40 秒内旋转一整圈后,它偏离了 180 多度),而集成陀螺仪数据在几秒钟内准确度。当陀螺仪在零附近徘徊时,它还显示出旋转变化,这表明它实际上是在补偿(我认为是)磁场的变化。

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

    【讨论】:

    • 所以这种漂移太多的行为导致您建议分别使用加速度计和陀螺仪?还是您的情况特别(我的是游戏)?无论哪种方式,都很有趣;现在我可以毫无顾虑地使用 API 8 了! ;) 注意:介意分享用于测试的设备吗?
    • 在车辆中的奇怪漂移是主要缺点。我不能确定这是否是隐藏的磁场依赖性,或者潜在的卡尔曼滤波器是否将车辆加速度误解为重力方向的变化。无论哪种方式,我都使用了互补过滤器(Mahony,2008)。我的设备是用于这些测试的三星 Tab S。
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2021-08-12
    相关资源
    最近更新 更多