Optimizando la Precisión de las Mediciones del MPU6050 con un Filtro Complementario: Un enfoque práctico

MPU6050

El sensor MPU6050 es un avanzado dispositivo de procesamiento de movimiento, que combina un giroscopio de 3 ejes y un acelerómetro de 3 ejes utilizando tecnología MEMS (Sistemas Micro Electromecánicos). Incorpora un DMP (Procesador de Movimiento Digital) que le permite procesar algoritmos de movimiento complejo de 9 ejes en la placa. Este sensor de 6 grados de libertad (6DOF) proporciona seis valores de salida y es notablemente preciso gracias a su conversión de analógico a digital de 16 bits para cada canal. El MPU6050, que captura simultáneamente los canales X, Y y Z, utiliza el bus I2C para la interconexión con el microcontrolador.

Puedes ver el datasheet completo aquí.

 Ángulos de Euler

Los ángulos de Euler son una forma de representar la orientación de un objeto en un espacio tridimensional mediante tres ángulos de rotación. Estos ángulos representan secuenciales rotaciones alrededor de los ejes de un sistema de coordenadas. Los ángulos de Euler se utilizan ampliamente en física, robótica, gráficos por computadora y navegación para describir la actitud de un objeto o vehículo (por ejemplo, un avión o un satélite).

Los tres ángulos de Euler suelen denominarse:

  1. Yaw (Guiñada): Es el ángulo de rotación alrededor del eje vertical (y). En el contexto de un vehículo o aeronave, este ángulo describe cuánto se ha girado a la izquierda o a la derecha.

  2. Pitch (Cabeceo): Es el ángulo de rotación alrededor del eje lateral o transversal (x). Describe cuánto se ha inclinado hacia arriba o hacia abajo.

  3. Roll (Alabeo): Es el ángulo de rotación alrededor del eje longitudinal (z). Describe cuánto se ha inclinado hacia uno u otro lado.

angulos de Euler

Filtro complementario

El MPU6050 permite el cálculo de los ángulos de inclinación mediante el uso de fórmulas basadas en datos provenientes del acelerómetro o del giroscopio. Sin embargo, estas mediciones suelen estar sujetas a un error acumulativo conocido como deriva, lo que puede comprometer la fiabilidad de los resultados a lo largo del tiempo.

Una técnica eficaz para mitigar este problema es la implementación de un filtro complementario. Este método mejora la precisión de las mediciones al aplicar un filtro de paso bajo a la señal del acelerómetro, lo que atenúa el error producido por cambios rápidos de posición. Simultáneamente, se emplea un filtro de paso alto a la señal del giroscopio para eliminar la deriva que se acumula durante períodos de tiempo prolongados. Esta combinación de filtros en el MPU6050 resulta en medidas de ángulo de inclinación más precisas y confiables.

El filtro complementario resulta sencillo de tratar matemáticamente y en razón de su baja complejidad consume pocos recursos computacionales. La gravedad de la Tierra tiene una aceleración aproximada a 9.8 𝑚/𝑠 2 perpendicular al suelo. La IMU del GY-521 es capaz de detectar la aceleración de la gravedad terrestre. De esta manera podemos conocer el ángulo de inclinación respecto al eje x o y con las ecuaciones 1 y 2.

Filtro complementario

 Donde "x", "y" y "z" son los valores de aceleración en cada eje.

De esta forma obtenemos los ángulos usando el acelerómetro, es necesario multiplicar por 180/PI para convertir los radianes a grados.  La ecuación 2.1 muestra la fórmula del Filtro Complementario utilizado para calcular el ángulo requerido, 𝜃, siendo 𝛼 (Alpha) el factor de fidelidad entre la lectura del giroscopio versus la lectura del acelerómetro (0 < 𝛼 < 1).

filtro complementario

Implementación en Arduino UNO

 Ya que el MPU6050 usa comunicación I2C se debe conectar  VCC a 5V del arduino, GND a GND, SDA a SDA del Arduino que en el UNO es el pin A4, y SCL a SCL que en el Arduino UNO es A5.

 

 

Programación

El primer paso es importar la librería de Adafruit.

Vamos a Sketch>Include Library>Manage Libraries. Instalamos (si nos pide librerías adicionales las aceptamos) y reiniciamos el IDE.

Cargaremos el siguiente sketch que calcula  los ángulos de inclinación y alabeo.

Código

 A continuación se presenta un desglose de la funcionalidad del programa:

  1. Definiciones e inicializaciones: Incluye las bibliotecas necesarias y crea una instancia de MPU6050 llamada mpu. También inicializa las variables pitch, roll y tiempo_prev.

  2. Configuración inicial (setup): En esta sección, inicializa la conexión con el MPU6050 y configura sus parámetros, como rangos de acelerómetro y giroscopio, y el ancho de banda del filtro.

  3. Bucle principal (loop): En cada iteración del bucle principal, el programa realiza los siguientes pasos:

    • Obtiene las lecturas más recientes del acelerómetro (a.acceleration) y del giroscopio (g.gyro) del MPU6050.

    • Calcula los ángulos de inclinación y alabeo a partir de las lecturas del acelerómetro. Estos cálculos incluyen la aplicación de la función atan2 a las lecturas del acelerómetro y la conversión del resultado de radianes a grados.

    • Calcula la diferencia de tiempo (dt) desde la última iteración del bucle. Este valor se utilizará para la integración de las lecturas del giroscopio.

    • Actualiza los ángulos de inclinación y alabeo con las lecturas del giroscopio, utilizando una integración numérica simple.

    • Aplica un filtro complementario a los ángulos de inclinación y alabeo para combinar de manera óptima las lecturas de los acelerómetros y los giroscopios. Este filtro complementario aplica un peso de ALPHA a las lecturas del giroscopio y un peso de (1.0 - ALPHA) a las lecturas del acelerómetro.

    • Finalmente, imprime los ángulos de inclinación y alabeo calculados y luego espera durante medio segundo antes de la siguiente iteración.

 Resultados

Con el sensor sobre una superficie plana el monitor serial debe imprimir valores cercanos a cero y aumentar o disminuir los ángulos cuando lo gires. Según tus resultados y aplicación puedes modificar el valor de ALPHA para filtrar mejor los valores.

 

Productos Relacionados

Ver artículo

Ver artículo

ArduinoGiroscopio

Deja un comentario