lunes, 9 de noviembre de 2015

Nueva estructura, nuevos motores, nuevas pruebas.

Debido al resultado de las pruebas de vuelo que vimos en el post anterior, tuvimos que efectuar algunas modificaciones.

La primera y mas grande de las modificaciones fue sobre la estructura. Para hacerla mas liviana y equilibrada la re diseñamos. El resultado fue este:



Es mas liviana que la anterior, y los motores se encuentra correctamente centrados y alineados.
Esta es una foto comparando esta estructura con la versión anterior.


En esta nueva estructura conseguimos también colocar el acelerometro directamente sobre la estructura para evitar vibraciones, ademas de orientar el sensor correctamente.

Luego de las pruebas de vuelo aun no pudimos ajustar correctamente el PID, pero ya vemos mejoras en la estabilidad y en la potencia disponible para el vuelo, ya que ahora levanta vuelo a alrededor del 55% de la potencia.



Continuamos en el proximo post! Esperemos que ya vuele de forma estable.



Horas y horas intentando calibrar el PID

Ya tenemos todas las partes funcionando, ahora tenemos que calibrar las ganancias del PID. Como vamos a ver esto no nos resulto una tarea fácil.
Para entender el funcionamiento de los PID, mostraremos el programa que utilizamos  (Que aún no esta en funcionamiento). Para la realización de este programa revisamos varios recursos en Internet y los modificamos para adaptarlo a nuestras necesidades.

El programa que controla los PID consta de 3 partes, la primera es donde declaramos las ganancias de cada PID:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//GANANCIAS PID
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
float pid_p_gain_roll = 0.05 ;               //Ganancia roll Controlador P 
float pid_i_gain_roll = 0.003;              //Ganancia roll Controlador I 
float pid_d_gain_roll = 0.4;                //Ganancia roll Controlador D
int pid_max_roll = 30;                    //Máxima salida del controlador PID (+/-)

float pid_p_gain_pitch = pid_p_gain_roll;  //Ganancia pitch Controlador P.
float pid_i_gain_pitch = pid_i_gain_roll;  //Ganancia pitch Contorlador I.
float pid_d_gain_pitch = pid_d_gain_roll;  //Ganancia pitch Controlador D.
int pid_max_pitch = pid_max_roll;          //Máxima salida del controlador PID (+/-)

float pid_p_gain_yaw = 0.04;                //Ganancia yaw Controlador P
float pid_i_gain_yaw = 0.0002;               //Ganancia yaw Contorlador I.
float pid_d_gain_yaw = 0;                //Ganancia yaw Contorlador D.
int pid_max_yaw = 30;                     //Máxima salida del controlador PID (+/-)

En nuestro caso los motores se mueven entre un rango de 1 a 255, por lo que la máxima variación que puede realizar el PID la seteamos en el 15% aproximadamente, para que no efectué movimientos muy bruscos y tengamos un margen de control en la potencia.
Ademas podemos ver que la ganancia del PITCH y el ROLL son iguales y el YAW no necesita un controlador D.

Luego la aplicación de las correcciones en los motores:

calculate_pid();
 if (start == 2){                                                          //Los motores estan encendidos
    if (throttle > 220) throttle = 220;                                   //Dejamos margen de ganancia para el control de los motores
    motor1 = throttle - pid_output_pitch + pid_output_roll - pid_output_yaw; // (FRENTE DERECHA - CCW)
    motor2 = throttle + pid_output_pitch + pid_output_roll + pid_output_yaw; // (ATRAS DERECHA - CW)
    motor3 = throttle + pid_output_pitch - pid_output_roll - pid_output_yaw; // (ATRAS IZQUIERDA - CCW)
    motor4 = throttle - pid_output_pitch - pid_output_roll + pid_output_yaw; // (FRENTE IZQUIERDA - CW)
  
  
  }

Y la funcion del PID propiamente dicha:

