TYPE_GAME_ROTATION_VECTOR的替代方案

时间:2014-11-02 08:51:58

标签: android android-sensors

我正在尝试使用Android设备旋转来控制车辆的转向。

  Samsung Galaxy S4(运行Android 4.4.2)上不存在

TYPE_GAME_ROTATION_VECTOR 。 。我通过获取所有可用传感器的清单确认了这一点。

有没有办法可以从TYPE_ROTATION_VECTOR丢弃磁力计数据?

  

TYPE_GAME_ROTATION_VECTOR TYPE_ROTATION_VECTOR 相同,但磁力计输入被忽略。

可以通过 TYPE_GRAVITY TYPE_GYROSCOPE 进行传感器融合来实现吗?

任何参考资料都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

你绝对可以使用加速度计和陀螺仪的组合来检测设备旋转(“重力”是两者的融合,其中陀螺仪用于使数据更平滑和更灵敏)。

根据我自己的测试,游戏旋转矢量传感器受到磁场数据的影响(可能间接通过陀螺仪偏差消除),所以你应该找到另一个解决方案(我的测试是跟踪车内的旋转而不是走路)周围,​​结果是汽车的磁场干扰了旋转 - 我制作了一个视频,比较了游戏旋转矢量数据,只是整合了陀螺仪输出here)。

如果你没有磁场数据,你将总是漂移(在水平面上缓慢累积旋转误差)。您需要做的主要部分是随着时间的推移整合陀螺仪数据(请参阅Google自己的代码,使用陀螺仪数据跟踪旋转here)。

为了防止垂直漂移,您必须使用加速度计来跟踪重力相对于您的设备的位置,并将其与陀螺仪数据相结合。通常建议的方法是使用Kalman Filter,但根据您的应用程序,这可能会不必要地复杂化,所以我建议使用所谓的互补过滤器,可以将其描述为融合来自低通滤波,噪声,但稳定的信号(加速度计)和响应但漂移的信号(陀螺仪)上的高通适配器。有关kalman和互补过滤器的重要资源可以找到here