2015-09-26 3086 views
0

我目前在读出Android旋转向量的值时遇到了一些问题。正如Android文档解释的那样,旋转矢量是陀螺仪,磁力计和加速度计的传感器融合组合。旋转矢量的参考框架是X朝东,Y朝北,Z垂直,当设备处于平坦位置时。Android传感器管理器旋转向量(TYPE_ROTATION_VECTOR)不可靠/缓慢

所有提到的特征是正确的,并在我的应用程序中工作。

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

为了排除我的实现所产生的任何错误,我们还测试了谷歌的演示应用程序。源代码位于here。同样在这个演示中,旋转矢量在快速运动中看起来部分是滞后和不可靠的。

有没有其他人面临Android的旋转矢量的一些问题?

这里是I'm怎么做: 注册的传感器和听众:

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迷你。也许只是设备的传感器不太好。

回答

2

经过深入调查Android的旋转向量在不同的设备上我认识到,这个传感器确实是不准确的。

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

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