\documentclass[a4paper, 12pt]{book} \usepackage{graphicx} \usepackage[french]{babel} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{multirow} \usepackage{listings} \usepackage{float} \usepackage{url} \usepackage[french]{algorithm} \usepackage{style/myalgorithm} \usepackage{amsmath,amsfonts,amssymb} \newcommand{\fBm}{\emph{fBm}~} \newcommand{\etal}{\emph{et al.}~} \newcommand{\glAd}{\emph{GL4D}~} \newcommand{\apiopengl}{API OpenGL\textsuperscript{\textregistered}~} \newcommand{\opengl}{OpenGL\textsuperscript{\textregistered}~} \newcommand{\opengles}{OpenGL\textsuperscript{\textregistered}ES~} \newcommand{\clang}{langage \texttt{C}} \newcommand{\codesource}{\textsc{Code source}~} \floatstyle{ruled} \newfloat{programslist}{htbp}{locs} \newcommand{\listofprograms}{\listof{programslist}{Liste des codes source}} \newcounter{program}[subsection] \renewcommand{\theprogram}{\arabic{chapter}.\arabic{program}} \newenvironment{program}[1]{ \if\relax\detokenize{#1}\relax \gdef\mycaption{\relax} \else \gdef\mycaption{#1} \fi \refstepcounter{program} \addcontentsline{locs}{section}{#1} \footnotesize }{ \begin{description} \item[\codesource \theprogram]--~\mycaption \end{description} } \begin{document} \begin{titlepage} \begin{center} \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \includegraphics[height=1.5cm]{images/m1info.png} \end{tabular*} \small \rule{\textwidth}{.5pt}~\\ \large \textsc{Université Paris 8 - Vincennes à Saint-Denis}\vspace{0.5cm}\\ \textbf{Master Informatique des Systèmes Embarqués}\vspace{3.0cm}\\ \Large \textbf{Rapport projet tuteuré}\vspace{1.5cm}\\ \large \textbf{Wissam \textsc{Bokhabrine}}\vspace{0.2cm}\\ \textbf{Pierre \textsc{Toulcanon}}\vspace{1.5cm}\\ Date de soutenance : le 28/03/2017\vspace{1.75cm}\\ \end{center}\vspace{1.5cm}~\\ \begin{tabular}{ll} \hspace{-0.45cm}Tuteur -- Université~:~&~Arab Ali Cherif -- Université Paris 8\\ \end{tabular} \end{titlepage} \frontmatter \chapter*{Résumé} \markboth{\sc Résumé}{} \addcontentsline{toc}{chapter}{Résumé} Ce document présente, dans le cadre d'un projet tuteuré, des solutions concernant des techniques de vision permettant de guider un drone vers une zone d'atterrissage.\\\\ Sont abordées des solutions de vision utilisant OpenCV ainsi que des méthodes qui permettront d'améliorer la détection de la zone d'atterrissage. \tableofcontents \mainmatter \chapter*{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 à l'aide d'une zone d'atterrissage représentée par un dessin ou autre. \\\\Ce document aborde en premier lieu la technique de template matching, puis décrit une solution pour en améliorer la fiabilité et enfin explique la manière dont nous les avons mises en oeuvre pour piloter le drone automatiquement. \markboth{\sc Introduction}{} \addcontentsline{toc}{chapter}{Introduction} \chapter{Présentation des problème et solutions} Ce chapitre présente et détaille notre solution concernant la détection d'une zone d'atterrissage à l'aide des caméras embarquées sur le drone. \section{Template Matching} Après avoir détaillé dans le rapport précédent les solutions permettant le contrôle du drone à l'aide du SDK officiel de Parrot, nous nous sommes penchés sur la mise en place d'OpenCV afin de pouvoir exploiter certaines fonctionnalités de détection d'image. \\\\ Parmi les techniques populaires d'OpenCV, il existe la méthode du "Template Matching" qui consiste à essayer de retrouver une image à l'intérieur d'une autre en se basant sur les formes de celle-ci. Notre première approche a été d'effectuer quelques tests isolés sur la technique du "Template Matching". Dans des cas simples cette solution s'avère fonctionnelle mais dans des cas plus complexes il faut ajouter d'autres fonctionnalités afin de rendre la détection plus fiable et robuste. \\\\ Tout d'abord, il nécessaire de choisir une image template qui sera l'image à rechercher. Nous avons décidé d'utiliser une image template qui ne change pas de forme si nous la tournons dans un sens ou dans un autre afin de faciliter la détection. Notre choix c'est alors porté sur une image avec plusieurs cercles imbriqués. \\\\ Le problème en se limitant à cela, est qu'il faut prendre en considération que la méthode de "Template Matching" ne gère pas les transformations que l'image à rechercher aurait pu subir sur l'image de la caméra du drone. L'image template peut avoir différentes échelles selon la distance dont elle se situe par rapport à la caméra du drone, il faut donc effectuer des pré-transformations sur l'image template afin de la détecter même si elle est à petite ou grande échelle sur le retour de la caméra du drone. \section{Vérification par la couleur} Afin d'améliorer la fiabilité de la détection de notre zone d'atterrissage par le biais de la méthode du template matching, nous avons décidé d'ajouter une couche de vérification basée sur les couleurs de notre image template. \\\\ L'image qui nous sert de template comporte trois cercles imbriqués de couleurs différentes. L'idée est qu'en associant la technique du template matching avec une vérification des couleurs de notre template, on s'assure que nous détectons bien ce que nous cherchons. \\\\ La manière dont nous procédons afin d'effectuer notre vérification des couleurs est de partir du centre de notre template qui est détecté par le template matching et de vérifier qu'en partant dans une direction les trois couleurs de notre template sont bien présentes. Évidemment les retours de la caméra étant très influencé par des questions d'éclairage, il nous est nécessaires d'effectuer nos vérifications en tolérant une certaine marge d'erreur sur les couleurs détectées. Pour cela nous calculons une distance euclidienne entre ces couleurs et celles attendues. Les couleurs attendues et la tolérance étant des valeurs à calibrer. \section{Mise en oeuvre avec le drone} Après avoir décollé et s'être stabilisé, le drone effectue une rotation sur lui-même dans le but de détecter la zone d'atterrissage. Une fois que celle-ci est dans son champ de vision, il cherche à la centrer sur l'abscisse suite à quoi il se dirige vers elle jusqu'à être suffisamment proche pour amorcer la phase d'atterrissage. Nous savons que nous sommes à une bonne distance pour déclencher l'atterrissage en nous basant sur l'espace qu'occupe le template sur le retour de la caméra. \chapter{Conclusion \label{chap-conclusion}} Pour conclure, nous avons utilisé des techniques de visions nous permettant d'automatiser la détection d'une zone d'atterrissage lorsque celle-ci n'est pas cachée par des obstacles. Pour aller plus loin, on pourrait imaginer que la zone d'atterrissage ne soit pas directement visible après le décollage. Il faudrait alors effectuer une sorte de cartographie du terrain afin de pouvoir se déplacer jusqu'à la trouver. \bibliographystyle{alpha} \bibliography{memoire} \end{document}