114 lines
No EOL
6 KiB
TeX
114 lines
No EOL
6 KiB
TeX
\documentclass[]{report}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{tikz}
|
|
\usepackage[french]{babel}
|
|
|
|
\usepackage{geometry} % Required for adjusting page dimensions
|
|
|
|
\geometry{
|
|
top=2cm, % Top margin
|
|
bottom=2cm, % Bottom margin
|
|
left=2cm, % Left margin
|
|
right=2cm, % Right margin
|
|
includehead, % Include space for a header
|
|
includefoot, % Include space for a footer
|
|
%showframe, % Uncomment to show how the type block is set on the page
|
|
}
|
|
|
|
|
|
\usetikzlibrary{shapes,arrows}
|
|
\tikzstyle{block} = [draw, fill=blue!20, rectangle,
|
|
minimum height=3em, minimum width=6em]
|
|
\tikzstyle{sum} = [draw, fill=blue!20, circle, node distance=1cm]
|
|
\tikzstyle{input} = [coordinate]
|
|
\tikzstyle{output} = [coordinate]
|
|
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
|
|
|
|
% Title Page
|
|
\title{Projet double :\\ Asservissement "rigide" de drone}
|
|
\author{Joanne \bsc{Steiner}, Hugo \bsc{Levy-{}-Falk}}
|
|
\date{2019}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
\end{abstract}
|
|
|
|
\tableofcontents
|
|
|
|
\chapter{Introduction}
|
|
|
|
Le campus de Metz de CentraleSupélec dispose de drones appelés les quadricoptères Bebop 2 (Parrot). Ces derniers sont capables de réaliser des mouvements brusques ce qui rend leur pilotage complexe. Il faut donc les manipuler avec précautions, ce qui revient à sous-exploiter leurs capacités.\\
|
|
Jusqu'à présent, le drone était asservi à l'aide d'une cible présente dans son champ visuel. Le drone suivait la cible (bleu) et se positionnait en face de cette dernière. Toutefois, le drone se déplaçait lentement et se montrait prudent. De plus, une fois face à la cible, le drone n'était pas stable. Il oscillait verticalement face à la cible. Ce résultat avait été obtenu suite à un projet d'élèves.\\
|
|
L'objectif de ce projet est donc de rendre l'asservissement du drone plus "rigide" et donc d'améliorer et de mieux exploiter l'utilisation de ce dernier.
|
|
|
|
\chapter{Déroulement du projet}
|
|
Le projet comportera les étapes suivantes :
|
|
\begin{itemize}
|
|
\item Etape 1 : Prise en main de ROS et du drone présent à la smartroom;
|
|
\item Etape 2 : Réduction du bruit causé par le calcul de la position du drone par rapport à l'image
|
|
\item Etape 3 : Choix du correcteur et tests de ce dernier
|
|
\end{itemize}
|
|
|
|
\chapter{Modélisation du problème}
|
|
|
|
Le drone diffuse un flux optique, qui permet de calculer sa position vis-à-vis d'une cible. On peut donc dans un premier temps modéliser l'asservissement de cette manière :
|
|
|
|
\begin{figure}[h!]
|
|
\centering
|
|
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
|
|
% We start by placing the blocks
|
|
\node [input, name=input] {};
|
|
\node [sum, right of=input, node distance=3cm] (sum) {};
|
|
\node [block, right of=sum] (controller) {Correcteur};
|
|
\node [block, right of=controller,
|
|
node distance=3cm] (system) {Drone};
|
|
% We draw an edge between the controller and system block to
|
|
% calculate the coordinate u. We need it to place the measurement block.
|
|
\draw [->] (controller) -- node[name=u] {$u$} (system);
|
|
\node [output, right of=system, node distance=5cm] (output) {};
|
|
\node [block, below of=u] (measurements) {Mesure};
|
|
|
|
% Once the nodes are placed, connecting them is easy.
|
|
\draw [draw,->] (input) -- node {position attendue} (sum);
|
|
\draw [->] (sum) -- node {$\epsilon$} (controller);
|
|
\draw [->] (system) -- node [name=y] {position réelle du drone}(output);
|
|
\draw [->] (y) |- (measurements);
|
|
\draw [->] (measurements) -| node[pos=0.99] {$-$}
|
|
node [near end] {mesure de la position} (sum);
|
|
\end{tikzpicture}
|
|
\caption{Modélisation simple de l'asservissement}
|
|
\end{figure}
|
|
|
|
La mesure peut se décomposer en trois éléments :
|
|
|
|
\begin{figure}[h!]
|
|
\centering
|
|
\begin{tikzpicture}[auto, node distance=3cm,>=latex']
|
|
% We start by placing the blocks
|
|
\node [input, name=input] {};
|
|
\node [block, right of=input] (cam) {Caméra};
|
|
\node [block, right of=cam] (transm) {Transmission};
|
|
\node [block, right of=transm] (trait) {Traitement};
|
|
\node [output, right of=system] (output) {};
|
|
% We draw an edge between the controller and system block to
|
|
% calculate the coordinate u. We need it to place the measurement block.
|
|
\draw [->] (input) -- (cam);
|
|
\draw [->] (cam) -- (transm);
|
|
\draw [->] (transm) -- (trait);
|
|
\draw [->] (trait) -- (output);
|
|
\end{tikzpicture}
|
|
\caption{Décomposition de la mesure}
|
|
\end{figure}
|
|
|
|
Comme le traitement ne se fait pas directement sur le drone, il existe des retards aléatoires dûs au temps de transit sur le réseau, ainsi qu'au temps de calcul sur le poste de contrôle. Ces retards limitent la fréquence des mesures à environ 5Hz.
|
|
|
|
\section{Prise en main de ROS et du drone présent à la smartroom}
|
|
Pour la prise en main de ROS, nous avons suivi les étapes du tutoriel de M. Frezza-Buet. Cela nous a permis de comprendre comment fonctionne ROS et de pouvoir l'utiliser de manière basique et simple.\\
|
|
\section{Réduction du bruit causé par le calcul de la position du drone par rapport à l'image}
|
|
Nous avons constaté qu'une forte incertitude existait lors du calcul de la position du drone par rapport au panneau. En effet, celle-ci, même si le drone était immobile, bougeait beaucoup et faisait des "sauts". Il s'agissait d'un bruit de type de Poisson, difficile, voire impossible, à traiter en automatique pour obtenir un asservissement satisfaisant. En effet, le drone, avec ce bruit, aurait été asservi à ce dernier, rendant impossible l'obtention d'une position fixe.\\
|
|
Afin de régler ce problème, l'idée proposait a été de modifier l'algorithme en place. Ce dernier calcul la position des trois carrés bleus dans l'image renvoyé par le drone par les position H, R et L. Cette détermination se faisait par gngt, qui faisait beaucoup de bruit. Nous avons donc utilisé un nouveau script Python qui profite de la labellisation afin de déterminer la position des panneaux.\\
|
|
Ce script est donné dans le fichier "\textbf{find\_ targets.py}". Il permet, à partir d'un seuil RGB défini, de trouver les parties "bleues" de l'image. Une fois ces positions trouvées, on ne garde que les trois plus grandes parties et on en calcule le centre de masse. Les résultats obtenus sont plutôt satisfaisants.
|
|
\end{document} |