Sensor de vector de rotación Android 5 no es preciso

He encontrado un problema con el sensor de rotación, el que tiene TYPE_ROTATION_VECTOR tipo. La lectura del sensor parece no ser exacta, o está perturbada por algo, es difícil para mí decirlo. Este es el código que estoy usando para adquirir la rotación real del dispositivo:

 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); } } } 

El rotXVal , rotYVal y rotZVal son todos cero al principio.
El problema es que los valores que estoy recibiendo están perturbados de alguna manera. El movimiento de los dispositivos es generalmente vizualizado por ellos, pero muy a menudo algunos valores inválidos aparecen. A menudo, cuando giro el dispositivo en una dirección, la lectura muestra la rotación válida, pero después de eso hay una "retroalimentación" inválida a la dirección opuesta, por lo general más pequeño que el movimiento adecuado.
Lo importante es que la situación sólo me sucede en el dispositivo Android Lollipop (Samsung Galaxy S6). También estaba probando esto en KitKat (Samsung Galaxy Note 4) y el mismo código funcionaba bien.
Me di cuenta del mismo comportamiento al ejecutar este RotationVectorDemo . El mismo tipo de distorsión en Lollipop, pero funciona bien en KitKat.

Me pregunto si alguien podría ayudarme a averiguar cómo resolver o solucionar el problema. O tal vez debería dejarlo y usar algún otro sensor?

  • El servicio de larga duración consume mucha batería
  • Rajawali cámara giratoria con Sensor.TYPE_ROTATION_VECTOR comportamiento extraño
  • Mi algoritmo para calcular la posición del teléfono inteligente - GPS y sensores
  • ¿Cómo anular el registro de un oyente de un sensor después de detener el servicio?
  • Cómo usar el Acelerómetro para medir la distancia para el desarrollo de aplicaciones para Android
  • Error de sensor de rotación Android sensor
  • ¿Cómo puedo obtener el vector del campo magnético, independiente de la rotación del dispositivo?
  • Cómo calcular la altura del teléfono Android desde el suelo
  • Obtenga el ángulo de rotación de Android en el eje x
  • ¿Por qué hay una diferencia en los valores magnéticos tomados por diferentes teléfonos inteligentes?
  • Android sincronizado onSensorChanged?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.