Quaternions – Solving Gimbal Lock

¿Que es el Gimbal Lock?

El Gimbal Lock o bloqueo Cardan es un fenómeno contraproducente a la hora de establecer la orientación en 3 ejes coordenados, conocidos como Roll- Pitch-Yaw ( Alabeo- Cabeceo – Guiñada ) debida a la jerarquía o dependencia que se establece en cada uno de sus ejes.

Si nos imaginamos un gimbal como 3 circulos que giran a un eje solidario y los unimos de fuera para dentro, en su unión podremos ver que dos ejes se pueden alinear perdiendo un grado de libertad.

Resultado de imagen de gimbal lock

Este efecto, se traslada matemáticamente en los cálculos de orientación aplicados en robótica. La manera de traducir los ángulos de giro para su cálculo en un programa se utilizan las matrices de rotación.

Y para ejecutar 3 ángulos de giro para el cálculo total, se multiplican estas matrices; pero estas matrices por su propiedad conmutativa deben seguir un orden, produciendo esta jerarquía.

Resultado de imagen de matriz transformacion

De esta forma, puede ocurrir que a ciertos ángulos, nuestro robot no gire en el eje esperado. Por otra parte, si conocemos la ejecución de giros de nuestro robot, sabiendo que puede contener limites angulares o que estos ángulos no son tan amplios como para llegar a su alineación; este modelo podría ejecutarse sin problemas. Por ejemplo, para un robot equilibrista que solo precisa corregir su caida en un eje.

 

Quaternions

Los cuaterniones son a la vez una solución a este problema y que podemos ejecutar matemáticamente ; pero a su vez, contiene; y nunca mejor dicho; un desarrollo complejo.

Y es que sin entrar en detalles matemáticos; puesto que su aplicación será más sencilla; la idea subyacente es que si antes para definir los 3 ángulos de orientación ( Roll – Pitch – Yaw ) nuestra capacidad humana nos permite interpretarlo en un espacio de 3 dimensiones; y de ahí el problema; los cuaterniones se operan en un espacio de 4 dimensiones que no podemos interpretar añadiendo el espacio de los números complejos, pero que a su vez, resuelve este fenómeno.

Por lo que podríamos decir, que el giro se construye en un plano dimensional que no podemos visualizar, pero que nos devuelve la solucion a nuestro plano existencial. Os dejamos un video, que aunque pueda parecer complejo, es la explicación más intuitiva publicada para poder entenderlo.
IMPORTANTE: Visualizar a cachos cortos, porque en más de un momento nos perderemos en la explicación. 😛

No hace falta ver videos en los que se explica matemáticamente como operar con cuaterniones, a menos que queramos implementarlos a mano; pero en la práctica, ya existen librerías que nos proporcionan la ayuda para programar o transformar nuestros ejes.

¿Cómo calcular la orientación con un MPU6050?

Una manera de visualizar estos giros de rotación es con un módulo de 6 ejes acelerómetro + giroscopio.

IMPORTANTE: En la mayoría de ejemplos que podemos encontrar en Internet, no se proporciona una solución completa para los 3 ejes de forma precisa.

Muchos de los programas nos ofrecen una solución parcial en dos ejes para alabeo y cabeceo; que son los únicos que se pueden obtener de forma simple, por efecto de la gravedad en sus componentes de aceleración; pero no suele haber una solución simple para el tercer eje de orientación ( o guiñada ); ya que este sí que precisa del resto de componentes de giroscopio, puesto que el acelerómetro es insuficiente para su cálculo.

Existen trabajos como el filtro Madgwick que sí que nos pueden proporcionar una solución de cálculo de los 3 ejes de forma precisa, además de filtrar la señal convenientemente.

IMPORTANTE: Estos dispositivos requieren de una calibración inicial para reconocer los errores en las lecturas respecto de su estado en reposo.

 

Elegir bien la librería que vamos utilizar

 Nosotros recomendamos usar la librería de MPU6050 de jrowberg en sus variantes MPU6050_6Axis_MotionApps20.h o las de Kriswiner . Estas librerías ya contienen métodos que nos proporcionan lecturas en quaterniones y que traducen a Human readable ( Roll – Pitch – Yaw )

¿Pero cómo podemos comprobar la precisión de nuestros sensores y que lo que nos cuentas no es mentira?

Uno de los aspectos más complicados es poder comprobar estos resultados de una forma gráfica y visual. Ya que las lecturas de acelerómetro, giroscopio y su cálculo a ángulos de rotacion, es un flujo continuo de información dificilmente asequible de depurar.

Para ello, os ofrecemos una solución que consiste en conectar un MPU6050 a un módulo ESP32 o un módulo ESP8266 para construir una página web en la que se pueden visualizar los resultados de una manera gráfica.

Este desarrollo se puede descargar desde el siguiente repositorio IMU_WebServer_Quaternion

Solamente es necesario un módulo MPU6050 conectados como aparecen en las imágenes a un módulo ESP32 o ESP8266.

IMPORTANTE: El módulo ESP8266 no permite ejecutar interrupciones con este módulo MPU6050 y se queda frito. Mientras que el ESP32 funciona de forma robusta.

Para poder visualizar tanto el modelo correcto de uso de Quaterniones, como los modos de error con lecturas de ángulos de rotación, existen los siguientes sketches.

Para instalar las dependencias de los módulos ESP, se recomienda seguir los pasos de este enlace.

Para el ESP32 es necesario tener instaladas las siguientes librerias:

Para el ESP8266 en cambio es necesario tener instaladas estas librerias en su lugar:

RECOMENDACION:  No usar la librería SPIFFS para construir la página. El módulo se interrumpe y se vuelve a quedar frito.

Conclusión final y resultados

Finalmente podemos visualizar los resultados de estas lecturas, con la seguridad de que se obtienen mejores soluciones aplicando cuaterniones y que conviene introducir en futuros proyectos de robótica.

Quaternion Solution
Quaternion Solution

 

Roll Pitch Yaw
Roll Pitch Yaw – No Quaternion Applied

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

4 × cinco =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.