AR. Drone C# Contrôlé à l`aide de la caméra embarquée
Transcription
AR. Drone C# Contrôlé à l`aide de la caméra embarquée
• AR. Drone 2014-2015 • Masson Nicolas AR. Drone C# Contrôlé à l’aide de la caméra embarquée Masson Nicolas 3ème Génie Électrique passerelle Haute Ecole Paul-Henri Spaak département I.S.I.B. [email protected] Abstract Ce bureau d’étude a consisté à poursuivre le projet débuté en 2013 sur le drone quadricoptère version 2.0 de la société Parrot. L’objectif principal était de rendre autonome le déplacement du drone à l’aide du traitement d’image qu’il filme et de pouvoir réaliser une rotation autour d’un point fixe ou mobile. L’idée première était de pouvoir lâcher le drone depuis une nacelle de montgolfière et d’obtenir aussi une prise de vue des passagers. • Optimiser la détection de couleur par un nouvel algorithme. I. Introduction : e drone Parrot n’est pas autonome par défaut dans ses déplacements. Il sait se stabiliser seul et exécuter un ensemble d’instructions bien précises. Pour le rendre autonome, il faut communiquer avec lui via WI-FI les instructions qu’il doit réaliser. Le programme "The AR.Drone 2.0 controlling library for C# " permet de contrôler le drone à distance avec le langage C Sharp (.NET). C’est ce programme qu’a utilisé mon prédécesseur sur ce projet. Au final, l’ensemble de son programme était bogué et mal optimisé aussi bien dans la lisibilité du code, que dans l’exécution de celui-ci. Il a donc fallu revoir l’ensemble du projet afin d’améliorer la stabilité et les performances du programme : L • Rendre le drone contrôlable via un joystick. • Ajouter la compatibilité Oculus Rift. Mots-Clefs : AR Drone, C Sharp, A Forge, Traitement d’image, Joystick, Oculus Rift. II. Matériels & Outils : • AR.Drone 2.0 Parrot • Ordinateur portable R CoreTM i3 - 4GB Ram) (Intel⃝ • Bonnet Rouge • Analyser et précédent. comprendre le projet • Réorganiser globalement le code C# à partir du projet. • Joystick Logitech Extreme 3d pro • Oculus Rift SDK 1 • Microsoft Visual Studio 2010 Ultimate • Refondre l’interface graphique. • Optimiser la vitesse d’acquisition du flux vidéo et des données du drone. 1 AR. Drone • 2014-2015 • III. Refonte du projet : II. Masson Nicolas Filtrages : La refonte du projet a permis de repartir sur une base fiable et stable du programme "Ruslan-B/AR.Drone", voir annexe. Tout le logiciel est écrit en langage C Sharp (.NET) qui est édité à l’aide de Microsoft Visual Studio 2010. Je me suis attaqué en premier lieu à l’interface graphique. Il s’agissait de réaliser une refonte totale de l’interface, afin de la rendre plus lisible et plus conviviale pour l’utilisateur. Après avoir implémenter le "Head-Up Display" ("Simple HUD" voir annexe) qui permet d’afficher, comme dans les avions et autres véhicules aériens, le "Yaw - Pitch - Roll" (Lacet - Tangage - Roulis) et l’altitude, j’ai reprogrammé l’ensemble de la récupération et de l’affichage avec les données du drone transmises par WI-FI. Cela a permis d’atteindre le taux de rafraichissement de la caméra de 30fps (images par seconde) et de l’afficher dans le programme sans perdre en stabilité. Après quatre semaines de réorganisation et d’optimisation, je me suis penché sur le guidage du drone à partir d’un bonnet rouge. Pour cela j’ai repris le même framework du projet précédent : "Aforge.NET". Le drone est équipé de deux caméras, une qui filme devant lui et l’autre qui filme vers le bas. Pour le traitement d’image, je n’utilise que la caméra principale qui filme devant lui, car elle possède une meilleure résolution et un taux de rafraichissement plus élevé. Comme je veux filtrer une seule couleur sur l’image provenant du drone, j’utilise, à l’aide Aforge.NET, un filtre qui permet d’isoler la couleur. Le bonnet est rouge et je configure le filtre en "Red - Green - Blue" (255 - 0 - 0). IV. Contrôle par traitement d’image : Figure 1: "filter.CenterColor" rouge I. Aforge.NET : AForge.NET est une bibliothèque de traitement d’image pour le langage C# . Elle permet d’appliquer des filtres en temps réel, de compter des formes sur l’image, de reconnaître des glyphes et bien plus encore. Dans ce cas, j’ai utilisé les filtres et la détection de rectangle. Je n’ai pas implémenté la détection de glyphe comme dans le projet précédent, car je l’ai jugée trop gourmande en ressources sur le traitement d’image et je ne voulais pas refaire ce qui existait déjà dans l’ancien projet. 2 E u c l i d e a n C o l o r F i l t e r i n g f i l t e r . CenterColor = new AForge . Imaging . RGB( 2 5 5 , 0 , 0 ) ; Grâce à ce filtre, je récupère une image noire sur laquelle ne ressort que la couleur que je veux isoler (voir : Figure 1). A noter que mon programme permet de modifier dynamiquement la couleur que l’on veut détecter. Après ce filtre, j’utilise une option de Aforge.NET qui permet de compter l’ensemble des rectangles qui ressortent dans l’image. BlobCounter blobCounter . ProcessImage ( image ); Je récupère le plus grand rectangle détecté et je l’identifie comme la limite du bonnet. Je calcule le centre de celui-ci pour l’utiliser avec le correcteur. AR. Drone III. • 2014-2015 • Correcteur proportionnel : Pour diriger le drone en direction du bonnet, j’ai mis en place un correcteur proportionnel. Celui-ci calcule la commande via trois paramètres : • Le centre du rectangle est à gauche ou à droite du rectangle central blanc. • Le centre du rectangle est en haut ou en bas. Masson Nicolas avancer, il peut perdre le bonnet rouge de son champ de vision. V. Contrôle manuel : I. Contrôle avec le programme : Le programme permet de contrôler le drone avec les commandes classiques (voir : Figure 3). • L’aire du rectangle détecté est supérieur ou inférieur. Les Résultats du traitement avec Aforge.NET sont représentés visuellement (voir : Figure 2). Figure 3: Mouvement du drone • Avancer - Reculer • Monter - Descendre • Rotation à Gauche - Droite • Incliner à Gauche - Droite Figure 2: Résultat du traitement Aforge.NET Une fois calculé, ces trois paramètres sont envoyés au drone et celui-ci l’exécute directement. Les valeurs doivent être comprises entre -1 et 1; t h i s . d r o n e C l i e n t . P r o g r e s s ( FlightMode . P r o g r e s s i v e , yaw : (yawV) , gaz : ( gazV ) , p i t c h : ( pitchV ) ) ; Le correcteur ne fonctionne que sous certaines contraintes pour éviter que le drone ne s’emballe. S’il détecte un rectangle parasite ou un obstacle qui passe devant le bonnet rouge, les données transmises sont automatiquement remises à zéro. Cela évite que le drone reste sur sa dernière commande et parte dans une mauvaise direction. À noter que j’ai dû limiter la commande avancée et reculée du drone. En effet, s’il se penche trop en avant pour Il existe aussi la commande "Hover" qui permet de stabiliser le drone. II. Contrôle avec un joystick : Pour le joystick, j’utilise celui de la société Logitech "Extreme 3d pro" qui est composé de 4 axes, 12 boutons et un bouton octodirectionnel. Avec ce joystick on a un contrôle total sur le drone. En plus de pouvoir ordonner tous ces mouvements, on peut le faire décoller, atterrir et prendre, grâce à la caméra, des photos qui sont sauvegardées dans un dossier. Comme expliqué dans le correcteur proportionnel, les valeurs doivent être comprises entre -1 et 1. Pour éviter d’avoir un contrôle instable avec le joystick, je limite les valeurs envoyées entre -0.5 et 0.5, cela permet d’avoir une meilleure précision de vol. 3 AR. Drone III. • 2014-2015 • Oculus Rift : L’implémentation de l’Oculus Rift fut l’étape finale du projet; il s’agit d’un casque à virtualité augmentée. Il est composé d’un écran 7", d’un gyroscope 3 axes, d’un accéléromètre et d’un magnétomètre. Le principe consiste à envoyer deux images différentes pour chaque œil (voir : Figure 4). Une fois l’Oculus connecté à l’ordinateur, il duplique simplement l’écran du pc. Figure 4: Oculus Rift fonctionnement Comme le drone ne possède qu’une caméra, il n’est pas possible d’envoyer une image différente pour chaque œil. J’envoie donc la même image en double, mais chacune dimensionnée en coupant une partie à droite pour l’œil gauche et vice versa (voir : Figure 5). Figure 5: Image originale redimensionnée 4 Masson Nicolas Si cette manipulation n’est pas faite, l’image perçue sera floue. Avec cette méthode, le cerveau humain réassemble les deux images pour n’en faire qu’une seule. Avec l’Oculus Rift, il est possible de changer de caméra en penchant sa tête vers le bas. Dans ce cas, l’acquisition de la vidéo passe par la caméra qui se trouve sous le drone. Pour changer à nouveau son point de vue, il suffit de remettre sa tête en position initiale. AR. Drone VI. • 2014-2015 • Conclusion & Amélioration : Masson Nicolas VII. Annexes : L’ensemble du projet est stable et fonctionnel. Il m’a permis d’apprendre énormément sur le fonctionnement du drone Parrot et sur le langage de programmation C Sharp. Une partie du code qui existe dans le code source, n’est pas implémenté par manque de temps. Il s’agirait de pouvoir reconnaître deux rectangles rouges séparés de 8cm. Pour cela, il faut calculer la distance entre les deux rectangles pour connaître la distance entre ceux-ci et le drone. Le projet principal de rendre ce drone autonome autour d’une montgolfière me semble trop complexe pour plusieurs raisons : AForge.NET Vision Framework Processing for C# (20082012) http://www.aforgenet.com/ • Le drone Parrot ne peut pas décoller sans plateforme stable. Oculus VR Oculus Rift SDK Windows (2015) https://developer.oculus.com/downloads/ • Il est limité à une altitude de maximum de 100m. • Il dois être contrôlé via un PC externe. • Il peut être instable dans ses déplacements et perdre la connexion WIFI temporairement. • La caméra a une résolution et un taux de rafraichissement trop faible pour qu’il puisse détecter un objet sans mettre en danger la sécurité de la montgolfière et de la nacelle. L’une des améliorations possibles du projet pourrait consister en la conception d’une télécommande autonome imprimée en 3D, avec deux potentiomètres 2 axes et un Raspberry-Pi ou un Arduino embarqué pour contrôler le drone via WI-FI. Codeproject.com C# Avionic Instrument Controls (2008) http://www.codeproject.com/Articles/ 27411/C-Avionic-Instrument-Controls Jaycorobotics.com Simple HUD for WinForms (2015) http://jaycorobotics.com/simple-hud/ Ruslan-B The AR.Drone 2.0 controlling library for C# (2015) https://github.com/Ruslan-B/AR.Drone https://github.com/Ruslan-B/FFmpeg. AutoGen SlimDX Open source framework DirectX for .NET (2009-2011) http://slimdx.org/ The Noun Project Images & Icônes (2015) https://thenounproject.com/ 5