我目前在读取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。也许只是设备的传感器不是那么好。
答案 0 :(得分:3)
在不同设备上深入调查Android的旋转矢量后,我发现这个传感器确实非常不准确。
因此,有很多可能性来获得更准确和稳定的方向。 1.随着时间的推移平滑旋转矢量 2.使用Ratation Vector进行传感器融合,例如陀螺仪。
我的方法是存储初始旋转矢量,然后使用陀螺仪计算设备的实际方向。由于陀螺仪可能会受到漂移的影响,因此我每隔几秒就会将方向重置为旋转矢量的方向。