Inexactitud del giroscopio

Tengo este código que está girando mi object de camera basado en Gyro está funcionando bien

public void CalibrateYAngle() { calibrationYAngle = appliedGyroYAngle - initialYAngle; // Offsets the y angle in case it wasn't 0 at edit time. } void ApplyGyroRotation() { transform.rotation = Input.gyro.attitude; // transform.Rotate(0f, 0f, 180f, Space.Self); // Swap "handedness" of quaternion from gyro. transform.Rotate(90f, 180f, 0f, Space.World); // Rotate to make sense as a camera pointing out the back of your device. appliedGyroYAngle = transform.eulerAngles.y; // Save the angle around y axis for use in calibration. } public void Update() { ApplyGyroRotation(); ApplyCalibration(); } 

pero en algún momento mi camera comienza a girar lenta y lentamente automáticamente. Gira lentamente hacia la izquierda o hacia la derecha, pero algunas veces no siempre. ¿Que estoy haciendo mal? debido a valores de sensores inexactos?

Este es un problema conocido con giroscopios de bajo costo montados en teléfonos y se llama drift . Intente colocar su teléfono en un escritorio y leer los valores de giroscopio durante un time. Incluso cuando no mueva su teléfono, las lecturas probablemente cambien a time.

No hay una solución directa para esto, no puede hacerlo más preciso, pero una de las soluciones es usar otros sensores físicos para ayudar a 'corregir' las lecturas del giróscopo. Desafortunadamente, hay muchos sensores diferentes que se utilizan en diferentes teléfonos, por lo que puede ser muy difícil encontrar alguna solución confiable.

Para alguna testing rápida y sucia, trataría de limitar la rotation mínima por intervalo de time o fotogtwig:

  • Recuerde la orientación del último cuadro.
  • Si la orientación actual difiere más que algún umbral, aplícala.
  • Si la orientación actual difiere less de cierto umbral, recuérdelo como una última orientación de cuadro.
  • Háganos saber si ayudó :).