Résumé : Ce document présente, dans le cadre d'un projet tuteuré, des solutions concernant le pilotage automatique d'un AR Drone 2.0. Des techniques de vision permettant de guider le drone vers une piste d'atterrissage sont aussi décrites. Sont principalement abordés le fonctionnement du SDK mis à disposition par Parrot ainsi que des propositions de solutions de détection d'image utilisant OpenCV qui constitue la prochaine étape de l'évolution de notre projet. Introduction : La mission du projet est de réaliser un programme permettant à un AR Drone 2.0 de décoller et d'atterrir de manière automatique sur une piste d'atterrissage représentée par un dessin ou autre. Dans un premier temps, ce document aborde les solutions que nous avons apportées concernant le pilotage du drone et dans un second temps il présente des idées pour la détection de la piste d'atterrissage. Chapitre 1 Présentation des problème et solutions Ce chapitre détaille un moyen de pilotage de l'AR Drone 2.0 et présente notre principe d'atterrissage ainsi que des amorces de solutions concernant la détection d'une piste à l'aide des caméras embarquées sur le drone. 1.1 Le pilotage du drone 1.1.1 L'architecture du SDK Afin de résoudre notre problématique, l'objectif premier est de faire décoller le drone et de le piloter. Pour réaliser cela nous avons le SDK mis à disposition par Parrot à l'adresse http://developer.parrot.com/products.html celui-ci nous donne accès à une API permettant d'envoyer des commandes au drone. Lorsqu'il est alimenté, le drone créé un réseau Wifi sur lequel il faut se connecter afin de pouvoir lui envoyer des commandes. Une fois décompressé, le SDK contient deux dossiers particulièrement intéressants. D'une part ARDroneLib qui contient toutes les fonctionnalités nécessaires pour commander le drone et d'autre part, Exemples qui nous offre quelques squelettes de programmes. Avant toute chose il faut commencer par compiler le SDK en allant dans le reportoire ARDroneLib/Soft/Build et en exécutant la commande make. Cela étant fait on peut commencer à s'intéresser aux exemples afin de s'approprier l'architecture d'un projet utilisant le SDK. En lisant les sources des différents exemples, on observe que chaque projet dispose d'un fichier ardrone_testing_tool.c qui contient des fonctions, d'initialisation et d'arrêt ainsi qu'une table listant les différents threads qui doivent s'exécuter. En effet, le développement d'un programme utilisant le SDK repose principalement sur la définition de threads qui doivent être initialisés et démarrés dans la fonction ardrone_tool_init_custom. Il ne faut évidemment pas oublier de prendre en compte la phase d'arrêt dans la fonction ardrone_tool_shutdown_custom. Pour intégrer notre propre code, il faut donc définir une fonction qui sera exécutée dans un thread à l'aide de la macro DEFINE_THREAD_ROUTINE sans oublier de l'ajouter à la table des threads se trouvant à la fin du fichier ardrone_testing_tool.c. 1.1.2 Pilotage et préparation pour la vision Dans un premier temps, nous avons compilé et exécuté différents exemples mis à notre disposition par le SDK. Après avoir appréhendé l'architecture générale du SDK nous avons décidé de commencer à développer à partir d'un exemple travaillant sur le retour du flux vidéo des caméras du drone. La première modification que nous avons effectué a été de remplacer l'interface graphique de base qui était alors GTK par OpenCV. Ce choix a été motivé par le fait que nous savions par avance qu'OpenCV nous donnerait un accès à certaines fonctionnalités de reconnaissance d'image dont nous aurions besoin plus tard lors de la détection de la piste d'atterrissage. Dans un second temps, nous avons implémenté un programme de pilotage nous permettant de contrôler le drone à l'aide des entrées clavier . Nous avons réalisé ce programme dans le but de nous simplifier les tests et de nous familiariser avec les fonctions liées au déplacement du drone. Cependant, dans la version finale du projet le pilotage sera totalement automatisé. 1.2 Détection d'une piste d'atterrissage 1.2.1 Principe de l'attérrissage Après avoir pris en main les différentes fonctions de pilotage du drone, nous nous sommes penchés sur la problématique concernant l'atterrissage de celui-ci. Le principe d'atterrissage que nous envisageons de mettre en oeuvre est le suivant. En premier lieu, le drone effectue une rotation sur lui-même jusqu'à ce que la piste d'atterrissage apparaisse dans son champ de vision. Une fois que la piste d'atterrissage est détectée, il faut essayer de la centrer sur l'axe X de la caméra frontale puis se diriger tout droit jusqu'à ce qu'elle apparaisse sur la caméra inférieure. Une fois sa présence détectée sur la caméra inférieur on cherche à la centrer sur les deux axes X et Y puis on effectue un atterrissage. Dans le cas où la piste d'atterrissage est directement visible sur la caméra inférieure, on peut ignorer la première partie de ce principe d'atterrissage. 1.2.2 Template Matching et améliorations Comme expliqué précédemment nous avions mis en place OpenCV afin de pouvoir exploiter certaines fonctionnalités de détection d'image. Notre première approche a été d'effectuer quelques tests isolés sur la technique de "Template Matching" d'OpenCV qui consiste à essayer de retrouver une image à l'intérieur d'une autre tant que celle-ci n'a pas subi énormément de transformations. Dans des cas simples cette solution s'avère fonctionnelle. Elle pourrait servir dans un cas d'utilisation bridée du drone. Par exemple en définissant une altitude fixe et en utilisant la caméra inférieure du drone. En faisant ainsi on aurait alors juste à essayer de reconnaître notre image template telle quelle à l'intérieur de l'image retournée par la caméra. Si l'approche précédente ne s'avère pas suffisamment satisfaisante, afin d'améliorer la flexibilité de cette solution on pourrait envisager de pré-calculer différentes transformations de notre image template afin que le drone puisse la détecter sans contraintes de vol et en utilisant la caméra frontale. Chapitre 2 Conclusion À ce stade nous avons donc un moyen de piloter le drone ainsi qu'une amorce de de solution concernant la détection de la piste d'atterrissage. La prochaine étape est d'implémenter et de tester les idées concernant la vision. Il faudra donc essayer une solution de "Template Matching" standard et si le résultat obtenu n'est pas suffisant, envisager une solution plus complexe à base de multiples templates.