Desarrollo de un sistema de aterrizaje autónomo sobre una plataforma de carga para un UAV tipo Parrot AR.Drone 2

Autor: Gil Fernández, Marcos Enrique
Přispěvatelé: Ferre Pérez, Manuel, Ribeiro Seijas, Angela
Jazyk: Spanish; Castilian
Rok vydání: 2016
Předmět:
Zdroj: Archivo Digital UPM
instname
Popis: El presente proyecto de fin de grado tiene como objetivo el desarrollo de un sistema de aterrizaje autónomo para un UAV Parrot AR.Drone 2.0. Concretamente el aterrizaje se realiza sobre una plataforma de carga desarrollada previamente por el grupo del CSIC. Un aterrizaje autónomo se define como un aterrizaje con la correcta orientación, sobre una zona predefinida, sin intervención humana. El procedimiento se inicia después del reconocimiento de la zona de aterrizaje, hasta ese momento el control manual es necesario. La mayor parte del desarrollo se realiza sobre el lenguaje de programación, originalmente de páginas web, JavaScript. Concretamente se utiliza el framework NodeJS, a partir de ahora referido en este documento como node, esta tecnología permite la ejecución de programas hechos en JavaScript en un ámbito independiente del navegador. Como apoyo al desarrollo se utiliza el entorno Matlab, este se emplea como una herramienta de prueba e investigación de algoritmos tanto de procesamiento de imagen como de configuración de controladores. Un aterrizaje se puede dividir en tres procesos: movimiento horizontal hasta detectar el patrón, orientación de la posición del UAV hasta el ángulo óptimo y descenso manteniendo la orientación y localización hasta alcanzar la plataforma de carga. En este resumen se presentan los módulos desarrollados para conseguir el objetivo mediante un proceso cíclico, estos se dividen en un módulo de visión y en un módulo de control. También se introducen la metodología llevada a cabo y los resultados obtenidos. La estrategia que se ha empleado en este proyecto se basa en el reconocimiento y segmentación de un patrón predefinido. El patrón diseñado consiste en tres rectángulos alineados de color azul, dos rectángulos de igual tamaño en el exterior y un rectángulo de inferior tamaño en el interior. A partir de este patrón se aplica un algoritmo de segmentación de color que permite el reconocimiento de los tres rectángulos, la idea se basa en métodos de binarización por umbral matiz, saturación e intensidad de la imagen. El objetivo es crear una imagen binaria en blanco y negro en la que destaquen en blanco aquellos píxeles que pertenezcan al patrón por tener el mismo color. La imagen binaria se tratará con el fin de obtener buenos contornos para el posterior filtrado que permitirá seleccionar de entre todas las figuras detectadas, aquellas que coincidan con el patrón buscado por su tamaño y demás características geométricas. Una vez acabado este paso el resultado será el centro geométrico del cuadrado central que se considerará como el punto de aterrizaje. Además gracias a la presencia de los dos cuadrados exteriores se podrán obtener dos puntos que definan la orientación. Se remarcará el contorno y el centro de los rectángulos en resultado final. Se encarga del movimiento del UAV, para ello envía comandos de movimiento que son las salidas de los bloques de control elegidos. La estrategia de control se basa en el mecanismo genérico de control en bucle cerrado con bloques PID (siglas del controlador Proporcional-Integral-Derivativo). Se utilizan cuatro controladores PID para controlar al UAV, uno para el movimiento delante/atrás, otro para el desplazamiento izquierda/derecha, otro para la rotación y un último para la altura. Las entradas a estos bloques son los errores entre la posición del UAV y la posición objetivo. Para calcular estos errores es necesario conocer las distancias entre la posición actual del vehículo y el resultado del módulo de visión. Las distancias vertical y rotacional se miden directamente con las medidas del sensor de ultrasonidos (altitud) y el giróscopo (yaw) respectivamente, lo que si se tiene que calcular son las distancias horizontales. El ajuste de las ganancias de los controladores se ha estimado de manera heurística, realizando pruebas con la toolkit de Matlab AR Drone Simulink Development-Kit V1.1. Con esto valores es posible ajustar también el funcionamiento para el caso real. La estrategia seguida ha consistido en desacoplar el desarrollo de los dos módulos del proyecto, de modo que se han implementado de manera independiente con la idea de asegurar el funcionamiento para posteriormente integrarlos en el software del AR Drone. La integración se quiere realizar utilizando librarías basadas en node. La elección de node se fundamenta en que se trata de un sistema de ejecución de entradas/salidas (E/S o I/O) asíncrono, basado en subprocesos. De esta forma la ejecución del programa no presenta bloqueos e incorpora los callbacks cuando van regresando de los subprocesos. Este sistema resulta muy rápido y eficiente cuando existen decenas de miles de conexiones recurrentes. Además se trata de un entorno de trabajo de código abierto con una gran comunidad de desarrolladores detrás. Esta comunidad sigue diferentes líneas de desarrollo, como en este caso en el que para el módulo de actuación se utiliza la librería node-ar-drone (Geisendörfer, 2012) y para la comunicación con el cuadrotor la librería ardrone-webflight (Eschenauer, 2013) que crea una arquitectura de desarrollo sobre node-ar-drone a la que se pueden añadir plugins con nuevas funcionalidades. El objetivo por tanto será crear un plugin que añada la capacidad de aterrizaje autónomo investigada en este trabajo. Por otro lado, el módulo de visión se basa en OpenCV, una biblioteca libre de visión artificial originalmente desarrollada por Intel en el lenguaje C++. Para adaptar esta librería a JavaScript se ha utilizado la versión de OpenCV en node llamada node-opencv. Esta librería propia de node presenta las funciones esenciales para el procesamiento de una imagen. El módulo node-ar-drone implementa todas las funciones de comunicación con el UAV, tanto para recibir la información general, los estados de los sensores, las imágenes de las cámaras y para enviar los comandos de control. Por su parte, el módulo ardrone-webflight se sitúa por encima del módulo anterior para utilizar toda su funcionalidad con una arquitectura de plugins. La idea supone separar las diferentes características en diferentes paquetes, de esta forma se consigue una mayor flexibilidad y facilidad para mantener el código. Los paquetes utilizados en este proyecto son, ardrone-autolanding encargado del aterrizaje autónomo, pilot que agrega la funcionalidad de pilotaje con el teclado del ordenador, video-png que sirve las imágenes provenientes del UAV en el puerto 3000 para poder ser visualizadas en un navegador y hud que añade al video servido en el navegador de datos del estado del UAV y sus sensores, estos valores pueden ser la altura, el ángulo de rotación en los tres ejes y la velocidad. Finalmente, se comprueba que el módulo de visión reconoce con éxito el patrón diseñado en el 100% de los casos y que el módulo de control está preparado para la integración en el plugin que permite el aterrizaje autónomo del UAV. Las pruebas del plugin con toda la funcionalidad no se han podido realizar todavía por problemas de plazos pero se han desarrollado y se presentan todos los pasos previos necesarios para encajar los dos módulos y se continuará el desarrollo hasta el momento de la presentación del trabajo ante el tribunal, es decir el mes de septiembre.
Databáze: OpenAIRE