Trabajando con sistemas de inercia

giroscopiomodulo-acelerometro-y-giroscopio-mpu-6050-gy-521-arduino-pic-21371-MPE20208642373_122014-O

Objetivos

  • Presentar los conceptos básicos de los sistemas de medida inercial o IMUs.
  • Plantear las nociones básicas de sistemas de referencia.
  • Acelerómetros y giróscopos.
  • El MPU6050, Medida inercial de 6 grados de libertad.

Material requerido

 arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
 Img_3_4
  •  Una Protoboard.
 Img_3_6-300x185
  • Algunos cables de Protoboard.
MPU-GY-52__1
  • Un módulo MPU6050

Sistemas de medida inercial (IMUs)

No hace mucho tiempo, los giróscopos eran mecánicos y solamente los militares podían permitirse el lujo de usarlos, porque no solo eran complicados y tendían a desajustarse, sino que además su precio era disparatado.

Pero hoy con el abaratamiento de los dispositivos electrónicos integrados, los chips digitales con giróscopo y acelerómetros se han vuelto no solo cotidianos, sino además tienen un precio ridículo, gracias a los teléfonos móviles y a toda la industria que se ha desarrollado alrededor.

Vamos a ver  un componente muy frecuente en el mundo Arduino, el MPU6050 tanto por su potencia, como por lo extendido de su uso y documentación que lo convierten en una referencia imprescindible para infinidad de proyectos, que van desde drones, quadricópteros y robots 4×4 a multitud de otros inventos.

Pero antes de empezar a hablar de los giróscopos y acelerómetros, necesitamos hablar de sistemas de coordenadas, velocidades angulares, etc.., para fijar algunas ideas básicas, sin las cuales no podremos avanzar.

Sistemas de coordenadas.

Para localizar un punto en un sistema de coordenadas, lo primero es definir un sistema de referencia claro y a ser posible común entre los diferentes observadores. El más habitual en nuestra cultura es el llamado sistema cartesiano de referencia.

coordenadas01

Para definir un punto en un espacio de 3 dimensiones como este, necesitamos 3 números, que pueden ser la proyección del punto en tres ejes perpendiculares entre sí.

De este modo, una vez definida la unidad de medida, la posición de cualquier punto del espacio queda definido mediante las 3 coordenadas que llamamos  x, y, z, con respecto a nuestro sistema de referencia.

Imaginaros un avión. ¿Cómo definimos su posición en el espacio? Con un único punto, de 3 coordenadas en el espacio, podemos fijar por ejemplo su centro de gravedad, pero resulta evidente de que necesitamos además especificar otros parámetros para saber si el avión vuela boca arriba o boca abajo, o si tiene un ángulo ascendente o descendente.

Por eso para reflejar la situación y orientación de un avión o barco necesitamos más información: los ángulos que cada uno de los ejes del aparato marca con respecto a nuestra referencia. Estos ángulos de desviación respecto los ejes de referencia se llaman en ingles Yaw, Pitch y Roll, y en castellano corresponden a  Guiñada, Cabeceo y Balanceo. Y son fáciles de imaginar.

Suponed un barco proa a las olas que va subiendo y bajando de proa al ritmo. Este movimiento es el cabeceo, pero con olas laterales harán que el barco se balancee lateralmente siguiendo su ritmo. La guiñada es el ángulo que se desvía la dirección del barco con respecto al curso deseado causado por olas y viento y que debe ser corregido periódicamente.

coordenadas02
Por eso para definir la posición de un avión necesitamos tres coordenadas para fijar la posición y 3 ángulos que definan la orientación del avión con respecto a los ejes del sistema de referencia.

La posición de un barco en ruta se puede fijar con dos coordenadas, llamadas latitud y longitud con respecto a una referencia arbitraria, que en este caso son dos ángulos, y es lo que nos ofrecen los sistemas GPS.

coordenadas03

Esta forma de referenciar la posición mediante ángulos en lugar de distancias cartesianas se llaman coordenadas angulares o polares.

Podemos fijar la localización de un barco que flota mediante su posición GPS, latitud y longitud porque lleva implícito que la altura sobre el globo es cero (Flota). Pero en el caso de un avión para situarlo se requiere además, la altitud a la que vuela que es la tercera coordenada.

Pero en los sistemas móviles, como barcos aviones y robots en equilibrio, no basta con saber la posición en el espacio, sino que queremos saber las fuerzas que actúan sobre nuestra nave, porque si no las controlamos será relativamente sencillo que acabe mal.

Para controlar esas fuerzas se requieren sensores que nos den información temprana de cualquier fuerza que actúe sobre nuestra nave, para corregirla si se puede y estabilizarla. Y hay dos tipos de sensores que se usan para esto: Acelerómetros y Giróscopos.

