我正在尝试使用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 进行传感器融合来实现吗?
任何参考资料都将受到赞赏。
答案 0 :(得分:0)
你绝对可以使用加速度计和陀螺仪的组合来检测设备旋转(“重力”是两者的融合,其中陀螺仪用于使数据更平滑和更灵敏)。
根据我自己的测试,游戏旋转矢量传感器受到磁场数据的影响(可能间接通过陀螺仪偏差消除),所以你应该找到另一个解决方案(我的测试是跟踪车内的旋转而不是走路)周围,结果是汽车的磁场干扰了旋转 - 我制作了一个视频,比较了游戏旋转矢量数据,只是整合了陀螺仪输出here)。
如果你没有磁场数据,你将总是漂移(在水平面上缓慢累积旋转误差)。您需要做的主要部分是随着时间的推移整合陀螺仪数据(请参阅Google自己的代码,使用陀螺仪数据跟踪旋转here)。
为了防止垂直漂移,您必须使用加速度计来跟踪重力相对于您的设备的位置,并将其与陀螺仪数据相结合。通常建议的方法是使用Kalman Filter,但根据您的应用程序,这可能会不必要地复杂化,所以我建议使用所谓的互补过滤器,可以将其描述为融合来自低通滤波,噪声,但稳定的信号(加速度计)和响应但漂移的信号(陀螺仪)上的高通适配器。有关kalman和互补过滤器的重要资源可以找到here。