miércoles, octubre 31, 2012

4copter: Conceptos (I) - Ejes giros y fuerzas

En aeronáutica se consideran 3 ejes de dirección centrados en objeto volador: les llamaremos por simplicidad X, Y, Z. El eje X se considera siempre el eje de la dirección de movimiento (normalmente el eje que pasa por el morro y la cola del avión). El eje Y se considera perpendicular a la dirección de movimiento, siempre en el mismo plano del avión (el eje que pasa por las alas). El eje Z se considera el eje perpendicular a los anteriores, y por lo tanto perpendicular al plano del avión. La dirección de los ejes es la que se puede observar en la figura.


Esta dirección no es arbitraria sino que responde a un sistema de coordenadas muy usado en aviónica: el sistema NED (nord, east, down).

A partir de estos ejes se consideran 3 giros superpuestos a los mismos:
  • Alabeo (Roll): giro sobre el eje X.
  • Cabeceo o picado (Pitch): giro sobre el eje Y.
  • Giñada (Yaw): giro sobre el eje Z.

También, a partir de estos ejes definiremos las fuerzas que actúan sobre el avión:
  • Empuje (Thrust)
  • Sustentación (Lift)
  • Resistencia (Drag)
  • Peso (Weigth)

En caso del cuadróptero la elección de los ejes X e Y es arbitraria; sin embargo, por simplicidad, definiremos uno de los mástiles como el "frontal" del cuadróptero y, por lo tanto, fijaremos el eje X e Y. A esta configuración se le llama disposición del cuadróptero en '+'; en contraposición podríamos fijar los ejes X e Y que fueran a 45º grados de dos de los mástiles que soportan los motores y tendríamos una configuración en 'x'



La elección de la configuración en '+' en vez de en 'x' se ha realizado para facilitar los cálculos a realizar por parte del sistema, el lado negativo es que cuando se quiera cambiar de posición u orientación el trabajo lo realiza un sólo motor.

S2

Ranganok Schahzaman

jueves, octubre 25, 2012

4copter: Fusión de sensores (II) - Filtros Complementarios