¿Por qué dos? Pues porque hay dos tipos de fuerzas que puede sentir una nave, las de empuje lateral por el viento racheado por ejemplo, y una fuerza centrífuga, si por cualquier causa una diferencia de los vientos entre las alas provoca un giro del avión.

El principio de funcionamiento de giróscopos y acelerómetros se funda en la primera ley de Newton o ley de la inercia. Establece que todo objeto en movimiento tiende a mantener su estado (Inercia) hasta que una fuerza externa lo perturbe.

Un sistema de referencia que no está sometido a ninguna fuerza externa se le llama un sistema de referencia inercial.

Si aplicamos una fuerza externa (como una frenada en el coche en que viajamos) nuestro sistema de referencia, el coche, deja de ser inercial por definición y percibimos unas fuerza opuestas a las aplicadas que tienden a mantener nuestro movimiento previo. Para detectar este tipo de fuerzas usamos los acelerómetros.

Acelerómetros.

Un acelerómetro detecta las fuerzas de inercia que empujan al sensor y las descomponen en las tres direcciones principales de referencia.

acc

Cuando un acelerómetro es sometido a una fuerza lateral en una dirección, el sensor interno (en la imagen la bolita) tiende a retrasarse en la dirección contraria a la fuerza que actúa y al detectar en que paredes choca y con qué intensidad, podemos calcular la dirección en intensidad de la fuerza aplicada.

Hoy no se construyen ya acelerómetros mecánicos con bolitas como antaño, sino que se construyen como dispositivos electrónicos integrados y basándose en el efecto piezoeléctrico, que provoca pequeñas corrientes inducidas cuando la inercia deforma ligeramente cristales diseñados para ello.

Un acelerómetro, detecta la aceleración lateral que una fuerza externa provoca en el sensor y mezclando la información de los tres ejes determina mediante cálculo, la dirección de la fuerza que se le aplica.

Giróscopos

A diferencia de los acelerómetros que detectan las fuerzas de inercia y la descomponen en las tres direcciones básicas, los giróscopos detectan la rotación del sensor que no podríamos detectar fácilmente mediante acelerómetros.

Los giróscopos modernos detectan las fuerzas centrífugas que el giro provoca alrededor de los tres ejes principales, y devolverán cero cuando no exista giro. Un giro continuo, a velocidad angular constante, provocará una medida continua en el giróscopo.

Es fácil de verlo en un solo eje, como una rueda que gira y la velocidad de giro se puede medir en revoluciones por segundo o, en grados por segundo (º / seg)  en el mundo de los giróscopos.

giro-rueda

Lo que hace un giróscopo es detectar esas fuerzas centrífugas y convertirlas en velocidad de giro alrededor de los tres ejes principales de referencia y por cálculo, los ángulos de inclinación con respecto a los ejes de referencia, para conocer la orientación de nuestra  nave o vehículo.

ejes
Así pues y como resumen, el acelerómetro mide las fuerzas laterales  instantáneas a las que se somete el sensor en las tres direcciones de referencia x, y, z, mientras que el giróscopo mide la velocidad angular a la que está girando en cada momento el sensor.

MPU-6050

Un chip que integre un acelerómetro de 3 ejes y un giróscopo de 3 ejes se suele decir que es un IMU de 6 grados de libertad y nos permite, mediante cálculo, conocer toda la información necesaria para determinar la orientación y aceleraciones a las que está sometido y actuar en consecuencia.

  • La posición en el espacio de un punto o nave tiene tres grados de libertad o 3dof (Degrees of freedom) porque se requieren 3 variables para determinarla, pero podrían ser 3 coordenadas cartesianas o 3 ángulos o dos ángulos y una altitud, pero al final 3.
  • La información que un Sistema de medida inercial típico nos entrega son 6 valores, 3 aceleraciones y 3 giros por lo que  es un sistema de 6 grados de libertad o 6 dof.

Pero ojo, no sirve para conocer la posición de nuestro equipo, para eso están los GPS.

Como cualquier fuerza externa producirá tanto aceleraciones locales como giros, los IMUs como el MP650, incorporan un procesador interno que combina ambas informaciones para gestionar con el menor esfuerzo todas las informaciones relativas a la situación instantánea.

En primer lugar el rango de operación. Para los acelerómetros se mide en Gs.

Un IMU es capaz de medir unos pocos Gs, pueden ser suficientes porque no es un Ferrari, pero si hacéis pruebas de impacto o de choque de coches, vais a necesitar medir 50 o 60 Gs.

Para los giros necesitas conocer la mayor velocidad angular que puede medir y se suele dar en grados por segundo (º/seg) y suelen hablar de miliVoltios por grado y por segundo. Que normalmente significa que un giróscopo de 30 mV/°/s te dará una medida de 300mV en la salida a analógica cuando rote a 10º/seg.

El integrado que vamos a usar, el MPU650 es una pieza bastante sofisticada de hardware y software que cubre un abanico bastante amplio de situaciones y además a un precio mínimo.

