¿Cómo puedo encontrar un valor de guiñada relativo de una IMU (MPU-6050) en función de la dirección hacia arriba actualmente?

Me está costando poner esta pregunta en palabras, pero básicamente tengo una IMU (MPU-6050) y puedo hacer que los datos se transmitan usando la biblioteca i2cDev.

La IMU está en una caja y quiero poder determinar de qué lado está la caja (que supongo que será fácil de usar usando la dirección gravitatoria como punto de referencia) y luego calcular la guiñada de ese lado.

En cierto sentido, quiero fingir que la guiñada, cabeceo y balanceo absolutos no existen para el dispositivo y, en cambio, cada lado de la caja tiene una guiñada relativa.

Cuidado con MPU-6050 y la biblioteca i2c. Utiliza el bloqueo de llamadas con las que he tenido problemas en el pasado. Ahora, si está accediendo a los valores de aceleración X, Y, Z, el lado en el que se encuentra el cuadro será el que tenga el valor X, Y o Z más grande. Si es x=0,y=10,z=0, entonces tal vez esté al derecho. Si es x=0,y=0,z=10, entonces está en su lado izquierdo. Depende de cómo oriente el sensor? ¿Quizás esto es demasiado obvio y no entiendo lo que estás preguntando? Publicar fragmentos de código nunca está de más.
Estoy usando un ESP8266 para que las llamadas de bloqueo no sean demasiado problemáticas (toneladas de caballos de fuerza). Puede que haya encontrado la solución. Parece que la biblioteca maneja automáticamente el cambio de Yaw / Pitch / Roll para que sea relativo a qué lado está hacia arriba (excepto que Yaw no está en línea con la rotación cuando el chip no está paralelo al suelo).

Respuestas (1)

Jeff Roberg (autor de I2CDev) ha hecho un buen trabajo con su biblioteca MPU6050. Tenga en cuenta que cabeceo y balanceo son valores absolutos cuando los calcula a partir de los valores del acelerómetro, pero la guiñada es relativa ya que no hay magnetómetro en el MPU6050.

Cuando encienda el MPU6050, siempre comenzará a contar el valor de guiñada desde 0 o más grados (rango: 0 - 360 grados), y luego habrá algo de desviación. Pero, los valores de cabeceo y balanceo siempre serán absolutos en el rango de -90 a +90 grados.

Si desea calcular la orientación, ¡no siga el valor de guiñada! Use una combinación del componente de 'gravedad' y el componente de 'cabeceo' o 'balanceo'.

Lo que estoy encontrando es que el valor de Yaw se reorienta según el lado que mira hacia abajo. En otras palabras, si pongo la MPU a 90 grados del suelo (perpendicular en lugar de paralelo), el eje que antes era cabeceo (o balanceo) se convierte automáticamente en el valor de guiñada. Y no estoy seguro de por qué. Esto funciona para mis propósitos, pero los valores de Yaw cuando el tablero está en este ángulo no siguen tan suavemente como cuando están paralelos al suelo.