Android SensorManager.getOrientation () devuelve el tono entre -PI / 2 y PI / 2

Estoy diseñando una aplicación que necesita verificar la orientación del dispositivo (Azimuth, Pitch and Roll). Yo uso el siguiente código para lograr esto:

@Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values
    else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values
    if(gravityMatrix != null && geomagneticMatrix != null){
        RMatrix = new float[16];
        IMatrix = new float[16];

        SensorManager.getRotationMatrix(RMatrix, IMatrix, gravityMatrix, geomagneticMatrix);// Retrieve RMatrix, necessary for the getOrientation method
        SensorManager.getOrientation(RMatrix, orientation);// Get the current orientation of the device
    }
}

Ahora puedo obtener los valores de azimut, tono y balanceo de la 'orientación' flotante []. Todo va bien para los valores de azimut y balanceo (devuelve el ángulo correcto), sin embargo, cuando imprimo el valor del tono (orientación [1]), siempre recupero un ángulo entre PI / 2 y -PI / 2. No entiendo porque No puedo recuperar un ángulo mayor que PI / 2 o menor que -PI / 2. Tan pronto como tengo un ángulo de + - PI / 2 y sigo girando mi dispositivo (Samsung Galaxy S2), el ángulo disminuye repentinamente después de alcanzar el valor PI / 2.

¿Alguien puede explicarme por qué el ángulo de inclinación se está comportando de manera poco común?

¡Gracias por adelantado!

Respuestas a la pregunta(1)

Su respuesta a la pregunta