Vamos a utilizar una Breakout board bastante típica llamada GY-201, que incluye un MPU650 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V

MPU-GY-52__1

El circuito

EL MPU650 viene con interface I2C por lo que la conexión es trivial y podéis hacerla poco más o menos así:

proto_01
Basta con conectar los pines de alimentación y montar los pines necesarios para el control del bus I2C. Cuando el IMU dispone de alguna medida se lo informa a nuestro Arduino mediante una interrupción y por eso conectamos el pin INT a nuestra primera interrupción en el pin 2.

Solo falta conectar las salidas del IMU SCL y SDA a dos entradas analógicas de nuestro arduino.

El programa de control.

Vamos a montar las librerías correspondientes y a probar con uno de los programas de ejemplo que tanto las conexiones como el  MPU650 están en condiciones operativas.

El señor Jeff Rowberg  ha puesto a nuestra disposición una librería que podemos descargar desde aquí: MPU6050 y también vamos a necesitar una librería modifica de I2C que se lleve bien con el IMU llamada I2Cdev.

Vamos a empezar cargando el ejemplo MPU6050_RAW:

\\Archivo\Ejemplos\MPU6050\Examples\ MPU6050_RAW

Y a continuación asegurándonos de que la consola serie está a 38400 baudios, porque los IMUs son muy charlatanes y mejor que nos aseguremos de que recibimos a suficiente velocidad porque de lo contrario la información se amontonará en nuestra puerta.

Console-a-38400

Este programa es de lo más sencillo, y lo que hace es leer e imprimir los valores en bruto que los acelerómetros y giróscopos le envían a tu Arduino, es decir sin procesar en absoluto.

Si todo está bien, deberíais ver una pantalla parecida a esta:

consola_1

No te preocupes demasiado de estos valores, porque son las medidas reales que producen los acelerómetros y los giróscopos, pero así no valen de mucho. El objetivo es asegurarnos de que tu MPU6050 se comunica bien con tu Arduino.

  • De todos modos fíjate en que hay 6 valores. Los tres primeros corresponden a los acelerómetros y los tres últimos a los giróscopos.
  • Si vas girando el IMU en direcciones perpendiculares verás con rapidez cual es cada uno de los ejes, porque aunque el chip este en movimiento inercial (O sea en reposo o movimiento lineal uniforme, aun detectará la aceleración de la gravedad, claramente en una de las direcciones.
  • Nosotros estamos tan acostumbrados a la gravedad que ni la notamos, pero el MP6050 es un sensor y mide de continuo su efecto, que es una aceleración.

Pero… ¿Cómo mido los ángulos respecto a la horizontal?

MIDIENDO ÁNGULOS DE INCLINACIÓN

Vamos a cargar el segundo ejemplo que viene de demo con el MPU6050 que se llama DMP6:

\\Archivo\Ejemplos\MPU6050\Examples\ MPU6050_DMP6

Pero el autor ha puesto el programa a 115200 baudios,  a diferencia del ejemplo anterior, así que empezar cambiando la velocidad de la consola Arduino en consonancia:

Console-a-115200

Si ahora volcáis el programa a vuestro Arduino, os aparecerá un mensaje con este:

consola_2

Donde como veis os pide que le enviéis cualquier pulsación más intro para empezar el programa.

Escribe cualquier cosa, y enseguida veréis que empiezan a aparecer valores en la pantalla, pero esperad un poco porque necesita como 10 segundos para que los valores se estabilicen y tengan sentido.

El texto que aparece al principio de cada línea “ypr” corresponde a las iniciales en ingles de los tres ángulos de referencia Yaw, Pitch y Roll.

En cuanto sus lecturas se estabilizan, él sabe localizar el eje vertical porque es el que la gravedad le indica y por tanto ya tiene una primera referencia del plano horizontal (El plano horizontal es perpendicular a la gravedad, naturalmente).

MPU-6050 y un servo

#include «Wire.h»
#include «I2Cdev.h»
#include «MPU6050.h»
#include «Servo.h»

MPU6050 mpu;

int16_t ax, ay, az;
int16_t gx, gy, gz;

Servo myservo;

int val;
int prevVal;

void setup(){
Wire.begin();
Serial.begin(38400);
Serial.println(«Initialize MPU»);
mpu.initialize();
Serial.println(mpu.testConnection() ? «Connected» : «Connection   failed»);
myservo.attach(9);
}

void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
val = map(ay, -17000, 17000, 0, 179);
if (val != prevVal){
myservo.write(val);
prevVal = val;
}
delay(50);
}

Conexiones:

  • Servo: Voltaje y tierra, el de control al 9
  • MPU-6050: Voltaje y tierra, scl al 6 y sda al 7

https://www.youtube.com/watch?v=qAqBTACXFPs

Deja un comentario