我正在开发一款使用Android传感器的应用,以帮助车辆在室内导航。作为我对不同传感器的评估过程的一部分,我想尝试“旋转矢量”传感器。由于各种原因,磁场读数对我的位置不是很有用,因此我想尝试“游戏旋转矢量”传感器(传感器融合,可从API级别18及更高版本获得)。 description表示它与常规旋转矢量传感器相同,除了没有磁场信息用于校正垂直轴周围的陀螺仪漂移。
在寻找有关旋转矢量传感器的信息时,我遇到了来自Google的example,他们使用3d立方体显示旋转矢量传感器。它工作得非常好,除了对局部磁场非常敏感(我远北,更糟糕的是,因为这里的水平分量非常小)。
由于长期漂移可以通过其他参考数据(地图信息)进行补偿,我想为我的应用程序使用游戏旋转矢量传感器。但是,在示例代码中将所有引用从“TYPE_ROTATION_VECTOR”更改为“TYPE_GAME_ROTATION_VECTOR”时,立方体不再对围绕垂直轴的旋转做出反应(例如,我旋转我的椅子,将设备放在我面前)。在另外两个方向上倾斜设备移动了立方体。我也注意到这次立方体更加“迟钝”,对任何运动反应都非常缓慢。
这是游戏旋转矢量传感器应该工作的方式(例如,忽略任何Z轴旋转)?这是有道理的,因为在后排座位上玩的游戏玩家不应该受到车辆转弯的影响,但同时它与Google提供的描述(我的第一个链接)不同。根据描述,我的印象是它会缓慢漂移,而不是忽略所有的旋转。
我会对此问题的任何意见深表感激。
最诚挚的问候,
约翰
答案 0 :(得分:5)
好的,万一有人碰巧找到了这个,这是我的发现:
游戏旋转矢量传感器确定检测绕垂直轴的旋转。在大多数情况下,这是非常准确的。
然而,它有几个问题......首先,在静止时它会加速水平漂移(即使基于陀螺仪的方向具有线性漂移)。对于我的设备,游戏旋转矢量开始很好,但加速,最后在一个小时内漂移超过400度。
其次,更令人不安的是,它似乎没有忽略磁场,这与官方描述(在问题中相关)相反。我试着在停车场周围驾驶,我的设备固定在乘客座位上,游戏旋转矢量很大程度上落后(在一次完整旋转超过40秒后超过180度),而集成的陀螺仪数据准确无误度。当陀螺仪徘徊在零附近时,它也显示出旋转的变化,这表明它实际上补偿了(我认为是)磁场的变化。
我仍然不知道为什么它在我之前链接的测试应用程序中表现得很奇怪,但我已经决定使用互补滤波器来组合加速度计和陀螺仪数据。