我遇到了旋转传感器的问题,即TYPE_ROTATION_VECTOR
类型的旋转传感器。传感器的读数似乎不准确,或者被某些东西打扰,我很难说。这是我用来获取设备实际旋转的代码:
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
if (prevRotMatrix == null) {
prevRotMatrix = new float[16];
SensorManager.getRotationMatrixFromVector(prevRotMatrix, event.values);
} else {
float[] deltas = new float[3];
SensorManager.getRotationMatrixFromVector(rotMatrix, event.values);
SensorManager.getAngleChange(deltas, rotMatrix, prevRotMatrix);
rotXVal += (float) Math.toDegrees(deltas[1]);
rotYVal += (float) Math.toDegrees(deltas[2]);
rotZVal += (float) Math.toDegrees(deltas[0]);
client.rotX(rotXVal);
client.rotY(rotYVal);
client.rotZ(rotZVal);
System.arraycopy(rotMatrix, 0, prevRotMatrix, 0, rotMatrix.length);
}
}
}
rotXVal
,rotYVal
和rotZVal
在开头都是零。
问题是,我得到的值会以某种方式受到干扰。设备移动通常由它们进行视觉化,但通常会显示一些无效值。通常当我在一个方向上旋转设备时,读数会显示有效的旋转,但之后会出现无效的反馈信息。向相反的方向,通常小于适当的运动。
重要的是,这种情况只发生在Android Lollipop设备(三星Galaxy S6)上。我也在KitKat上测试了这个(三星Galaxy Note 4),同样的代码工作得很好
我在运行this RotationVectorDemo时注意到了相同的行为。 Lollipop上的失真类型相同,但在KitKat上工作正常。
我想知道是否有人可以帮我弄清楚如何解决或解决问题。或者我应该放弃它并使用其他传感器?