Application de contrôle du drone radiocommandé ARDrone sous Android
Dans le cadre de mon stage de fin d'étude à l'INSA de Rennes, j'ai été amené à développer une application Android permettant de piloter le drone ARDrone de Parrot via une connexion WiFi. Cette application permet non seulement de piloter le drone mais également de permettre la retransmission des données de vol (altitude, état de la batterie, etc...) et de la vidéo (caméra frontale & verticale) à un tiers équipement pour une retransmission (ici sur une télévision 3D).
Technologies 
L'application est compatible avec les terminaux android type smartphone et tablette (version 2.1 à 3.2 testé). Plusieurs technologies et langages ont été utilisées :
- Android SDK qui est le coeur même de l'application, que ce soit pour la partie graphique que pour la connexion réseau avec le drone
- Android NDK à été utilisé pour accélérer le décodage et l'affichage de la vidéo reçu. L'image est décodée et écrite dans un buffer openGL pour être affichée
- Des scripts bash ont permis de configurer le drone pour qu'il se connecte à un routeur. En effet, les versions d'Android utilisées ne permettent pas une connexion WiFi Ad-Hoc.
- C'est via des liaisons UDP unicast/multicast que le drone communique. C'est pourquoi il faut adapter les connexions Android, qui n'aime pas trop le multicast, pour faire fonctionner le drone et recevoir ses données.
Description
Connexion au drone 
Dans un premier temps, l'application va vous permettre de se connecter au drone. Techniquement, ce n'est pas vraiment une connexion étant donné que tout les échanges se font via UDP.
L'application va surtout vérifier la présence du drone sur le réseau WiFi connecté. En plus de cela, elle va également vérifié que personne d'autre n'utilise le drone sur ce même réseau pour ne pas perturber le pilotage
Le seul moment ou cette dernière vérification ne se fait pas, c'est lorsque l'utilisateur paramètre l'application en mode espion. Ce mode permet de récupéré les données multicast du drone (vidéo, données de vol) sans prendre le contrôle du drone.
Interface de pilotage du drone 
Une fois le drone trouvé, l'application configure le drone avec les paramètres de l'utilisateur enregistrer sur le terminal Android. La configuration terminé, on peut commencer à piloter le drone.
L'interface est totalement multitouch. Il est possible de contrôler l'altitude via un glissement de doigts sur la barre verte/rouge à droite et d'éffectuer une rotation du drone avec sa représentation centrale en même temps.
Le drone virtuel centrale se manipule avec un glissement du doigts sur une des ailes de celui-ci. Sa position se met également à jour avec les données gyroscopiques du drone. Ce qui fait que le drone virtuel (à l'écran) est toujours dans la même position que le drone reél par rapport à vous.
Le mouvement du drone se fait via l'acceleromètre du terminal Android. Si le terminal penche vers la droite, le drone ira à droite par rapport au réferenciel de l'utilisateur, et donc en adequation avec le drone virtuel.
Différentes jauges permettent d'avoir un retour sur la plupart des variables du drone. Le canvas OpenGl ES à l'arrière est constament rafraichi par l'interfaçage JNI avec la librairie de décodage.
Paramètrage 
La partie paramètrage réseau permet, via l'interface principal, de changer l'adresse du tiers recevant les données vidéo, de retransmettre ou non via multicast les données du drone et de passer en mode espion pour recevoir toutes les données lorsque quelqu'un d'autre pilote le drone.
Les paramètres de pilotage permettent d'afiner l'éxperience utilisateur en permettant de jouer sur la sensibilité du drone ou de la tablette. Par exemple, on va pouvoir definir un angle maximum de déplacement, une vitesse maximum de rotation. Au niveau du terminal, on peut regler la sensibilité de l'acceleromètre ou le taux d'erreur acceptable de l'angle du drone virtuel.
Liens utiles
- Technologies
- Fonctionnalitées générales