android - TYPE_GAME_ROTATION_VECTOR 的替代方案

标签 android android-sensors

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

TYPE_GAME_ROTATION_VECTOR is not present on Samsung Galaxy S4 (running Android 4.4.2). . .I confirmed that by getting list of all available sensors.

有没有一种方法可以丢弃来自 TYPE_ROTATION_VECTOR 的磁力计数据?

TYPE_GAME_ROTATION_VECTOR is same a TYPE_ROTATION_VECTOR except the magnetometer input being ignored.

这可以通过对TYPE_GRAVITYTYPE_GYROSCOPE 进行传感器融合来实现吗?

如有任何引用,我们将不胜感激。

最佳答案

您绝对可以结合使用加速度计和陀螺仪来检测设备旋转(“重力”是两者的融合,其中使用陀螺仪来使数据更平滑、响应更快)。

根据我自己的测试,Game Rotation Vector 传感器会受到磁场数据的影响(可能间接通过陀螺仪偏置消除),因此您可能应该找到另一种解决方案(我的测试是在车内跟踪旋转,而不是仅仅在步行时周围,​​结果是汽车的磁场干扰了旋转 - 我制作了一个视频,比较游戏旋转矢量数据与集成陀螺仪输出 here)。

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

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

关于android - TYPE_GAME_ROTATION_VECTOR 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26697604/

相关文章:

android - 在平板电脑上膨胀 GridView 时出错

java - 如何从服务器读取html内容

java - 无法实例化指南针 Activity 的 Activity

Android进程在杀死应用程序时出现错误

android - 我的 "hal_process_report_ind: Bad item quality: 11"有什么值得担心的吗?

android - 如何使用 JobScheduler 从后台应用程序获取步数

android - verifyCredentials 上的 Twitter4J 异常

android - 打开对话框时如何隐藏导航栏?

java - 即使设置为通知也不会播放声音或显示灯光

java - 将多个 Android 传感器与辅助类相结合