2014-11-02 231 views
5

我试图用android设备旋转控制车辆的转向。TYPE_GAME_ROTATION_VECTOR的替代方案

TYPE_GAME_ROTATION_VECTOR不存在于三星Galaxy S4(运行Android 4.4.2)。 。我通过获取所有可用传感器的列表来确认。

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

TYPE_GAME_ROTATION_VECTOR是相同一个TYPE_ROTATION_VECTOR除了磁力输入被忽略。

可以通过做传感器融合为TYPE_GRAVITYTYPE_GYROSCOPE实现呢?

任何参考将不胜感激。

+0

这不是一个很好的答案,但您可能可能会对TYPE_MAGNETIC传感器值进行硬编码,并使用SensorManager.getRotationMatrix()和TYPE_ACCELEROMETER – Maurycy 2015-04-09 08:00:18

+0

@Maurycy这也是一种实现我正在尝试执行的操作的方法。不知何故,我设法只使用** TYPE_GRAVITY **传感器。 – 2015-04-10 05:50:24

+0

对我的评论更好的解决方案是实际上只使用一个单位矩阵......基本上将3个磁体值硬编码为1,然后使用SensorManager.getRotationMatrix() – Maurycy 2015-04-13 21:15:13

回答

0

您绝对可以使用加速度计和陀螺仪的组合来检测设备旋转(“重力”是两个陀螺仪用于使数据更平滑和响应更快的融合。从我自己的测试中,游戏旋转矢量传感器受到磁场数据的影响(可能间接通过陀螺仪偏置消除),所以你应该找到另一种解决方案(我的测试是跟踪旋转,而在汽车中,而不是只是走动,结果汽车的磁场干扰旋转 - 我做了一个视频比较游戏旋转矢量数据与刚刚积分陀螺仪输出here)。

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

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