Android 的 "Game Rotation Vector" 传感器是否忽略绕垂直轴的旋转?

Does Android's "Game Rotation Vector" sensor ignore rotation around vertical axis?

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

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

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

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

如果您对此问题有任何意见,我将不胜感激。

此致,

约翰

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

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

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

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

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