void calculate_pid(){
  //Calculos Roll
  pid_error_temp = gyro_roll_input - pid_roll_setpoint;
  pid_i_mem_roll += pid_i_gain_roll * pid_error_temp;
  if(pid_i_mem_roll > pid_max_roll)pid_i_mem_roll = pid_max_roll;
  else if(pid_i_mem_roll < pid_max_roll * -1)pid_i_mem_roll = pid_max_roll * -1;
  
  pid_output_roll = pid_p_gain_roll * pid_error_temp + pid_i_mem_roll + pid_d_gain_roll * (pid_error_temp - pid_last_roll_d_error);
  if(pid_output_roll > pid_max_roll)pid_output_roll = pid_max_roll;
  else if(pid_output_roll < pid_max_roll * -1)pid_output_roll = pid_max_roll * -1;
  
  pid_last_roll_d_error = pid_error_temp;
  
  //Calculos PITCH
  pid_error_temp = gyro_pitch_input - pid_pitch_setpoint;
  pid_i_mem_pitch += pid_i_gain_pitch * pid_error_temp;
  if(pid_i_mem_pitch > pid_max_pitch)pid_i_mem_pitch = pid_max_pitch;
  else if(pid_i_mem_pitch < pid_max_pitch * -1)pid_i_mem_pitch = pid_max_pitch * -1;
  
  pid_output_pitch = pid_p_gain_pitch * pid_error_temp + pid_i_mem_pitch + pid_d_gain_pitch * (pid_error_temp - pid_last_pitch_d_error);
  if(pid_output_pitch > pid_max_pitch)pid_output_pitch = pid_max_pitch;
  else if(pid_output_pitch < pid_max_pitch * -1)pid_output_pitch = pid_max_pitch * -1;
    
  pid_last_pitch_d_error = pid_error_temp;
    
  //CALCULOS YAW
  pid_error_temp = gyro_yaw_input - pid_yaw_setpoint;
  pid_i_mem_yaw += pid_i_gain_yaw * pid_error_temp;
  if(pid_i_mem_yaw > pid_max_yaw)pid_i_mem_yaw = pid_max_yaw;
  else if(pid_i_mem_yaw < pid_max_yaw * -1)pid_i_mem_yaw = pid_max_yaw * -1;
  
  pid_output_yaw = pid_p_gain_yaw * pid_error_temp + pid_i_mem_yaw + pid_d_gain_yaw * (pid_error_temp - pid_last_yaw_d_error);
  if(pid_output_yaw > pid_max_yaw)pid_output_yaw = pid_max_yaw;
  else if(pid_output_yaw < pid_max_yaw * -1)pid_output_yaw = pid_max_yaw * -1;
    
  pid_last_yaw_d_error = pid_error_temp;


}

Traduciendo el Programa a un gráfico, cada PID básicamente lo que realiza es lo siguiente:



Lo primero que tenemos que probar es que funcione el PID, para esto realizamos cambios bruscos en los motores y vemos los cambios de velocidad. Ademas seteamos los valores para conseguir un sobre amortiguamiento, como vemos en los vídeos.




Viendo que el código del PID funciona bien, nos disponemos a calibrarlo. 
Vimos varios métodos en internet y no pudimos hacerlos funcionar, principalmente porque están pensados para drones mas grandes y no tan chicos como el nuestro. 
Otro tema a tener en cuenta es la ganancia, el rango de nuestros motores es de 1- 255 y manejados con una continua a través de un PWM.  Los motores Brushless se manejan con valores rangos en el orden de 1500 y ademas se manejan con pulsos de tiempos variables en el orden de los ms, por lo que las ganancias son totalmente distintas para nuestros motores.

Luego de muchas pruebas infructuosas detectamos algunos problemas que no nos permiten obtener un correcto funcionamiento de nuestro drone:

  • El rango de potencia disponible para el vuelo es muy chico, ya que recién puede despegarse del piso a un 70% de la velocidad de los motores, por lo que debemos optimizar el peso
  • Nuestra estructura esta muy desbalanceada, lo que produce muchos problemas para el control.
  • Algunos motores están desalineados.
  • Una de las etapas de potencia estaba con fallas, produciendo que un motor funcione mas lento.

