martes, 2 de marzo de 2010

Controlar un vehículo aéreo no tripulado desde Android

Este post no es un tutorial, sólo una recopilación de apuntes.


Un Vehículo Aéreo no Tripulado (UAV - Unmanned Air Vehicle, desde ahora) es un avión, helicóptero, quadcóptero o cualquier cosa que vuele sin la supervisión en tiempo real de un humano. La diferencia entre un UAV y un vehículo radiocontrolado es que el último necesita la intervención y supervisión continua de algún ente que lo domine y el primero tiene los sistemas típicamente electrónicos que le confieren la inteligencia suficiente para ejecutar órdenes, lidiando con los obstáculos o impedimentos (viento, fallos de comunicación, etc.) por sí mismo.

Hay gran cantidad de proyectos de UAVs, desde los de bajo presupuesto hasta los utilizados en operaciones militares, capaces de transportar y disparar armamento (UCAV, Unmanned Combat Air Vehicle). Además, teniendo en cuenta que los aviones de transporte civil aterrizan de forma automática en la mayoría de las situaciones, habría que tenerlos en cuenta al hablar de vehículos no tripulados.

En lo que estoy trabajando desde hace unos meses con un compañero del trabajo es en crear la -ya clásica- estructura para un quadcopter. Gracias a lo que ha avanzado la tecnología en motores R/C, es bastante económico hacer un vehículo volador con cuatro motores brushless y un controlador tipo Arduino.


Las características del sistema que hay que maximizar en principio son:
  • Duración del vuelo
  • Peso que es capaz de levantar
  • Dureza y tolerancia a los choques
  • Capacidades (GPS, cámara, acelerómetro, brújula, telemetría, etc.)
Lo que hay que minimizar es:
  • Peso de todo el sistema
  • Tiempo de respuesta (en general)
  • Coste
Un móvil moderno tiene las siguientes capacidades y características, por orden de importancia:
  • Peso reducido
  • Procesador de 300Mhz-1Ghz
  • Puerto de comunicación USB
  • Conexión GPRS/UMTS
  • Batería de larga duración
  • Acelerómetro de tres ejes
  • Brújula
  • GPS
  • Altavoz
  • Pantalla gráfica
  • Dispositivo de almacenamiento
  • Cámara de fotos y vídeo
  • Cierta dureza
  • Micrófono
Es una elección lógica, por lo que no soy el primero en pensar que es un controlador perfecto para un UAV. Si elegimos un móvil Android para el proyecto, dado que es Open-Source y se basan en hardware potente, el equipo parece tener un potencial impresionante (y bastante divertido).

Temas resueltos:
  • Aunque la electrónica de control y comunicaciones se realice en el móvil, un controlador externo basado en Arduino (con chip AVR) deberá lanzar las órdenes a los motores.
  • Desde Android se cambian los parámetros de vuelo, no se controlan directamente los motores.
  • La comunicación con el móvil se hace por GPRS/UMTS o Wi-Fi indistintamente.
  • Aunque se cuente con un GPS, el control se debe hacer en base a datos de un sensor de altura o barométrico, externo al sistema.




Los asuntos que aún hay que tratar son (algo así como un TO-DO List):
  • Habilitar la comunicación serie en el móvil, modificando el kernel del móvil: http://code.google.com/p/android-serialport-api/ y http://forum.xda-developers.com/archive/index.php/t-496976.html
  • Crear el circuito interfaz entre móvil y el controlador externo. http://www.instructables.com/id/Android_G1_Serial_Cable/
  • Dotar al software de prioridad suficiente en el móvil para evitar que otras aplicaciones lo saturen
  • Conseguir un quadcopter totalmente funcional radiocontrolado con Arduino y alguno de los proyectos libres disponibles:
  • Probar si el acelerómetro del móvil es suficientemente:
    • Sensible
    • Rápido detectando cambios,
    • Rápido comunicándose con el software
    • Rápido comunicándose con la Arduino
    Puesto que es bastante posible que falle en alguno de estos pasos, habrá que tener en cuenta la posibilidad de adaptar un acelerómetro externo conectado directamente a la Arduino.
  • Crear un protocolo de comunicaciones que admita comandos desde un portatil como:
    • Ir a un punto con el GPS
    • Pararse, manteniendo una altura.
    • Tomar una foto
    • Empezar un vídeo
    • Terminar un vídeo
    • Calibrar a 0
    • Aterrizar
    • Desplegar un paracaídas (por qué no)
  • Crear un sistema de telemetría que envíe datos por el mismo canal de comunicación al portatil.
    • Datos del GPS
    • Datos del acelerómetro
    • Vídeo en tiempo real
Nota sobre licencias: todas las fotos son CC de fuentes mencionadas y vinculadas en el post.

No hay comentarios: