Android传感器管理器旋转向量(TYPE_ROTATION_VECTOR)不可靠/慢

时间:2015-09-26 11:35:42

标签: android vector opengl-es rotation sensormanager

我目前在读取Android旋转向量的值时遇到了一些问题。正如Android文档所解释的那样,旋转矢量是陀螺仪,磁力计和加速器的传感器融合组合。旋转矢量的参考系是X朝东,Y朝北,Z垂直,当设备平放时。

所有提到的特征都是正确的,可以在我的申请中使用。

现在问题:旋转矢量看起来部分非常不准确。首先,旋转矢量的值似乎落后于实际运动,其次,这些值确实受到设备快速运动的影响。

要排除我的实施所产生的任何错误,我们也会测试谷歌的演示应用程序。源代码位于here。同样在这个演示中,旋转矢量在快速运动中似乎部分滞后且不可靠。

其他人是否遇到过Androids旋转矢量的问题?

我是这样做的: 注册传感器和监听器:

sensorManager.registerListener(this, gravitySensor, SensorManager.SENSOR_DELAY_FASTEST, handler)

读出值并创建用于OpenGL渲染的旋转矩阵:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        SensorManager.getRotationMatrixFromVector(rotationMatrix4D, event.values);
    }
}

编辑: 我正在开发三星Galaxy S3 Mini。也许只是设备的传感器不是那么好。

1 个答案:

答案 0 :(得分:3)

在不同设备上深入调查Android的旋转矢量后,我发现这个传感器确实非常不准确。

因此,有很多可能性来获得更准确和稳定的方向。 1.随着时间的推移平滑旋转矢量 2.使用Ratation Vector进行传感器融合,例如陀螺仪。

我的方法是存储初始旋转矢量,然后使用陀螺仪计算设备的实际方向。由于陀螺仪可能会受到漂移的影响,因此我每隔几秒就会将方向重置为旋转矢量的方向。