Esto nos lleva a efectuar un replanteo de como realizar el proyecto.



Armando el Drone

Llego el momento de unir todas las partes y armar el drone. Ya tenemos toda la electrónica diseñada y armada, por lo que queda es seleccionar la estructura.
Para probar diseñamos una estructura tipo cruz con madera, realizando un agujero para colocar los motores.


También por una cuestión de peso general del proyecto y espacio físico, re diseñamos la placa de control de potencia de los motores, haciéndola mas chiquita y liviana, utilizando todos componentes SMD.  A continuación mostramos una captura del diseño original de la placa para el control de 2 motores y la que diseñamos para los 4, ademas de como quedo el impreso.



Luego colocamos esta placa y la unimos a los motores:



Colocamos luego la placa de control, el conector de la batería y conectamos todos los cables.


Colocamos la batería, cargamos el programa, del cual hablaremos mas adelante y realizamos la primer prueba de vuelo. el resultado es fue el siguiente:





Obviamente en esta primera prueba, no pudimos hacerlo volar, pero sacamos varias conclusiones:

  • El dron es muy pesado para la potencia de los motores, ya que recién puede levantar vuelo con los motores a un 75%.
  • Las ganancias que utilizamos para los PID no compensan correctamente el vuelo.
  • Los valores del Giroscopio tienen una dispersión y vibraciones muy grandes debido a la ubicación en donde esta colocado.
  • La batería nos da unos 10 minutos de autonomía con motores a carga completa.
  • El diseño de nuestra estructura es incomodo para realizar pruebas y cambio de Baterias.












martes, 20 de octubre de 2015

Pensando el sistema de control para nuestro Drone

Hemos avanzado mucho con la parte electrónica y estructura de nuestro Drone, pero nos esta faltando abordar un punto fundamental del diseño. La lógica de Control de Vuelo del Drone.

A pesar de que el Drone sera controlado por un control remoto, este deberá ser capaz de mantenerse en el aire de forma estable frente a variaciones de las condiciones atmosféricas, brisas o perturbaciones externas. Para esto deberá tener una lógica de control programada en el micro controlador del Arduino que compense cualquier perturbación externa.

Investigamos y descubrimos que hay muchas estrategias de control para realizar esto, con distintas prestaciones, ventajas y dificultad de programación y sintonizado.  Algunas de estas estrategias y controladores utilizados son:

  • Lazos Simples de Control
  • Lazos en Cascada
  • Controladores PID
  • Controladores Predictivos: El controlador se basa en el procedimiento denominado control de horizonte deslizante. Consiste en realizar una predicción de los estados futuros empleando un modelo del proceso y la optimización de la evolución del sistema sobre un horizonte de predicción. 
  • Control Difuso: La alternativa al control PID es la lógica borrosa o difusa, basada en lo relativo a lo observado. Este tipo de lógica toma dos valores aleatorios, pero contextualizados y referidos entre sí.
    Si bien existen DRONEs avanzados que utilizan este mecanismo de control fundamentalmente para vuelo autónomo, se utiliza cuando la complejidad del proceso es muy alta y costaría mucho esfuerzo desarrollar un control matemático. Pero no es recomendable para sistemas que dispongan de un modelo conocido y sus resultados son eficientes. Por tanto, para desarrollar el control de nuestro DRONE será mucho más eficiente y exacto el control PID que la lógica difusa.

Generalmente los DRONEs comerciales utilizan Lazos en Cascada para el control de vuelo, esto debido a que la gran ventaja que proporciona esta técnica de control es aprovechar que podemos acceder a una variable interna medible que tenga una dinámica más rápida que la del proceso. Con ésta, podremos detectar perturbaciones y actuar en rechazo de las mismas antes de que el efecto de la perturbación se propague y afecte a la variable. Ademas como controladores utilizan PID debido a que son ampliamente conocidos y mas sencillos de sintonizar.

Como lo hacen?

Cada Lazo de control consiste en la disposición de dos controladores anidados, de manera que la salida del controlador maestro es la referencia o punto de consigna que toma el controlador esclavo.


