4

我遇到了与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时我注意到了相同的行为rotYValrotZVal


. Lollipop 上的失真类型相同,但在 KitKat 上效果很好。

我想知道是否有人可以帮助我弄清楚如何解决或解决这个问题。或者也许我应该放下它并使用其他传感器?

4

0 回答 0