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

Documents pareils