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

标签 android rotation android-sensors

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

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

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

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

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

最好的问候,

约翰

最佳答案

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

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

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

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

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

关于android - Android 的 "Game Rotation Vector"传感器是否忽略绕垂直轴的旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29751250/

相关文章:

android - 在选择器 StateListDrawable 中使用 attr 引用

objective-c - iOS - 类似 iOS 5 横幅通知的翻转动画

iphone - iOS:通用应用程序不会旋转,从不调用 willRotateToInterfaceOrientation

swift - 围绕另一个 CGPoint 旋转一个 CGPoint

android - 晴雨表应用程序 - 从这里到哪里?

android - 如何取消注册传感器监听器?

android - 在尊重MVVM体系结构的同时,如何在recyclerview中的项目内部的按钮上提交单击事件?

android - 在 NavDirections 中找不到 safeargs 参数

android - Activity noHistory ="true"在屏幕锁定时不起作用

Android SensorDirectChannel 不返回任何传感器测量结果