我遇到了与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
时都为零。问题是,我得到的值在某种程度上受到了干扰。设备移动通常由它们可视化,但经常会出现一些无效值。通常当我向一个方向旋转设备时,读数会显示有效旋转,但之后会有无效的“反馈”到相反方向,通常小于正确的移动。
重要的是,这种情况只发生在我的 Android Lollipop 设备(三星 Galaxy S6)上。我也在 KitKat(三星 Galaxy Note 4)上对此进行了测试,并且相同的代码运行良好。
运行此 RotationVectorDemo时我注意到了相同的行为rotYVal
rotZVal
. Lollipop 上的失真类型相同,但在 KitKat 上效果很好。
我想知道是否有人可以帮助我弄清楚如何解决或解决这个问题。或者也许我应该放下它并使用其他传感器?