La elección de la variable interna de medida no es arbitraria y ha de cumplir ciertas características:

  • Debe existir una relación directa entre las variables de medida primaria y secundaria.
  • Las perturbaciones principales deben de actuar en el lazo interno o secundario por lo que deben ser detectadas a partir de la variable medible.
  • El lazo secundario debe ser más rápido que el lazo primario.
  • Es muy beneficioso tener una ganancia alta en el lazo secundario

Un ejemplo de esto seria donde las "variables del proceso" a controlar de los dos subsistemas son la coordenada X e Y y las variables de control son la referencias a los ángulos Pitch y Roll, la variable interna de medida de cada subsistema será cada componente de la velocidad, Vx y Vy respectivamente.

Los tipos de perturbaciones que podemos cuantificar mediante la medida de la velocidad serán: en primer lugar corrientes de aire (aunque al tratarse de vuelo en interiores no serán de gran magnitud), y en segundo lugar, el efecto suelo también producirá perturbaciones en la velocidad ya que afecta a la sustentación generada por cada motor y por ende a la orientación del cuadricóptero.

Siguiendo la corriente al desarrollo actual nuestro Drone deberá tener 6 controladores PID para controlar los 3 ejes y sus interacciones utilizando Lazos en Cascada.

Una vez implementados los PIDs sobre el arduino deberemos sintonizarlos, si bien eso corresponde a un capitulo mas avanzado de nuestro proyecto, es bueno entender como cada ganancia (Proporcional, Integral y Derivativa) afecta al vuelo de nuestro DRONE para luego poder sintonizar cada parámetro.
Hay que tener en cuenta que esta sintonización deberá idealmente realizarse en cada eje por separado.

¿Qué sucede cuando la ganancia de P es demasiado baja?

Si la ganancia P es demasiado baja, entonces no estaremos aumentando el empuje lo suficiente para nivelar el multicoptero y va a acabar dándose la vuelta.

Si la ganancia P es ligeramente baja, entonces será controlable, pero derivara excesivamente. Tardara mucho más para llegar de nuevo a nivel.

¿Qué sucede cuando la ganancia P es demasiado alta?

Si la ganancia P es demasiado alta, el multicoptero se tambaleara (oscilara), ya que compensará demasiado cuando se vaya fuera de nivel , lo que hará que intente nivelarse tan rápidamente, que se saldrá de nivel  y volverá a salirse de nivel en sentido contrario , y así sucesivamente.

Hay que tener cuidado y asegurarse de que la ganancia P no es demasiado alta, no sólo tratando de volar nivelado, sino también cuando hacemos traslaciones, cuando hay excesivo viento o cuando bajamos en vertical sobre la propia turbulencia que generan las hélices. Si la ganancia P es poco alta, se quedara clavado al volar estabilizado, pero al intentar cualquier maniobra agresiva el multicoptero se descontrolara.

¿Qué sucede cuando la ganancia I es demasiado baja?

Si la ganancia I es demasiado baja (0,0), entonces el multicoptero puede que no sea capaz de volver a nivel y si hace un poco de viento comience a derivar. Esto no es un verdadero problema ya que lo mormal es comenzar a ajustar los PID con un valor para I de 0.

¿Qué sucede cuando la ganancia I es demasiado alta?

Si la ganancia I es demasiado alta, los efectos son similares a los que tiene una ganancia P  alta, pero aún más exagerado. El multicoptero se tambaleará (oscilar), ya que compensará demasiado al salirse del nivel y al sobrepasarlo intentara volver a nivelar rápidamente, lo que hará que vuelva a salirse de nivel hacia el otro lado, y así sucesivamente.

¿Qué sucede cuando la ganancia D es demasiado baja?

Si la ganancia D es demasiado baja , entonces el multicoptero se tambaleá  siempre que las ganancias de P e I sean demasiado altas.

¿Qué sucede cuando la ganancia D es demasiado alta?

Si la ganancia D es demasiado alta, mientras se mantenga estabilizado, notara que su multicoptero tarda mucho en responder a los mandos como si tuviera retraso.