En el post anterior hablabamos de la fusión del accelerómetro y el giroscopio para obtener el ángulo y la velocidad angular en un sólo eje, mediante el algortimo de filtros complementarios. Antes de seguir con otros algoritmos es necesario hacer un par de aclaraciones:
  1. El algoritmo utiliza una aproximación del valor devuelto por el accelerómetro tal que se considera sin(x) = x, esto se puede hacer a patir del desarrollo del polinomio de Taylor para esta función alrededor del ángulo 0:
    $$ sin (x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + ...$$
    Para un polinomio de grado 1, se puede observar que da una aproximación bastante buena para +-30º.
  2. En 3 dimensiones la cosa se complica ya que al girar uno de los ejes la rotación en los otros dos se ve afectada (por eso se dice que las rotaciones no son conmutativas, pero ya llegaremos a eso más adelante). Una imagen de la Wikipedia es mejor explicación:
    Euler2
    Sin embargo el mismo algoritmo de filtros complementarios puede ser utilizado siempre que el desplazamiento del eje vertical no sea demasiado grande (mayor a 30º), de esta formas el accelerómetro corregirá este desplazamiento, aunque muy lentamente debido al filtro paso-bajo.
  3. La guiñada (yaw) no se podrá corregir con el accelerómetro (a no ser que este se ponga en uno de los extremos y podamos medir la acceleración centrípeta), por lo que sólo se corregirá a partir del giroscopio. el problema de esto es que el giroscopio presenta una deriva en el tiempo que hará que el sistema gire y no apunte a un rumbo concreto. Para corregir este giro deberíamos incluir un magnetrómetro en el sistema.

martes, octubre 23, 2012

4copter: IMU de 10dof (II) - Presentación

Nivel de diseño

En robótica se definen 6 niveles de diseño, en un claro paralelismo con los niveles de la OSI en programación:
  1. Nivel Físico: Comprende la estructura física, las unidades motoras y las etapas de potencia.
  2. Nivel de Reacción: Está formado por el conjunto de sensores y los sistemas básicos para su manejo.
  3. Nivel de Control: Incluye los circuitos más básicos que relacionen las salidas de los sensores con las restantes unidades.
  4. Nivel de Inteligencia: Abarca la planificación a largo plazo.
  5. Nivel de Comunidad: Se trata de la puesta en funcionamiento de más de un robot dentro de un mismo entorno de forma simultánea y sin que ninguno de ellos tenga conocimientos explícitos de la existencia de otros en su mismo entorno.
  6. Nivel de Cooperación: Comprende los sistemas donde a partir de un nivel de comunidad se planifican o programan los robots para que tengan conocimiento de la existencia de otros, de manera que posean la capacidad de cooperar para el buen desarrollo de una tarea.

El objetivo de este proyecto es la de realizar un UAV (Unnamed Aerial Vehicle) de cuatro motores (también conocidos como cuadrópteros), que contenga un sistema de navegación que estabilice el UAV (piloto). Se realizará el diseño en los niveles 1, 2 y 3 (definidos anteriormente), de esta forma se deja como líneas futuras los niveles 4, 5 y 6 (planificación a largo plazo, comportamiento en comunidad y cooperación).


Líneas de actuación

Este proyecto puede ser el germen que de paso a una gran cantidad de proyectos. Vamos a definir algunos ordenándolos por niveles de diseño (ver apartado anterior):
  1. Nivel Físico
    • Diseño de un ESC para un mayor control de los motores: control vectorial del motor (Field Oriented Motor), generación de las fases con PWM con tercer armónico o SVPWM para un mayor aprovechamiento de la energía, comunicaciones de los ESC por I2C o SPI para una respuesta rápida de los motores.
    • Diseño de estructuras de 3, 4, 6 u 8 hélices, se puede cambiar la estructura del cóptero para utilizar más o menos motores. Más motores generalmente implicarán una mayor estabilidad al conjunto y un número menor de motores generalmente implicará menor consumo y mayor agilidad.
  2. Nivel de Reacción
    • Añadir sensores para mayor control del equipo: acelerómetro, giroscopio, barómetro, receptor GPS, brújula, etc.
    • Añadir sensores para mayor conocimiento del entorno: cámaras, sensores láser, ultrasonidos, infrarrojos, etc.
    • Software para la fusión de datos de los sensores: DCM, quaterniones, filtros de Kalman, algoritmos predictivos, etc..
  3. Nivel de Control
    • Añadir un hardware para aumentar la potencia de cálculo y el control de misiones a largo plazo: micro-PC, raspberry pi (y similares), teléfonos inteligentes, etc.
    • Inclusión del protocolo MAVLink para el control y la telemetría del vehículo. El protocolo MAVLink (Micro Air Vehicle Comunicatión Protocol ) se está convirtiendo, actualmente en uno de los más usados por lo que sería interesante incluirlo para el control y la telemetría del vehículo.
  4. Nivel de Inteligencia
    • Software para misiones a largo plazo: mapeado de entornos, seguimiento de objetos o personas, cálculo de la posición en interiores, reconocimiento del entorno./li>
  5. Nivel de Comunidad
    • Software para el control de comunidades: algoritmos de enjambre (swarm).
  6. Nivel de Cooperación
    • Software para el control de la cooperación entre equipos: inteligencia distribuida.

S2

Ranganok Schahzaman

domingo, octubre 21, 2012

4copter: Fusión de sensores (I) -Filtros Complementarios

Uno de los primeros problemas que nos encontramos a la hora de intentar estabilizar un UAV es la necesidad de conocer la posición, la orientación (inclinación) y la velocidad de giro actual.

Existen múltiples sensores que pueden ayudar a conocer estos datos, los sistemas de navegación satelital (GPS, GLONASS, próximamente GALILEO, ...), giroscópios, acelerómetros, barómetros, brújulas magnéticas o magnetrómetros, etc. Las señales de estos sensores, en primer lugar hay que procesarlas y luego combinarlas para eliminar los errores y derivas intrínsecos de los sensores y el ruido o las interferencias del sistema.


Para estabilizar el sistema no es necesario conocer la posición exacta sino que es más importante la orientación y las velocidades de giro; esto es debido a que podemos utilizar un algoritmo Proporcional-Derivativo (PD) para el control de los motores. Por ejemplo para un sólo eje podríamos definir el siguiente algoritmo :

$$ Motor Output = K_p \cdot Angle + K_d \cdot Angular Velocity $$
Para obtener estas variables usaremos una combinación de accelerómetro y giroscópio (el magnetrómetro nos podría servir para terminar de refinar los datos por lo que lo podríamos incluir más adelante).

La forma más obvia es utilizar el acelerómetro para medir el ángulo y el giroscópio para medir la velocidad angular.


La ventaja de esto es que no existe procesado ninguno y se obtienen las muestras sin retardo. El problema principal es que el accelerómetro es muy sensible todas las aceleraciones lineales (vibraciones y desplazamientos lineales) por lo que los parámetros de salida serán muy ruidosos y con errores durante los desplazamientos.

Es conveniente filtrar (con un filtro paso bajo) la señal del accelerómetro.


La ventaja de este sistema es que es muy fácil de programar y el filtro elimina los ruidos y las acceleraciones lineales. Sin embargo esto produce un retardo en la percepción del ángulo, lo cual puede provocar problemas en la estabilización.

Sin embargo, podríamos añadir los datos recogidos por el giroscopio para eliminar el retardo:

No podemos utilizar los datos del giroscopio directamente (integrados en el tiempo para pasar de velocidad angular a ángulo) dado que este tiene una deriva temporal que los inutiliza, sin embargo, a corto plazo sirven para eliminar el retardo producido por el filtro aplicado al accelerómetro.

En código se traduce de forma muy fácil:
$$ Angle = \alpha \cdot (Angle + gyro \cdot dt) + (1 - \alpha) \cdot acc $$
A partir de aquí podemos deducir la constante de tiempo para los filtros paso-bajo y paso-alto:
$$ \tau = \frac{ \alpha \cdot dt }{ 1 - \alpha } $$

Esta última técnica se llama Filtros complementarios, y tiene múltiples ventajas:
  • Reduce el ruido y la deriva producido por los sensores
  • Reduce el retardo en la estimación del ángulo
  • No implica un coste excesivo en tiempo de proceso

S2

Ranganok Schahzaman

EDITO: Se ha utilizado una aproximación para definir el ángulo a partir de los datos del accelerómetro y es que para x pequeños:
$$ sin (x) \approx x $$
Dado que de lo que se trata es de estabilizar el sistema este siempre se moverá en ángulos pequeños y la aproximación utilizada será cierta (x<30º)