ARDrone : UCAPA et Virtual Flight

Ce projet de fin de DUT consiste à implémenter une application quelconque permettant de manipuler un drone. Celui sur lequel nous avons travaillé est un Parrot AR.Drone 2.0 qui peut être contrôlé via wifi.

Le projet se décompose en plusieurs parties :
- premièrement une API haut niveau pour le contrôle du drone, accompagné d'une application de navigation simple.
- ensuite, une application de réalité augmentée où le pilote du drone doit passer dans des anneaux virtuels et éviter des obstacles virtuels.

Le projet en détails


Une API officielle pour ARDrone est mise à disposition par Parrot. Celle-ci est codée en C et reste relativement bas niveau (on y trouve notamment l'utilisation de macros pour gérer les threads et avec lequelles le développeur d'application pour ARDrone doit directement interagir). Nous avons donc fait le choix dès le début de créer une couche d'abstraction en utilisant la POO pour obtenir un ensemble plus haut niveau qui nous permettrait de gérer les interactions avec le drone.
Cependant, nous avons été confronté à plusieurs difficultés lorsque nous avons voulu compiler l'API officielle. Je ne les détaillerai pas ici, mais en cherchant des solutions à nos soucis, nous nous sommes rendu compte que beaucoup de personnes qui réalisaient des projets sur l'ARDrone n'utilisaient pas l'API officielle. Au final, après avoir testé de nombreuses de solutions possibles sans grand succès, nous avons finalement choisi de réaliser notre propre API, entièrement en C++. En faisant ce choix, nous avions pour but de réaliser une API haut niveau qui serait ensuite publiée sous licence libre pour que ceux qui en auraient le besoin puissent la réutiliser.

Nous avons donc créé la Unofficial C++ API for Parrot ARDrone 2.0 (UCAPA) que nous avons publiée sous licence MIT. Multiplateforme, elle est disponible sur github et est accompagnée d'exemples d'utilisation et d'une documentation (comme toute API digne de ce nom).
En ce qui concerne sa réalisation, UCAPA utilise la bibliothèque Asio pour gérer toute la partie réseau du drone et FFmpeg pour le décodage du flux vidéo. Elle est accompagnée de deux exemples (Navigator et Derivate). Navigator dépend aussi de Qt.
Navigator montre l'ensemble des possibilités offertes par l'API. Elle permet donc de contrôler le drone (le faire décollé, atterrir, se déplacer, ...), affiche les données de navigations reçues, affiche la vidéo reçue et permet de modifier la configuration du drone.

En ce qui concerne notre application de réalité augmentée appelée Virtual Flight, elle se charge d'intégrer des anneaux et obstacles virtuels à la vidéo transmise par le drone (à l'aide d'OpenGL) et aussi de détecter le passage du drone dans les anneaux et les collisions (virtuelles) avec les obstacles. Bien que pouvant être dit en une seule phrase, cela représente un travail conséquent. L'application intègre tout cela sous la forme d'un jeu dont le but est de faire, en un temps imparti, le maximum de points, en sachant qu'un anneau traversé en donne un et qu'un obstacle touché en retire un. Le début de partie se fait après un compte à rebours.

Intérêt du projet


Ce projet a été très intéressant car il a permis de combiner une très grande variété de connaissances acquises durant le DUT : allant de la programmation orientée objet de manière général à des éléments plus spécifiques tels que le réseau (tcp et udp, synchrone et asynchrone), l'OpenGL, et sous un angle plus mathématique, l'utilisation de matrices. En même temps, il nous a aussi fallu surpasser les connaissances acquises durant le DUT dans certains cas. Pour la partie mathématique, nous avons utilisé les quaternions, et en ce qui concerne le développement, nous avons fait usage de certaines nouveautés apportées par le C++11 parmi lesquelles on trouve les threads, les mutex, les atomics, ainsi que les chronos et les générateurs de nombres aléatoires uniformes.

Liens et vidéos

L'API UCAPA est disponible sur Github à l'adresse suivante : https://github.com/UCAPA/ucapa

Voici une petite vidéo montrant notre application de réalité augmentée, Virtual Flight :