Según esto también podemos ver como afectan las ganancias al tipo de vuelo que quiera realizarse:

Vuelo acrobático :

Requiere un valor de P un poco mas alto.
Requiere un valor de I un poco mas bajo.
Aumentar D.

Vuelo estable :

Requiere un valor de P un poco mas bajo.
Requiere un valor de U un poco mas alto.
Disminuir D

Despues de mucho leer ya tenemos mas claro como desarrollar nuestro sistema de control, ahora a llevarlo a la practica sobre nuestro Arduino.

lunes, 19 de octubre de 2015

A mover los motores!

Ya nos dedicamos a ver cada una de las partes de la electrónica de nuestro Drone, salvo de que manera controlaremos los 4 motores.

En nuestro proyecto planteamos el control de cada motor mediante una salida PWM del Arduino conectado a una etapa de potencia. Pero como funcionaria esto en teoría?

Nuestros pequeños motores tienen las siguientes características técnicas:


                     

El motor que adquirimos es uno del Tipo "Motor de Continua sin Núcleo". Se los presentamos:



Como vemos en la imagen, en el rotor se encuentra el bobinado que envuelve a un imán permanente. En la parte posterior se encuentran las escobillas que pueden ser de grafito o de un metal noble, dependiendo de la calidad del motor.
Los motores de este tipo tienen la ventaja de ser muy pequeños. El rotor de estos motores es extremadamente liviano, produciendo un muy bajo momento de inercia, por lo que alcanza velocidades y aceleraciones elevadas, pero su velocidad es afectada por la carga que tengan. 
A diferencia de los motores sin escobillas, estos motores tiene solo 2 terminales y su torque es proporcional a la corriente que circula por su bobinado, por lo que podremos manejar su velocidad produciendo variaciones de tensión enviada al motor. Como realizamos esto? con un PWM!
Con la Modulación de Ancho de Pulso (PWM para los amigos), podemos controlar el valor medio de la tensión enviada a cada motor, por lo tanto controlar su velocidad.



Ya sabemos como controlar los motores, ahora deberemos diseñar una etapa de potencia para ellos.
Por suerte, el buen vendedor al que le compramos los motores incluyo dentro del paquete unos mosfets de potencia acordes para el control de motores. En este caso los mosfets a utilizar serán los SI2302 con encapsulado TO-236 (SMD). Sus características, ademas del tamaño reducido, se encuentran en su hoja de datos en el siguiente LINK
Como podemos ver este pequeñísimo MOSFET puede manejar hasta 2,8 Amperes de manera continua y hasta 1,25W, algo realmente importante para un componente de 3mm x 1mm.

El circuito de potencia para el manejo de los Motores lo vimos en uno de los primeros posts, pero podemos recordarlo:



Realizamos un diseño preliminar, para probar el funcionamiento de los motores con el PWM del arduino.

Diseño del Impreso utilizando PCB Wizzard (Somos Anticuados)


Pasando el Impreso a la placa. (Mas anticuados aún)



Componentes soldados



Juntando todo sobre la estructura:


A punto de probar:


Ya tenemos todo conectado y comenzamos a probar. Esta vez no tuvimos suerte, uno de los motores esta constantemente encendido, revisamos el Mosfet y esta quemado. Lo cambiamos y ahora si, tenemos los motores funcionando.

VIDEO

Pudimos hacer funcionar los motores con el PWM y el arduino sin problemas, pero sacamos algunas conclusiones y encontramos un nuevo problema del que no nos habíamos percatado.

  • Primero es que la placa de potencia deberá ser mas chica y que incluya a los 4 motores. El prototipo que armamos es grande y pesado para el empuje que tenemos disponible. Deberemos re diseñarla, esto lo dejamos para la sección del diseño definitivo.
  • También nos dio una pauta sobre la estructura, de la que hablaremos en otro post, ya que vamos a tener que optimizarla si queremos conseguir que nuestro drone levante vuelo.

Otro problema que descubrimos, aunque este no es de diseño, si no mas bien por despistados, es que el KIT que compramos vino con 3 hélices para giro en sentido horario (CW) y 1 sola en sentido anti horario (CCW). GRAN PROBLEMA!! Imposible que funcione asi.



Por suerte y gracias a la buena voluntad del vendedor, que ya no tenia publicado el producto, hicimos lo que deberíamos haber hecho desde el principio, compramos un nuevo KIT para tener repuestos en caso de un imprevisto.
Ademas agradecemos al vendedor, porque nos envío hélices y MOSFETS adicionales para que tengamos de repuesto ademas de los que vienen en el KIT.

Cronograma del Proyecto

Fuentes:




miércoles, 14 de octubre de 2015

CONCEPTO PRELIMINARES DE VUELOS

Nuestro drone VANT (vehículo aéreo no tripulado) esta formado por 4 motores ubicado en una estructura de brazos que gracias a un sistema de medición inercial y control es capaz de efectuar un vuelo estable.

Entenderemos por estable como la capacidad del VANT de permanecer en una misma posición en el aire sin la intervención del operario que la controla, el mayor tiempo posible y el control del mismo se produce modificando las velocidad angular de cada uno de los motores. 

Estos pueden ser de los 2 tipo mas común X" o "+". Todos los brazos tienen la misma longitud y la electrónica se encuentrara ubicada en el centro de la estructura. La diferencia entre una estructura en "X" y  otra en "+" radica en lo que establecemos como "adelante-atrás-derecha-izquierda" 

  •   Antes de seguir definiremos PITCH-ROLL-YAW
Son tres ángulos equivalentes a tres maniobras consecutivas. Dado un sistema de tres ejes fijos en el aeroplano, llamados eje de guiñada (yaw en ingles), de cabeceo (pitch) y de alabeo (roll), seran las tres rotaciones principales. en la siguiente gráfica se observa el comportamiento de pitch-roll-yaw.




La opción "+" es la más fácil de comprender y programar ya que los movimientos de pitch (cabeceo) y roll (alabeo) se producen dejando una pareja de motores a revolución constante y modificando la otra pareja, de tal modo que uno de ellos incrementará su revoluciones mientras que el otro las bajará. Pongamos un ejemplo, si estuviera volando estable y deseara hacer un desplazamiento a la derecha, aumentaría las rpm del motor de la izquierda, bajaría el de la derecha y no modificaría los motores frontal y trasero.

Ahora bien, en la aeronaves de alas rotatorias por ejemplo un helicóptero el giro del rotor principal hace que se eleve, provocando al mismo tiempo un giro del cuerpo del helicóptero hacia el lado contrario. El rotor de cola es el encargado de contrarrestar este giro y evitar que el cuerpo del helicóptero gire en sentido contrario del giro del rotor principal, además de permitir el poder dirigir el helicóptero.




En el drone dos de los motores (opuestos 2 a 2: motores 1-3 (frontal-trasero) y 2-4 (derecha-izquierda)) giran en sentido anti horario (1-3), mientras que los dos restantes(2-4) lo harán en sentido horario.

De esta manera el momento de inercia producidos por efectos giroscópicos y aerodinámicos resultante en el centro de la estructura se anulará mutuamente y la aeronave no se moverá como en el caso de los helicóptero.

Sí de manera intencionada modifico las rpm en igual valor a una de las parejas,por ejemplo bajo las velocidad angular de la pareja 1-3, el momento en el centro de la estructura producido por ambas parejas ya no se auto-eliminará, siendo mayor el que produce al pareja 2-4. Como consecuencia veré como se inicia la maniobra de giro en el plano o guiñada.

En la siguiente imagen se explica mucho mejor los movimientos.





jueves, 8 de octubre de 2015

UNIDAD DE MEDICION INERCIAL IMU – MPU9150 9DOF

Es un dispositivo electrónico que mide e informa acerca de la velocidad, orientación y fuerzas gravitacionales de un aparato, usando una combinación de acelerometros y giroscopios. Son normalmente usadas para maniobrar aviones, y en este caso lo usamos para maniobrar nuestro Drone.

El MPU-9150 es una IMU de 9DOF (“9 Degrees Of Freedom“). Se trata de un dispositivo capaz de mesurar la fuerza (aceleración) y la velocidad. Genéricamente consta de un Acelerómetro, Giroscopio y un magnetómetro ambos de 3 ejes  (3 + 3 + 3= 9DOF).  por lo tanto: una IMU no mesura ángulos. Por lo menos no directamente, requiere algunos cálculos, opera con 3.3 voltios, utiliza el protocolo de comunicación I2C.


El acelerómetro

El acelerómetro mide la aceleración  en 3 ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si se mueve  hacia arriba, el eje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc.
Como sabemos que la gravedad de la Tierra tiene una aceleración de aprox. 9.8 m/s², perpendicular al suelo. Así pues, la IMU también detecta la aceleración de la gravedad terrestre.
Gracias a la gravedad terrestre puedes usar las lecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.
Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes ver en la imagen, el eje Z marcará 9.8, y los otros dos ejes marcarán 0. Ahora supongamos que giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tanto marcará la aceleración de la gravedad.




Si sabemos que la gravedad es 9.8 m/s², y sabemos que mesura dan los tres ejes del acelerometro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el ángulo es:



El eje Z se suele ignorar.
Hay otras fórmulas equivalentes, pero yo prefiero la tangente.


El Giroscopio

En un principio, los giroscopios eléctricos eran unos voluminosos artefactos que valían la mayor parte del presupuesto militar de un estado. Más tarde, durante la segunda guerra mundial se emplearon para dirigir cohetes y torpedos. Por suerte, gracias la revolución digital y la miniaturización de circuitos, hoy en día cualquier aficionado a la electrónica puede permitirse uno. Aunque no para construir misiles.
El giroscopio mide la velocidad angular. Si no tienes muy frescas tus lecciones de física del instituto voy a recordarte que la velocidad angular es el número de grados que se gira en un segundo.
Sólo que en vez de mesurarse en grados por segundo, suele mesurarse en otra unidad que son radianes por segundo (1rad/s = 180/PI grados/s)
Si sabemos el ángulo inicial de la IMU, podemos sumarle el valor que marca el giroscopio para saber el nuevo ángulo a cada momento. Supongamos que iniciamos la IMU a 0º. Si el giroscopio realiza una medida cada segundo, y marca 3 en el eje X, tendremos el ángulo con esta sencilla fórmula:




Dónde Δt es el tiempo que transcurre cada vez que se calcula esta fórmula.
Y lo mismo pasa con los ejes X, Z. Sólo que al igual que con el acelerómetro se suele ignorar el eje Z.
Ya tenemos las lecturas. ¿Simple, verdad? Pues en realidad no tanto.



El Magnetometro

Es un sensor que mide la intensidad de campo magnético en 3 ejes. Gracias a estas 3
medidas se obtiene un vector de campo que da información del ángulo de azimut* del móvil o de su posición. Vendría a ser la versión ampliada a 3 dimensiones de la brújula,
El campo se mide a través unas magneto-resistencias que cambian su valor en
función del campo que las atraviesa en su dirección.



La Tierra actúa como un dipolo, pero no está alineado con sus ejes de rotación (7 grados aprox). Por eso siempre aparece un término de Declinación, que es la separación entre el sur magnético y el norte geográfico. Por Norte y sur magnético se entiende aquella región
de la tierra donde las líneas de campo son perpendiculares a la superficie terrestre, En los polos este ángulo tiene 90°, en el ecuador 0° y en Europa alrededor de unos 60°. Por eso las agujas de las brújulas magnéticas siempre son balanceadas, y este balanceo solo sirve para una region de tierra.





Gracias a las medidas en los 3 ejes del campo magnético, se puede calcular la orientación relativa de un objeto (drone) haciendo con ello una brújula electrónica.



*Acimut o azimut, que es el plural de samt 'dirección', se refiere a un ángulo de la orientación sobre la superficie de una esfera real o virtual.