diff --git a/Doc/2023/Rapport_PFE_YANG_Stephane.pdf b/Doc/2023/Rapport_PFE_YANG_Stephane.pdf index d557f6a133e1d0160574da01dfef70f0cace2e86..33c1ae867d6da3974548fd844efde6649110bbb2 100644 Binary files a/Doc/2023/Rapport_PFE_YANG_Stephane.pdf and b/Doc/2023/Rapport_PFE_YANG_Stephane.pdf differ diff --git a/Doc/2023/Source_latex/alt_control.png b/Doc/2023/Source_latex/alt_control.png deleted file mode 100644 index 72f4f879abb9beccfc61bbd54159ea26771c867b..0000000000000000000000000000000000000000 Binary files a/Doc/2023/Source_latex/alt_control.png and /dev/null differ diff --git a/Doc/2023/Source_latex/annexe1.tex b/Doc/2023/Source_latex/annexe1.tex index bfc4a16cad912afa1dacec4a7ae93ab16f70ffc0..0012a120e0a5d583caa71503cca33e7cf2be4380 100644 --- a/Doc/2023/Source_latex/annexe1.tex +++ b/Doc/2023/Source_latex/annexe1.tex @@ -1,9 +1,12 @@ \section{Liens vers les travaux}\label{perso} -- \href{https://drive.google.com/drive/folders/1MTbeTbgUf2R3DWKb0Chc3qIe7Ktpi9rV?usp=share_link}{Drive du stage} : \url{https://drive.google.com/drive/folders/1MTbeTbgUf2R3DWKb0Chc3qIe7Ktpi9rV?usp=share_link}\\ -- \href{https://git.cyu.fr/SteY}{Profil Gitlab} : \url{https://git.cyu.fr/SteY}\\ -- \href{https://git.u-cergy.fr/promethe2/}{Git de Promethe} : \url{https://git.u-cergy.fr/promethe2/}\\ -- \href{https://git.u-cergy.fr/gaussier/drone_flyMonitor2}{Git du projet fly\_monitor} : \url{https://git.u-cergy.fr/gaussier/drone_flyMonitor2}\\ +\begin{itemize} +\item \href{https://drive.google.com/drive/folders/1MTbeTbgUf2R3DWKb0Chc3qIe7Ktpi9rV?usp=share_link}{Drive du stage} : \url{https://drive.google.com/drive/folders/1MTbeTbgUf2R3DWKb0Chc3qIe7Ktpi9rV?usp=share_link}\\ +\item \href{https://git.cyu.fr/SteY}{Contributions personnelles} : \url{https://git.cyu.fr/SteY}\\ +\item \href{https://git.u-cergy.fr/promethe2/}{Git de Promethe} : \url{https://git.u-cergy.fr/promethe2/}\\ +\item \href{https://git.u-cergy.fr/gaussier/drone_flyMonitor2}{Git du projet fly\_monitor} : \url{https://git.u-cergy.fr/gaussier/drone_flyMonitor2}\\ +\end{itemize} + \section{Carnet de bord}\label{carnet} diff --git a/Doc/2023/Source_latex/annexe3.tex b/Doc/2023/Source_latex/annexe3.tex index 518d07d5cc72d068f7a4dcacb6e6c720cae7fa17..fb4755b28c12751ec0d88e980f42133d2d1f320b 100644 --- a/Doc/2023/Source_latex/annexe3.tex +++ b/Doc/2023/Source_latex/annexe3.tex @@ -1,4 +1,4 @@ -Cet angle n’étant pas forcément connue, on propose le protocole suivant pour le retrouver simplement (cela ne constitue pas l’objet d’étude le plus précis/important, on s’autorise donc une marge d’erreur de quelque degrés) : +Cet angle n’étant pas forcément connue, le protocole suivant est proposé pour le retrouver simplement (cela ne constitue pas l’objet d’étude le plus précis/important, une marge d’erreur de quelque degrés est autorisée) : \begin{itemize} \item Placer 2 objets devant la caméra. Il doivent être sur les deux extrémités gauche/droite de sorte à ce qu’ils soient à la limite de visibilité sur la vidéo. @@ -11,5 +11,5 @@ Cet angle n’étant pas forcément connue, on propose le protocole suivant pour \begin{figure}[h] \centering \includegraphics[width=0.8\textwidth]{images/schema/draw_angle.png} -\caption[Exemple de calcul de l'angle d'ouverture]{Example d’application, un triangle rectangle de taille 10*11 est formé, son angle beta vaut donc tan(11/10). Cet angle beta est le complémentaire de l’angle d’ouverture, ainsi on trouve 180° - beta = 132°}\label{fig:draw_angle}% +\caption[Exemple de calcul de l'angle d'ouverture]{Example d’application, un triangle rectangle de taille 10*11 est formé, son angle beta vaut donc tan(11/10). Cet angle beta est le complémentaire de l’angle d’ouverture, ainsi cela donne 180° - beta = 132°}\label{fig:draw_angle} \end{figure} diff --git a/Doc/2023/Source_latex/annexe4.tex b/Doc/2023/Source_latex/annexe4.tex index 29a97ae583b85184e2a32d30d13c6b34d1821eda..1fc78118e3f0326ae77f729f594a36ba98fbb188 100644 --- a/Doc/2023/Source_latex/annexe4.tex +++ b/Doc/2023/Source_latex/annexe4.tex @@ -1,5 +1,5 @@ \begin{figure}[h] \centering \includegraphics[width=0.8\textwidth]{images/schema/joystick_buttons.png} -\caption[Correspondance entre les boutons du joystick et leur fonction.]{Correspondance entre les boutons du joystick et leur fonction. Entre parenthèses, le nom de la variable dans le fly\_monitor.}\label{fig:joy_buttons}% +\caption[Correspondance entre les boutons du joystick et leur fonction]{Correspondance entre les boutons du joystick et leur fonction. Entre parenthèses, le nom de la variable dans le fly\_monitor.}\label{fig:joy_buttons} \end{figure} \ No newline at end of file diff --git a/Doc/2023/Source_latex/chapitre1.tex b/Doc/2023/Source_latex/chapitre1.tex index 60955419e14c08c4330d7478b5e35d2d67a4160b..c70a4f5945878bff3b28dcabedeca3856488e155 100644 --- a/Doc/2023/Source_latex/chapitre1.tex +++ b/Doc/2023/Source_latex/chapitre1.tex @@ -1,94 +1,58 @@ -%% @Author: Ines Abdeljaoued Tej -% @Date: 2018-06 -%% @Class: PFE de l'ESSAI - Universite de Carthage, Tunisie. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SECTION % -%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Présentation du laboratoire ETIS (Équipes Traitement de l'Information et Systèmes)} -\label{chap:sectionone} -\acrshort{ETIS} est un laboratoire de recherche conjoint (\acrshort{UMR8051}) dont l'histoire remonte à sa création en 1980. Il est rattaché à trois institutions académiques de renom : l'Université de Cergy-Paris (CYU), l'École Nationale Supérieure de l'Électronique et de ses Applications (\acrshort{ENSEA}), et le Centre National de la Recherche Scientifique (CNRS-INS2I). Avec un effectif total de 158 membres, il se compose de 62 chercheurs permanents, 73 doctorants et post-doctorants, ainsi que 19 chercheurs associés. Actuellement, le laboratoire est sous la direction de Lola Canamero. +\acrshort{ETIS} est un laboratoire de recherche conjoint (\acrshort{UMR8051}) dont l'histoire remonte à sa création en 1980. Il est rattaché à trois institutions académiques de renom : l'Université de Cergy-Paris (CYU), l'École Nationale Supérieure de l'Électronique et de ses Applications (\acrshort{ENSEA}), et le Centre National de la Recherche Scientifique (CNRS-INS2I). Avec un effectif total de 158 membres, il se compose de 62 chercheurs permanents, 73 doctorants et post-doctorants, ainsi que 19 chercheurs associés. Actuellement, le laboratoire est sous la direction de Lola Cañamero. \subsection{Campus} ETIS s'étend sur deux campus distincts, chacun ayant ses domaines d'expertise spécifiques : le campus ENSEA (groupes ICI, CELL et MIDI) et le campus Saint-Martin (groupes NEURO et MIDI). -%And your chapter one goes here \cite{web001,Nom2012}. \\ -% tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse \cite{Bird02nltk:the} - - -%\begin{table}\begin{center} -%\begin{tabular}{c|c} -%Entrée & Sortie \\ \hline -%A & B \\ -%C & D -%\end{tabular} -%\caption{Test Table}\end{center} -%\end{table} - \subsection{Axes de recherche} - %This is a second subsection\cite{gen1972}, \cite{schaeffer99}. ~\\ -ETIS a défini plusieurs domaines stratégiques de recherche qui guident ses activités scindés en 4 équipes: - - \begin{description}\addtolength{\itemsep}{-0.35\baselineskip}% - \item[\textbullet~\bfseries CELL] \hfill \\% - L'équipe des Systèmes Intelligents Embarqués se consacre aux communications flexibles et éco-responsables, à l'Internet des Objets (IoT), aux réseaux RF sur puce, au traitement de données à faible consommation, ainsi qu'aux systèmes embarqués intelligents et fiables. Forte de cette expertise, elle travaille sur la modélisation et la conception de systèmes embarqués reconfigurables, communicants, fiables et intelligents.~\\% - %{\textbf{Focus topics:~}\emph{Topic one, topic two, topic three, ...}}% - % - \item[\textbullet~\bfseries MIDI] \hfill \\% - L’équipe Multimedia Indexing and Data Integration se spécialise dans la gestion et l'analyse de données massives, se penchant sur l'intégration, l'exploration, l'analyse et la recherche de grandes quantités de données variées. Cela inclut des données structurées, semi-structurées, des données spatio-temporelles, du texte, des images, des vidéos et des modèles 3D. Dans l’utilisation de modèles d'apprentissage automatique, ils mettent particulièrement l'accent sur l'explicabilité des algorithmes. Leurs applications couvrent divers domaines, tels que l'analyse de contenu des médias sociaux, l'intégration et l'analyse de données sémantiques sur le web, la détection de motifs dans les données multimodales et la protection de la vie privée des données, entre autres.~\\% - % - \item[\textbullet~\bfseries NEURO] \hfill \\% +ETIS a défini plusieurs domaines stratégiques de recherche qui guident ses activités scindées en 4 équipes: + + \begin{description}\addtolength{\itemsep}{-0.35\baselineskip} + \item[\textbullet~\bfseries CELL] \hfill \\ + L'équipe des Systèmes Intelligents Embarqués se consacre aux communications flexibles et éco-responsables, à l'Internet des Objets (IoT), aux réseaux RF sur puce, au traitement de données à faible consommation, ainsi qu'aux systèmes embarqués intelligents et fiables. Forte de cette expertise, elle travaille sur la modélisation et la conception de système embarqué reconfigurable, communicant, fiable et intelligent.~\\ + \item[\textbullet~\bfseries MIDI] \hfill \\ + L’équipe Multimedia Indexing and Data Integration se spécialise dans la gestion et l'analyse de données massives, se penchant sur l'intégration, l'exploration, l'analyse et la recherche de grandes quantités de données variées. Cela inclut des données structurées, semi-structurées, des données spatio-temporelles, du texte, des images, des vidéos et des modèles 3D. Dans l’utilisation de modèles d'apprentissage automatique, ils mettent particulièrement l'accent sur l'explicabilité des algorithmes. Leurs applications couvrent divers domaines, tels que l'analyse de contenu des médias sociaux, l'intégration et l'analyse de données sémantiques sur le web, la détection de motifs dans les données multimodales et la protection de la vie privée des données, entre autres.~\\ + \item[\textbullet~\bfseries NEURO] \hfill \\ L’équipe Neurocybernétique se concentre sur le développement de robots intelligents capables d'interagir de manière autonome avec leur environnement et les êtres humains. En collaboration avec des psychologues et des neuroscientifiques, leurs recherches sont organisées autour de cinq thèmes : la modélisation du cerveau, le contrôle autonome, la robotique cognitive, les soins de santé assistés par des robots, et la bio-inspiration pour la robotique et l'intelligence artificielle. Cette approche ouvre la voie à diverses applications, notamment des robots socialement interactifs et des systèmes de navigation intelligents.~\\ - % - \item[\textbullet~\bfseries ICI] \hfill \\% + \item[\textbullet~\bfseries ICI] \hfill \\ L'équipe Information, Communication and Imaging se concentre sur la recherche en communications sans fil, en théorie de l'information, en traitement du signal et en imagerie. Ils se penchent principalement sur des domaines d'application tels que la 5G/6G, l'Internet des objets (IoT), l'apprentissage automatique pour les communications, la sécurité liée au codage et à la théorie de l'information, les réseaux et l'informatique en périphérie, ainsi que l'imagerie et la modélisation.~\\ - % \end{description} - %Also bullets such as:% - %\begin{itemize}\addtolength{\itemsep}{-0.35\baselineskip}% - %\item One% - %\item Two% - %\item Three% - %\item Four% - %\item \ldots% - %\end{itemize}% - \subsection{Publications} Le laboratoire a contribué de manière significative à la littérature scientifique, avec un total de 154 publications à son actif. Ces publications comprennent 51 articles publiés dans des revues scientifiques, 61 articles présentés lors de conférences, et 42 livres. \subsection{Résumé} -ETIS est un laboratoire de recherche interdisciplinaire qui couvre un large éventail de domaines, allant des communications sans fil à la robotique sociale, en passant par les sciences des données. Il joue un rôle clé dans le développement de technologies innovantes, contribuant à l'avancement de la recherche et de la technologie. Un exemple récent de cette contribution est la participation active de l’équipe Neurocybernétique à un événement majeur à l'Assemblée Nationale. Cet événement a permis de mettre en lumière les recherches en robotique et la bio-inspiration, en abordant les défis sociétaux et les Objectifs de Développement Durable (ODD).\ref{fig:ETIS_AN} +ETIS est un laboratoire de recherches interdisciplinaires qui couvre un large éventail de domaines, allant des communications sans fil à la robotique sociale, en passant par les sciences des données. Il joue un rôle-clé dans le développement de technologies innovantes, contribuant à l'avancement de la recherche et de la technologie. Un exemple récent de cette contribution est la participation active de l’équipe Neurocybernétique à un événement majeur à l'Assemblée nationale. Cet événement a permis de mettre en lumière les recherches en robotique et la bio-inspiration, en abordant les défis sociétaux et les Objectifs de Développement Durable (ODD).\ref{fig:ETIS_AN} -\begin{figure}% -\center% +\begin{figure} +\center \includegraphics[width=0.7\textwidth]{images/ETIS_AN.jpg} -\caption[ETIS à l’Assemblée nationale]{Un des 4 ateliers présenté à l'Assemblée Nationale mettant en avant Ferdinand, un robot qui apprend la fonction des mots en interaction avec les -humains.}\label{fig:ETIS_AN}% +\caption[ETIS à l’Assemblée nationale]{Un des 4 ateliers présenté à l'Assemblée nationale mettant en avant Ferdinand, un robot qui apprend la fonction des mots en interaction avec les +humains.}\label{fig:ETIS_AN} \end{figure} \section{Environnement de travail} Pendant mon stage au sein de l'équipe Neurocybernétique sur le campus Saint-Martin, je travaille sous la supervision de mon tuteur, Philippe Gaussier. Une partie essentielle de mon stage consiste à développer mon autonomie pour comprendre le système et les logiciels que nous utilisons. Bien que non directement impliqués dans mon projet, des collègues sont prêts à offrir leur aide pour expliquer des éléments tels que le simulateur de réseau de neurones, qui peut parfois être difficile à appréhender. -\begin{figure}% -\center% +\begin{figure} +\center \includegraphics[width=0.7\textwidth]{images/hierarchie.png} -\caption[Schéma de la hiérarchie]{Schéma sur la structure hiérarchique de l'équipe}\label{fig:hierarchie}% +\caption[Schéma de la hiérarchie au sein du laboratoire]{Schéma sur la structure hiérarchique de l'équipe}\label{fig:hierarchie} \end{figure} La majeure partie du travail s'effectue sur un ordinateur portable sous Linux Ubuntu 22.04, qui sert également de station au sol pour la gestion du réseau de neurones et des communications avec le drone, la caméra et le joystick. %image setup -\begin{figure}% -\center% +\begin{figure} +\center \includegraphics[width=0.7\textwidth]{images/setup.jpg} -\caption[Aperçu du système complet]{Aperçu du bureau avec le système au complet}\label{fig:setup}% +\caption[Aperçu du système complet]{Aperçu du bureau avec le système au complet}\label{fig:setup} \end{figure} Au laboratoire, divers matériels et composants de rechange sont disponibles pour la maintenance et la mise à jour du drone.\ref{fig:matos} @@ -103,7 +67,7 @@ Au laboratoire, divers matériels et composants de rechange sont disponibles pou \begin{minipage}{0.45\textwidth} \includegraphics[width=\textwidth]{images/box.jpg} \end{minipage} - \caption[Aperçu du matériel à disposition]{Aperçu du matériel à disposition. A gauche, le fer à souder, à droite, les batteries et les composants de rechanges}\label{fig:matos} + \caption[Aperçu du matériel à disposition]{Aperçu du matériel à disposition. À gauche, le fer à souder, à droite, les batteries et les composants de rechange}\label{fig:matos} \end{figure} La plupart des tests de vol sont réalisés sur une zone ouverte du campus. Pour prévenir tout dommage en cas de perte de contrôle, un fil résistant est attaché à l'une des pattes du drone. Des protections sont aussi installées sur les moteurs pour protéger les hélices en cas de chute.\ref{fig:protection} @@ -123,24 +87,18 @@ La plupart des tests de vol sont réalisés sur une zone ouverte du campus. Pour Des tests en intérieur ont également été effectués lorsque les conditions météorologiques nous sont défavorables (pluie, bourrasques de vent). Pour ajouter une couche de sécurité, une plateforme mobile a été conçue pour restreindre l'ascension du drone, autorisant uniquement des déplacements latéraux. -\begin{figure}% -\center% +\begin{figure} +\center \includegraphics[width=0.35\textwidth]{images/plateforme.png} -\caption{Aperçu de la plateforme en bois}\label{fig:plateforme}% +\caption[Aperçu de la plateforme en bois]{Aperçu de la plateforme en bois}\label{fig:plateforme} \end{figure} \section{Cadre de travail} Pendant la durée du stage, j'utilise activement GitLab pour effectuer des mises à jour régulières. Il y a deux dépôts distincts : l'un est dédié au programme "fly\_monitor" et l'autre est destiné à Promethe, le simulateur de réseaux de neurones. En parallèle, je tiens un carnet de bord où je consigne chaque semaine les tâches réalisées. Cela me permet de garder une trace écrite de la progression et de mieux planifier la suite du travail (le carnet de bord se trouve en annexe pour plus de détails \ref{carnet}). De plus, j'utilise également Google Drive pour stocker des fichiers de données importants liés au stage, notamment des captures d'écran, des résultats et des prises de notes \ref{perso}. -\begin{figure}% -\center% +\begin{figure} +\center \includegraphics[width=0.7\textwidth]{images/gantt.pdf} -\caption[Diagramme de Gantt]{Diagramme de Gantt établi début octobre 2023. Le début est consacré à la remise en fonctionnement du système (communications et contrôle du drone) côté programmation, puis côté matériel. Les algorithmes utilisant réellement les réseaux de neurones ont débuté sur les 2 derniers mois.}\label{fig:gantt}% +\caption[Diagramme de Gantt]{Diagramme de Gantt établi début octobre 2023. Le début est consacré à la remise en fonctionnement du système (communications et contrôle du drone) côté programmation, puis côté matériel. Les algorithmes utilisant réellement les réseaux de neurones ont débuté sur les 2 derniers mois.}\label{fig:gantt} \end{figure} - -%\begin{equation} \label{eq:1} -%\sum_{i=0}^{\infty} a_i x^i -%\end{equation} - -%The equation \ref{eq:1} is a typical power series. \ No newline at end of file diff --git a/Doc/2023/Source_latex/chapitre2.tex b/Doc/2023/Source_latex/chapitre2.tex index 6ae70b9ad1fc12725239b0de9278b9fe10b42837..96d485ef58cf1e36de1203764786ebd008582c74 100644 --- a/Doc/2023/Source_latex/chapitre2.tex +++ b/Doc/2023/Source_latex/chapitre2.tex @@ -1,17 +1,13 @@ -%% @Author: Ines Abdeljaoued Tej -% @Date: 2018-06 -%% @Class: Graduation Project, ESSAI - Carthage University, Tunisia. - \section{Hardware} -Le système proposé est constitué de composants expressément compatibles avec des codes open source (MAVSDK, PX4, Pixhawk…). L’avantage est de pouvoir profiter de la connaissance des mécanismes d’un système déjà fonctionnel (comment contrôler le drone avec les bibliothèques proposées) afin de pouvoir reproduire à notre tour un système adapté à nos besoins. C'est pourquoi, le choix a été porté sur un autopilote Pixhawk couplé au firmware opensource PX4. Les composants sont les suivants : \\ +Le système proposé est constitué de composants (\acrshort{hardware}) expressément compatibles avec des codes open source (MAVSDK, PX4, Pixhawk…). L’avantage est de pouvoir profiter de la connaissance des mécanismes d’un système déjà fonctionnel (comment contrôler le drone avec les bibliothèques proposées) afin de pouvoir reproduire à notre tour un système adapté à nos besoins. C'est pourquoi le choix s'est porté sur un autopilote Pixhawk couplé au firmware open source PX4. Les composants sont les suivants :\\ \begin{itemize} -\item \textbf{\acrshort{Autopilote} Pixhawk 4} : Il s’agit du cœur du drone. Il est capable de générer des signaux de commandes aux ESC (voir plus bas) pour contrôler les moteurs. Il communique à travers le protocole MAVLink (détaillé plus tard dans le rapport). Doté de plusieurs capteurs, il assure la stabilité du vol jusqu'à une certaine mesure. Un autre drone employé est équipé d'une Pixhawk 4 mini mais le fonctionnement reste identique à notre échelle.\ref{fig:pixhawk4} Les capteurs intégrés sont les suivants : +\item \textbf{\acrshort{Autopilote} Pixhawk 4} : Il s'agit du cœur du drone. Il est capable de générer des signaux de commandes aux ESC (voir plus bas) pour contrôler les moteurs. Il communique à travers le protocole MAVLink (détaillé plus tard dans le rapport). Doté de plusieurs capteurs, il assure la stabilité du vol jusqu'à une certaine mesure. Un autre drone employé est équipé d'une Pixhawk 4 mini, mais le fonctionnement reste identique à notre échelle.\ref{fig:pixhawk4} Les capteurs intégrés sont les suivants : \begin{figure}[ht] \centering \includegraphics[width=0.15\textwidth]{images/drone/pixhawk4.jpg} -\caption[Autopilote Pixhawk 4]{Autopilote Pixhawk 4}\label{fig:pixhawk4}% +\caption[Autopilote Pixhawk 4]{Autopilote Pixhawk 4}\label{fig:pixhawk4} \end{figure} \begin{itemize} @@ -19,104 +15,104 @@ Le système proposé est constitué de composants expressément compatibles avec \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/imu.jpg} -\caption[Exemple d’IMU]{Exemple d’IMU (modèle ICM-20689)}\label{fig:imu}% +\caption[Exemple d’IMU]{Exemple d’IMU (modèle ICM-20689)}\label{fig:imu} \end{figure} -\item \textbf{Magnétomètre} : Il s’agit d’une boussole électronique indiquant la direction du champ magnétique terrestre. Fournissant une orientation absolue par rapport au gyroscopes (qui, eux, ne font que mesurer la variation), il est associé à l’IMU dans le maintien de la stabilité par l’autopilote.\ref{fig:magnetometer} +\item \textbf{Magnétomètre} : Il s’agit d’une boussole électronique indiquant la direction du champ magnétique terrestre. Fournissant une orientation absolue par rapport aux gyroscopes (qui, eux, ne font que mesurer la variation), il est associé à l’IMU dans le maintien de la stabilité par l’autopilote.\ref{fig:magnetometer} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/magnetometer.jpg} -\caption[Exemple de magnétomètre]{Exemple de magnétomètre (modèle IST8310)}\label{fig:magnetometer}% +\caption[Exemple de magnétomètre]{Exemple de magnétomètre (modèle IST8310)}\label{fig:magnetometer} \end{figure} -\item \textbf{Baromètre} : Il s’agit d’un capteur mesurant la pression atmosphérique à une altitude donnée. En utilisant les données de pression atmosphérique recueillies par le baromètre, on peut calculer l'altitude du drone par rapport à un point de référence fixe note bas de page : due aux variations atmosphérique dans le temps, le point de référence n’est pas réellement fixe.cependant pour nos expérience de durée inférieur à 15 min., on peut supposer que le point de référence est fixe (voir partie asservissement de l’altitude).\ref{fig:barometer} +\item \textbf{Baromètre} : Il s’agit d’un capteur mesurant la pression atmosphérique à une altitude donnée. En utilisant les données de pression atmosphérique recueillies par le baromètre, nous pouvons calculer l'altitude du drone par rapport à un point de référence fixe note bas de page : due aux variations atmosphériques dans le temps, le point de référence n’est pas réellement fixe. Cependant pour nos expériences de durée inférieure à 15 min., nous pouvons supposer que le point de référence est fixe (voir partie asservissement de l’altitude).\ref{fig:barometer} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/barometer.PNG} -\caption[Exemple de baromètre]{Exemple de baromètre (modèle MS5611)}\label{fig:barometer}% +\caption[Exemple de baromètre]{Exemple de baromètre (modèle MS5611)}\label{fig:barometer} \end{figure} \end{itemize} -\item \textbf{Module GPS (Global Positioning System)} : Il s’agit d’un système de navigation par satellite qui permet de déterminer avec précision la position géographique du drone, il permet au drone de connaître sa position en termes de latitude, longitude et altitude.\ref{fig:gps} +\item \textbf{Module GPS (Global Positioning System)} : Il s’agit d’un système de navigation par satellite qui permet de déterminer avec précision la position géographique du drone, il permet au drone de déterminer sa position en termes de latitude, longitude et altitude.\ref{fig:gps} \begin{figure}[ht] \centering \includegraphics[width=0.1\textwidth]{images/drone/gps.png} -\caption[Le module GPS]{Le module GPS pour Pixhawk 4}\label{fig:gps}% +\caption[Le module GPS]{Le module GPS pour Pixhawk 4}\label{fig:gps} \end{figure} -\item \textbf{Module de télémétrie} : Il s’agit d’un système de communication sans fil. Ce système permet d'établir une liaison de données bidirectionnelle entre la carte de contrôle de vol (comme la Pixhawk 4) et une station terrestre (comme un ordinateur portable) à des fins de contrôle à distance, de surveillance et de transfert de données.\ref{fig:telemetry} +\item \textbf{Module de télémétrie} : Il s’agit d’un système de communication sans fil. Ce système permet d'établir une liaison de données bidirectionnelles entre la carte de contrôle de vol (comme la Pixhawk 4) et une station terrestre (comme un ordinateur portable) à des fins de contrôle à distance, de surveillance et de transfert de données.\ref{fig:telemetry} \begin{figure}[ht] \centering \includegraphics[width=0.4\textwidth]{images/drone/telemetry.png} -\caption[Les modules de télémétrie]{Les modules de télémétrie 433 MHz Holybro}\label{fig:telemetry}% +\caption[Les modules de télémétrie]{Les modules de télémétrie 433 MHz Holybro}\label{fig:telemetry} \end{figure} \item \textbf{Caméra} : Essentielle pour le réseau de neurones, la caméra est directement embarquée sur l’avant du drone. Il s’agit plus spécifiquement d’une caméra FPV (First Person View) conçue spécialement pour les vols de drone compétitifs, elle est donc adaptée pour les applications temps réel nécessitant une faible latence. Elle est capable de produire 30 images par seconde.\ref{fig:camera} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/camera.png} -\caption[La caméra Foxeer]{Caméra Foxeer pour drone}\label{fig:camera}% +\caption[La caméra Foxeer]{Caméra Foxeer pour drone}\label{fig:camera} \end{figure} \item \textbf{Émetteur vidéo} : Il transmet le flux de vidéo de la caméra via un autre canal que le module de télémétrie.\ref{fig:transmitter} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/transmitter.png} -\caption[L'émetteur vidéo]{Emetteur vidéo 5.8GHz Mi600s}\label{fig:transmitter}% +\caption[L'émetteur vidéo]{Emetteur vidéo 5.8GHz Mi600s}\label{fig:transmitter} \end{figure} \item \textbf{Récepteur vidéo} : Il reçoit le flux vidéo émis par l’émetteur en choisissant le bon canal à lire. Ce flux peut ensuite être affiché et traité par l’ordinateur\ref{fig:receiver} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/receiver.png} -\caption[Le récepteur vidéo]{Récepteur vidéo 8.5GHz Furious FPV DOCK-KING}\label{fig:receiver}% +\caption[Le récepteur vidéo]{Récepteur vidéo 8.5GHz Furious FPV DOCK-KING}\label{fig:receiver} \end{figure} \item \textbf{\acrshort{ESC} (Electronic Speed Controller)} : Il s’agit d’un composant électronique qui permet le contrôle de la vitesse et de la direction des moteurs électriques à partir de signaux de commande PWM (modulation de largeur d’impulsion). Il intègre des mécanismes de protection, tels que la surveillance de la tension de la batterie, afin de prévenir les dommages au moteur et à la batterie.\ref{fig:esc} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/esc.png} -\caption[ESC Air Gear]{ESC Air Gear}\label{fig:esc}% +\caption[ESC Air Gear]{ESC Air Gear}\label{fig:esc} \end{figure} -\item \textbf{Moteur brushless} : Offrant plus d'avantages en termes d'efficacité, de durabilité et de performances par rapport aux moteurs classiques à balais, le moteur brushless est adapté aux applications nécessitant un contrôle précis de la vitesse, comme les drones. En raison de sa complexité, il nécessite un contrôleur électronique (ESC) pour fonctionner correctement.\ref{fig:motor} +\item \textbf{Moteur brushless} : Offrant plus d'avantages en matière d'efficacité, de durabilité et de performances par rapport aux moteurs classiques à balais, le moteur brushless est adapté aux applications nécessitant un contrôle précis de la vitesse, comme les drones. En raison de sa complexité, il nécessite un contrôleur électronique (ESC) pour fonctionner correctement.\ref{fig:motor} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/motor.png} -\caption[Le moteur brushless]{Moteur brushless Air Gear équipé d’une hélice}\label{fig:motor}% +\caption[Le moteur brushless]{Moteur brushless Air Gear équipé d’une hélice}\label{fig:motor} \end{figure} \item \textbf{Batteries LiPo (Lithium-Polymère)} : Il s’agit de la principale source d’alimentation de notre système. Elle fournit une tension de sortie relativement stable pendant une grande partie de sa décharge, ce qui permet de maintenir une performance constante pendant le vol ou la conduite. En contrepartie, elle nécessite une manipulation et un stockage appropriés pour éviter les risques de surcharge, de décharge excessive (il faut absolument utiliser un chargeur approprié).\ref{fig:battery} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/battery.png} -\caption[Une batterie LiPo]{Batterie LiPo 11.1V 5000mAh}\label{fig:battery}% +\caption[Une batterie LiPo]{Batterie LiPo 11.1V 5000mAh}\label{fig:battery} \end{figure} -\item \textbf{Power module (module d'alimentation)} : Il s’agit d’un composant utilisé dans les systèmes de contrôle de vol, en particulier dans le contexte des drones. Son rôle principal est de surveiller et de fournir des informations essentielles concernant l'alimentation électrique du système. Il sert essentiellement de régulateur de tension pour l'autopilote et autres composant ne pouvant pas supporter une connexion directe avec la batterie.\ref{fig:power} +\item \textbf{Power module (module d'alimentation)} : Il s’agit d’un composant utilisé dans les systèmes de contrôle de vol, en particulier dans le contexte des drones. Son rôle principal est de surveiller et de fournir des informations essentielles concernant l'alimentation électrique du système. Il sert essentiellement de régulateur de tension pour l'autopilote et autres composants ne pouvant pas supporter une connexion directe avec la batterie.\ref{fig:power} \begin{figure}[ht] \centering \includegraphics[width=0.2\textwidth]{images/drone/power.jpg} -\caption[Le module d’alimentation]{Module d’alimentation PM06D}\label{fig:power}% +\caption[Le module d’alimentation]{Module d’alimentation PM06D}\label{fig:power} \end{figure} \item \textbf{Joystick} : Il nous permet de disposer d'une interface intuitive pour le contrôle du drone. Il sert également à transmettre l'intention de l'utilisateur au réseau de neurones, qui l'interprète comme des données en entrée.\ref{fig:joystick} \begin{figure}[ht] \centering \includegraphics[width=0.15\textwidth]{images/drone/joystick.png} -\caption[Le joystick]{Joystick Extreme 3D}\label{fig:joystick}% +\caption[Le joystick]{Joystick Extreme 3D}\label{fig:joystick} \end{figure} \end{itemize} \subsection{Composant supplémentaire} -Un composant supplémentaire était également employé durant le stage pour la mesure de l'altitude. Il s'agit du couple caméra flot optique / capteur de distance ultrason. Le capteur ultrason était utilisé dans nos algorithmes afin de mesurer l'altitude qui était plus précise que le baromètre jusqu'à une limite de 3 mètres, tandis que la caméra servait à l'autopilote comme un paramètre supplémentaire aidant à la stabilisation du drone (en plus de l'IMU). Cependant il a été abandonné au profit du baromètre car sa capacité à jauger l'altitude est perturbée en cas de sol humide (notamment au dessus de l'herbes humides qui absorbent les ultrasons). Dans le future (malheureusement, au delà de ce stage), il pourrait être réemployé de manière à fonctionner en tandem avec les autres mesures d'altitude de manière intelligente.\ref{fig:px4flow} +Un composant supplémentaire était également employé durant le stage pour la mesure de l'altitude. Il s'agit du couple caméra flot optique / capteur de distance ultrason. Le capteur ultrason était utilisé dans nos algorithmes afin de mesurer l'altitude qui était plus précise que le baromètre jusqu'à une limite de 3 mètres, tandis que la caméra servait à l'autopilote comme un paramètre supplémentaire aidant à la stabilisation du drone (en plus de l'IMU). Cependant il a été abandonné au profit du baromètre car sa capacité à jauger l'altitude est perturbée en cas de sol humide (notamment au-dessus de l'herbe humide qui absorbe les ultrasons). Dans le futur (malheureusement, au-delà de ce stage), il pourrait être réemployé de manière à fonctionner en tandem avec les autres mesures d'altitude de manière intelligente.\ref{fig:px4flow} \begin{figure}[ht] \centering \includegraphics[width=0.10\textwidth]{images/drone/px4flow.jpg} -\caption[Le couple caméra flot optique / capteur de distance ultrason]{couple caméra flot optique / capteur de distance ultrason PX4Flow}\label{fig:px4flow}% +\caption[Le couple caméra flot optique / capteur de distance ultrason]{couple caméra flot optique / capteur de distance ultrason PX4Flow}\label{fig:px4flow} \end{figure} \subsection{Résumé} @@ -125,7 +121,7 @@ Voici un schéma synoptique du système où se base l'essentiel du stage : \ref{ \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/schema/synoptic.png} -\caption[Schéma simplifié du système]{Schéma simplifié du système. Le drone embarquant une caméra envoie le flux de vidéo à travers un émetteur, le PC reçoit grâce à un récepteur l’image capturée et la traite en entrée du réseau de neurone. Le drone est également équipé d’un autopilote qui envoie toute les informations de capteurs au réseau de neurone via télémétrie, le chemin inverse est aussi réalisé pour l’envoi de la commande motrice (sortie du réseau de neurones) à l'autopilote. Le PC reçoit des informations du joystick pour un contrôle direct du drone.}\label{fig:synoptic}% +\caption[Schéma simplifié du système]{Schéma simplifié du système. Le drone embarquant une caméra envoie le flux de vidéo à travers un émetteur, le PC reçoit grâce à un récepteur l’image capturée et la traite en entrée du réseau de neurones. Le drone est également équipé d’un autopilote qui envoie toutes les informations de capteurs au réseau de neurones via télémétrie, le chemin inverse est aussi réalisé pour l’envoi de la commande motrice (sortie du réseau de neurones) à l'autopilote. Le PC reçoit des informations du joystick pour un contrôle direct du drone.}\label{fig:synoptic} \end{figure} \section{Software} @@ -135,13 +131,15 @@ L'utilisation de cartes de contrôle de vol et de firmwares avancés joue un rô \subsection{Carte Pixhawk} La carte Pixhawk est une carte de contrôle de vol largement utilisée dans l'industrie des drones. Elle est conçue pour offrir une plateforme de contrôle de vol flexible et puissante. + La carte Pixhawk est fabriquée par Holybro en collaboration avec l'équipe PX4. Elle est devenue une norme dans l'industrie grâce à sa robustesse, sa fiabilité et ses fonctionnalités avancées. + La carte est dotée d'un ensemble complet de capteurs, notamment un GPS, une boussole, un baromètre, un accéléromètre, un gyroscope, etc. Elle est également capable de générer des commandes PWM pour les ESC. \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/schema/roll_pitch_yaw.png} -\caption[Orientations des véhicules]{Il est important de bien placer l'autopilote dans le bon sens de sorte à ne pas confondre les axes lors de la commande du drone. La flèche indique l'avant.}\label{fig:roll_pitch_yaw}% +\caption[Orientations des véhicules]{Il est important de bien placer l'autopilote dans le bon sens de sorte à ne pas confondre les axes lors de la commande du drone. La flèche indique l'avant.}\label{fig:roll_pitch_yaw} \end{figure} \subsection{Firmware PX4} @@ -158,19 +156,19 @@ Il offre une modularité exceptionnelle, permettant aux utilisateurs de personna QGroundControl est une interface intuitive pour le contrôle de vol. Elle joue un rôle essentiel dans la gestion, la configuration et la surveillance des drones équipés de la carte Pixhawk et du firmware PX4. Cette interface utilisateur intuitive permet aux opérateurs de drones de communiquer avec leur système UAV de manière transparente. Les fonctionnalités clés de QGroundControl comprennent la planification de mission, la surveillance en temps réel de l'état de l'aéronef, la télémétrie, la configuration du comportement du drone et bien plus encore. -Dans notre cas, \acrshort{QGC} est essentiellement utilisé pour la calibration des capteurs (accéléromètres, gyroscopes) de l'autopilote, ainsi que pour mettre à jour le firmware. Cela permet également d'observer ce qu'est le fonctionnement habituel (en tant de consommateur) du drone afin d'établir une référence par rapport à notre code (voir \ref{chap:communication}). +Dans notre cas, \acrshort{QGC} est essentiellement utilisé pour la calibration des capteurs (accéléromètres, gyroscopes) de l'autopilote, ainsi que pour mettre à jour le firmware. Cela permet également d'observer ce qu'est le fonctionnement habituel (en tant que consommateurs) du drone afin d'établir une référence par rapport à notre code (voir \ref{chap:communication}). \subsection{MAVSDK} \acrshort{MAVSDK} (MAVLink Software Development Kit) est un ensemble de bibliothèques logicielles open source conçu pour faciliter le développement d'applications avancées de contrôle de drones basées sur le protocole MAVLink, qui est utilisé par Pixhawk et le firmware PX4. MAVSDK permet aux développeurs de créer des applications autonomes et des outils de contrôle de drones personnalisés en utilisant une variété de langages de programmation, dont C++, Python et d'autres. Les fonctionnalités de MAVSDK incluent un accès simple aux données de télémétrie en temps réel, la planification de mission, la configuration des paramètres du drone, le contrôle de vol manuel, la gestion des waypoints et bien d'autres. -Cela constitue notre principale référence pour la programmation de notre drone. Avec les structures du code déjà bien établis, ainsi que la bonne procédure à suivre pour la commande du drone, notre programme bas niveau "fly\_monito" s'inspire de MAVSDK et personnalise le comportement du drone pour notre application. +Cela constitue notre principale référence pour la programmation de notre drone. Avec les structures du code déjà bien établis, ainsi que la bonne procédure à suivre pour la commande du drone, notre programme bas niveau "fly\_monitor" s'inspire de MAVSDK et personnalise le comportement du drone pour notre application. \subsection{MAVLink} Protocole très populaire dans la communication avec drone, \acrshort{MAVLink} occupe le cœur du programme fly\_monitor. -La documentation de \href{https://mavlink.io/en/messages/common.html}{MAVLink} nous donne tout le jeu de messages MAVLink les plus communs, elle contient trois majeures parties : les enum qui nous permet de rendre le code plus explicite et servent de documentation, les commandes (précédé d'un préfixe : MAV\_CMD\_ dans le code C++) qui concernent principalement les messages envoyés par la station au sol vers l’autopilote afin de contrôler le drone, les messages (précédé d’un préfixe : MAVLINK\_MSG\_ID\_ dans le code C++) qui concernent toutes les informations partagées par l’autopilote. +La documentation de \href{https://mavlink.io/en/messages/common.html}{MAVLink} nous donne tout le jeu de messages MAVLink les plus communs, elle contient trois majeures parties : les enum qui nous permettent de rendre le code plus explicite et servent de documentation, les commandes (précédées d'un préfixe : MAV\_CMD\_ dans le code C++) qui concernent principalement les messages envoyés par la station au sol vers l’autopilote afin de contrôler le drone, les messages (précédés d’un préfixe : MAVLINK\_MSG\_ID\_ dans le code C++) qui concernent toutes les informations partagées par l’autopilote. Note : les commandes ainsi que les messages sont associés à un identifiant mais sont séparés dans la numérotation, ils peuvent donc avoir les mêmes identifiants (pour aider à différencier, la documentation ajoute un croisillon pour les MSG\_ID). -Une bibliothèque en C++ est fournie et permet essentiellement le décodage et l’encodage d’un message +Une bibliothèque en C++ est fournie et permet essentiellement le décodage et l’encodage d’un message. diff --git a/Doc/2023/Source_latex/chapitre3.tex b/Doc/2023/Source_latex/chapitre3.tex index 6780ae5266283c94e8e87d00d3dbbd3b1a31aac8..4ec454821a3dcfa3dfbdb7de35820a9adeea902b 100644 --- a/Doc/2023/Source_latex/chapitre3.tex +++ b/Doc/2023/Source_latex/chapitre3.tex @@ -1,7 +1,3 @@ -%% @Author: Ines Abdeljaoued Tej -% @Date: 2018-06 -%% @Class: Graduation Project, ESSAI - Carthage University, Tunisia. - \section{Cahier des charges} Bien que le projet \acrshort{Fly Monitor} soit bâti sur système fonctionnel hérité des travaux de mes prédécesseurs, un cahier des charges doit être établi. Il s'agit d'un projet en constante évolution et les composant qui semblaient convenables au départ peuvent nécessiter d'un remplacement. Les exigences sont les suivantes : @@ -10,22 +6,22 @@ Bien que le projet \acrshort{Fly Monitor} soit bâti sur système fonctionnel h \item Drone quadri-coptère : 4 moteurs brushless contrôlés par un autopilote. \item Gestion parallèle : Station au sol (ordinateur portable) capable de gérer les communications (programme bas niveau fly\_monitor) et la simulation du réseau de neurones (script haut niveau sur Promethe). \item Fréquence de traitement (comprenant toute la chaîne, de la réception des informations à l'envoi des commandes motrices) minimale : 7 Hz. Le meilleur temps de réaction d'un humain tourne autour des 150 ms, une fréquence de 7Hz laisse donc assez de temps pour obtenir une performance proche d'un humain. - \item Écart-type des fréquences de traitement (comprenant tous les fils d'exécutions du programme bas-niveau au script) : 1 ms. Sous un noyau Linux temps réel, les performances ne sont jamais meilleures que de l'ordre de 1 ms. Par exemple, si une période de 100 ms est maintenue, on ne veut pas qu'elle puisse dépasser 101 ms. - \item Perte des messages : < 1\%. Nous cherchons à avoir une communication avec quasiment aucune perte, car dans le cas contraire, cela pénalisera la navigation qui ne saura pas bien fonctionner puisqu'elle ne recevra plus d'informations. - \item Rayon minimal d'opération : 100 m. Cela peut évoluer dans le future mais dans le cadre de ce stage, les expériences ne sont pas effectuées sur de longues distances (bien que les modules de télémétrie permettent d'aller jusqu'à 300 m, voire plus\footnote{La portée peut être étendue jusqu'aux kilomètres grâce à un patch d'antenne au sol \url{https://docs.px4.io/main/en/telemetry/holybro_sik_radio.html}}). + \item Écart-type minimal des fréquences de traitement (comprenant tous les fils d'exécutions du programme bas-niveau aux scripts incluant le traitement des informations de capteurs et d'images) : 1 ms. Sous un noyau Linux temps réel, les performances ne sont jamais meilleures que de l'ordre de 1 ms. Par exemple, si une période de 100 ms est maintenue, nous ne voulons pas qu'elle puisse dépasser 101 ms. + \item Perte des messages : < 1\%. Nous cherchons à avoir une communication avec quasiment aucune perte, car dans le cas contraire, cela pénalisera la navigation qui ne saura pas bien fonctionner puisque le script de navigation ne recevra plus d'informations. + \item Rayon minimal d'opération : 100 m. Cela peut évoluer dans le futur mais dans le cadre de ce stage, les expériences ne sont pas effectuées sur de longues distances (bien que les modules de télémétrie permettent d'aller jusqu'à 300 m, voire plus\footnote{La portée peut être étendue jusqu'aux kilomètres grâce à un patch d'antenne au sol \url{https://docs.px4.io/main/en/telemetry/holybro_sik_radio.html}}). \item Autonomie : 15 min. Les drones devant maintenir un vol stable, consomment beaucoup d'énergies. Il s'agit alors de trouver un compromis entre la capacité et le poids de la batterie. \end{itemize} -Ce projet étant plutôt basé sur la faisabilité de l'implémentation d'un réseau de neurones sur un drone, il y a pas de contrainte de vitesse (il n'en reste pas moins qu'il est assez rapide). +Ce projet étant plutôt basé sur la faisabilité de l'implémentation d'un réseau de neurones sur un drone, il n'y a pas de contrainte de vitesse (il n'en reste pas moins que le drone est capable de se mouvoir à une assez grande vitesse). \section{Mémoires partagées} -Pour le fonctionnement du drone, plusieurs programmes en parallèle sont lancés. Ces programmes ont parfois le besoin de s'échanger des informations, c'est là qu'intervient l'idée des mémoires partagées. Une bibliothèque en C/C++ a été développé au sein de ETIS par Arnaud Blanchard, elle permet d'envoyer le contenu d'une variable ou d'un vecteur vers zone mémoire du PC. A partir de cette zone, il est également possible de lire les valeurs stockés et de les réutiliser dans une autre programme. +Pour le fonctionnement du drone, plusieurs programmes en parallèle sont lancés. Ces programmes ont parfois le besoin de s'échanger des informations, c'est là qu'intervient l'idée des mémoires partagées. Il s'agit d'une bibliothèque en C/C++ qui a été développée au sein de ETIS par Arnaud Blanchard, elle permet d'envoyer le contenu d'une variable ou d'un vecteur vers zone mémoire du PC. À partir de cette zone, il est également possible de lire les valeurs stockées et de les réutiliser dans un autre programme. \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/schema/memoire.png} -\caption[Schéma du système de communication]{Schéma du système de communication entre les commandes MAVLink et la memoire partagee pour le contrôle du drone}\label{fig:memoire}% +\caption[Schéma du système de communication]{Schéma du système de communication entre les commandes MAVLink et la mémoire partagée pour le contrôle du drone}\label{fig:memoire} \end{figure} \section{Programme fly\_monitor} @@ -37,19 +33,19 @@ Le programme \acrshort{fly\string_monitor} est le programme principal permettant Le programme fonctionne en temps réel avec plusieurs \acrshort{threads} lancés en parallèle : \begin{itemize} \item Le thread principal : celui qui lance les autres threads et sert d'interface entre lui et les commandes de l'utilisateur. - \item Le thread d'écriture : celui qui envoie en à un certaine fréquence définie les messages de commande encodés à l'autopilote. + \item Le thread d'écriture : celui qui envoie à une certaine fréquence définie les messages de commande encodés à l'autopilote. \item Le thread de lecture : celui qui écoute tout ce que l'autopilote envoie à la station au sol et décode les messages MAVLink reçue. \end{itemize} \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/schema/fly_monitor.png} -\caption[Diagramme d'inclusion du programme fly\_monitor]{Diagramme d'inclusion du programme fly\_monitor}\label{fig:fly_monitor}% +\caption[Diagramme d'inclusion du programme fly\_monitor]{Diagramme d'inclusion du programme fly\_monitor}\label{fig:fly_monitor} \end{figure} -\subsection{Etude des fréquences}\label{chap:communication} +\subsection{Étude des fréquences}\label{chap:communication} -Un point primordial pour le bon fonctionnement des threads est le respect des contraintes de temps réel. En particulier, le thread de lecture et d’écriture : la réception d’informations doit se faire avec le moins de perte possible et l’écriture doit se faire avec une fréquence la plus stable possible. Pour ce faire, à chaque point fixe dans un thread, une lecture du temps est réalisée. Le délai entre chaque lecture est calculé au point pour ensuite réaliser une attente jusqu’à atteindre le délai de la consigne (fonction nanosleep note : le sleep est uniquement bloquant dans le thread associé). +Un point primordial pour le bon fonctionnement des threads est le respect des contraintes de temps réel. En particulier, le thread de lecture et d’écriture : la réception d’informations doit se faire avec le moins de perte possible et l’écriture doit se faire avec une fréquence la plus stable possible. Pour ce faire, à chaque point fixe dans un thread, une lecture du temps est réalisée. Le délai entre chaque lecture est calculé au même point pour ensuite réaliser une attente jusqu’à atteindre le délai de la consigne (fonction nanosleep \footnote{Le sleep est uniquement bloquant dans le thread associé, ce qui veut dire que les autres threads continuent indépendamment de fonctionner. Le fonctionnement du programme fly\_monitor est asynchrone.}). \begin{algorithm}[ht] \DontPrintSemicolon @@ -72,7 +68,7 @@ Un point primordial pour le bon fonctionnement des threads est le respect des co \caption{Algorithme pour maintenir la fréquence d'un thread constante}\label{algo1} \end{algorithm} -Bien-sûr, si le délai entre chaque prise dépasse le délai de consigne, il n’y a pas d’attente (voir plus bas pour ce cas de figure). Il faut un délai de consigne le plus court possible (plus haute fréquence) tout en évitant ce cas. +Bien-sûr, si le délai entre chaque prise dépasse le délai de consigne, il n’y a pas d’attente (voir plus bas \ref{sec:deadline} pour ce cas de figure). Il faut un délai de consigne le plus court possible (plus haute fréquence) tout en évitant ce cas. \begin{figure} \centering @@ -83,50 +79,40 @@ Bien-sûr, si le délai entre chaque prise dépasse le délai de consigne, il n \begin{minipage}{0.49\textwidth} \includegraphics[width=\textwidth]{images/courbes/figureWrite.png} \end{minipage} - \caption[Tracés de l’évolution des périodes des threads]{Tracés de l’évolution des périodes des threads de lecture et d’écriture. L’écriture a une période de consigne de 50 ms et la lecture a une période de consigne de 1 ms.}\label{fig:thread_freq} + \caption[Tracés de l’évolution des périodes des threads]{Tracés de l’évolution des périodes des threads de lecture et d’écriture. L’écriture a une période de consigne de 50 ms et la lecture a une période de consigne de 1 ms. L'écart-type dans les deux cas est d'environ 0.1 ms. La fréquence d’écriture est “lente†car nous n’avons pas d’intérêt à envoyer beaucoup de commandes alors que le temps de réaction d’un humain ne dépasse pas les 100 ms. Tandis que la lecture doit se faire le plus rapidement possible pour pouvoir traiter tous les messages MAVLink reçues à temps. L'imprécision d’un noyau linux temps réel étant de l'ordre de la milliseconde, les contraintes sont donc largement respectées.}\label{fig:thread_freq} \end{figure} -La fréquence d’écriture est “lente†car nous n’avons pas d’intérêt à envoyer beaucoup de commandes alors que le temps de réaction d’un humain ne dépasse pas les 100 ms. Tandis que la lecture doit se faire le plus rapidement possible pour pouvoir traiter tous les messages MAVLink reçues à temps. - -Dans les deux threads, l’écart-type est de moins de 100 µs. -L'imprécision d’un noyau linux temps-réel est de l'ordre de la milliseconde. Dans ce cas, les délais sont encore mieux que cette limite, les contraintes sont donc largement respectées. - \subsection{Qualité de réception des messages MAVLink} Étant notre exemple de fonctionnement correct dans la communication avec l’autopilote, QGC fournit la fréquence de chacun des messages reçus : \begin{figure}[ht] \centering -\includegraphics[width=0.1\textwidth]{images/capture/qgc.png} -\caption[Messages reçus sur QGC]{Liste non exhaustive de messages reçus sur QGC}\label{fig:qgc}% +\includegraphics[width=0.18\textwidth]{images/capture/qgc.png} +\caption[Messages reçus sur QGC]{Liste non exhaustive de messages reçus sur QGC}\label{fig:qgc} \end{figure} -Puisque QGC ne sera pas implémenté dans le code final, il est important de s’assurer que les fréquences des messages côté fly\_monitor correspondent aux fréquences côté QGC. +Puisque QGC ne sera pas implémenté dans le code final, il est important de s’assurer que les fréquences des messages côté fly\_monitor correspondent aux fréquences côté QGC.\ref{fig:freq_calc} \begin{figure}[ht] \centering \includegraphics[width=0.6\textwidth]{images/capture/freq_calc.png} -\caption[Fréquences des messages calculées sur fly\_monitor]{Fréquences calculées par une moyenne mobile}\label{fig:freq_calc}% +\caption[Fréquences des messages calculées sur fly\_monitor]{Fréquences calculées par une moyenne mobile. Les valeurs sont bien similaires, voire plus précises dans la mesure où plus de chiffres sont donnés après la virgule.}\label{fig:freq_calc} \end{figure} -Les valeurs sont bien similaires, voire plus précises dans la mesure où l’on à accès à plus de chiffres après la virgule. - -On peut également tracer l'évolution des fréquences pour vérifier leur stabilité : +Nous pouvons également tracer l'évolution des fréquences pour vérifier leur stabilité : \ref{fig:freq_plot} \begin{figure}[ht] \centering -\includegraphics[width=0.8\textwidth]{images/courbes/freq_plot.png} -\caption[Tracé de l’évolution des fréquences brutes]{Tracé de l’évolution des fréquences brutes (non moyennées) des messages MAVLink dans le temps pour 9 messages}\label{fig:freq_plot}% +\includegraphics[width=1.0\textwidth]{images/courbes/freq_plot.png} +\caption[Tracé de l’évolution des fréquences brutes]{Tracé de l’évolution des fréquences brutes (non moyennées) des messages MAVLink dans le temps pour 9 messages. Par exemple, le message IMU en bleu maintient une fréquence stable 2.65 Hz. Il y a une légère baisse périodiquement (pics vers le bas), mais il ne s'agit pas de perte de message. Il s'agit de mode fonctionnement interne à l'autopilote sous PX4 qui envoie par salve avec une légère pause entre salves. Les messages sont inégaux dans la variance de leur fréquence car certains contiennent plus d’informations à partager (comme l’IMU). Ce qui importe c’est le maintien de la fréquence désirée sans perte. En effet, bien que le message IMU ait une certaine variance, il n’a pas de perte majeure qui mettrait sa fréquence à un multiple inférieur de la fréquence de consigne\footnote{Si un message est raté, nous perdons une période et donc une division par deux de la fréquence. Si plusieurs messages sont ratés, la fréquence baisse encore à des multiples inférieurs.}. Le système de communication est donc bien implémentable sur le plan de la qualité de réception.}\label{fig:freq_plot} \end{figure} -Les messages sont inégaux dans la variance de leur fréquence car certains contiennent plus d’information à partager (comme l’IMU). Ce qui importe c’est le maintien de la fréquence désirée sans perte. En effet, bien que le message IMU ait une certaine variance, il n’a pas de perte majeure qui mettrait sa fréquence à 0. -Le système de communication est donc bien implémentable sur le plan de la qualité de réception. +\subsection{Scénarios prévoyant la deadline}\label{sec:deadline} -\subsection{Scénarios prévoyant la deadline} +Le fly\_monitor prévoit les situations où l'un des threads de lecture ou d'écriture dépasse un délai spécifique (en microsecondes). Dans de telles situations, le code continue de s'exécuter, mais il génère des messages d'avertissement pour signaler le dépassement de la durée prévue. Cela facilite l'identification du message responsable du problème et de l'endroit où le délai est dépassé. Voici les différents scénarios possibles lors de la lecture d'un message, par exemple : -Le fly\_monitor prévoit le cas où un des threads de lecture ou d’écriture dépasse une certaine deadline (en µs). Dans ce cas, le code continue de tourner mais des messages de warning sont envoyés afin d’informer de la durée dépassée. Cela permet d'investiguer quel message pose problème, à quel point. -Voici les différents scénarios qui peuvent arriver lors de la lecture d’un message par exemple : \begin{figure}[ht] \centering -\includegraphics[width=0.8\textwidth]{images/schema/deadline.png} -\caption[Schéma des scénarios pour la lecture]{Schéma des scénarios pour la lecture d'un message. Dans le premier cas, tout se passe dans les temps, il y a un sleep jusqu'à atteindre le délai souhaité. Dans le deuxième cas, le traitement dépasse légèrement le délai souhaité mais reste en dessous de la valeur de deadline, on s'accorde une certaine marge lorsque certaines lectures subissent de légers ralentissements. Dans le troisième cas, la deadline est dépassée et un message de warning est envoyé, l'exécution du programme n'est toutefois pas interrompue.}\label{fig:deadline}% +\includegraphics[width=0.5\textwidth]{images/schema/deadline.png} +\caption[Schéma des scénarios pour la lecture]{Schéma des scénarios pour la lecture d'un message. Dans le premier cas, tout se passe dans les temps, il y a un sleep jusqu'à atteindre le délai souhaité. Dans le deuxième cas, le traitement dépasse légèrement le délai souhaité mais reste en dessous de la valeur de deadline, nous nous accordons une certaine marge lorsque certaines lectures subissent de légers ralentissements. Dans le troisième cas, la deadline est dépassée et un message de warning est envoyé, l'exécution du programme n'est toutefois pas interrompue.}\label{fig:deadline} \end{figure} %Exemple d'un algorithme : \\ diff --git a/Doc/2023/Source_latex/chapitre4.tex b/Doc/2023/Source_latex/chapitre4.tex index be3cab2176415020393c7c6787853c18d4144cad..da56fdee51ab20ebb6d53f7db06a6c37d81a08b5 100644 --- a/Doc/2023/Source_latex/chapitre4.tex +++ b/Doc/2023/Source_latex/chapitre4.tex @@ -1,6 +1,6 @@ \section{Modèle neuronal} -Le modèle utilisé dans ce stage est celui du neurone formel qui est une simplification du neurone biologique (\cite{neuron1943}). +Le modèle utilisé dans ce stage est celui du \acrshort{neurone} formel qui est une simplification du neurone biologique (\cite{neuron1943}). Ce neurone formel est constitué de : \begin{itemize} @@ -12,23 +12,23 @@ $Pot = W^T X$ où X est le vecteur d’entrée. L’équation peut aussi s’éc Pot = \sum_{i}^{} w_i x_i \end{equation} - \item Un seuil d’activation $\theta$ au delà du quel la réponse du neurone est générée. + \item Un seuil d’activation $\theta$ au-delà du quel la réponse du neurone est générée. \item Une fonction d’activation non linéaire f qui permet de calculer l’activité en sortie du neurone suivant la relation : $s = f(Pot - \theta)$ où s représente la sortie. \end{itemize} -Les poids W peuvent varier dans le temps. La fonction f limite la plage de valeurs que les neurones peuvent avoir, ce qui aide à rendre l'apprentissage plus stable en réduisant les changements brusques dans les poids des neurone. Lorsque plusieurs neurones sont interconnectés on parle de réseaux de neurones. +Les poids W peuvent varier dans le temps. La fonction f limite la plage de valeurs que les neurones peuvent avoir, ce qui aide à rendre l'apprentissage plus stable en réduisant les changements brusques dans les poids des neurones. Lorsque plusieurs neurones sont interconnectés, il s'agit de réseaux de neurones. \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/schema/neuron.PNG} -\caption[Schéma d’un neurone formel]{Schéma d’un neurone formel. Neurone formel de Mc. Culloch et Pitts}\label{fig:neuron}% +\caption[Schéma d’un neurone formel]{Schéma d’un neurone formel. Neurone formel de Mc. Culloch et Pitts}\label{fig:neuron} \end{figure} \section{Conditionnement et association} \subsection{Règle des moindres carrées} -Comme mentionné précédemment, les poids W peuvent varier de sorte à obtenir un résultat proche du résultat désiré. On définit alors une erreur à optimiser entre le résultat produit par le P.A et le résultat désiré (Il s'agit de la règle \cite{LMS1960}, autrement appelé LMS (Least Mean Square)) : +Comme mentionné précédemment, les poids W peuvent varier de sorte à obtenir un résultat proche du résultat désiré. Nous définissons alors une erreur à optimiser entre le résultat produit par le P.A et le résultat désiré (Il s'agit de la règle \cite{LMS1960}, autrement appelé LMS (Least Mean Square)) : \begin{equation} \label{eq:2} \xi = E[\frac{1}{2} (Y^d - W^T X)^2] @@ -58,7 +58,7 @@ S(t) = W_{ij}(t).X_i \subsection{Règle de Hebb} \label{sub:hebb} -La règle d'apprentissage de Hebb (\cite{hebb2005}), inspirée de la biologie, dit que lorsque deux neurones sont activés ensemble à plusieurs reprises, les connexions entre eux deviennent plus fortes. En d'autres termes, cela rend le transfert d'information plus efficace : +La règle d'apprentissage de Hebb (\cite{hebb2005}), inspirée de la biologie, dit que lorsque deux neurones sont activés ensemble à plusieurs reprises, les connexions entre eux deviennent plus fortes. En d'autres termes, cela rend le transfert d'informations plus efficace : \begin{equation} \label{eq:6} \delta w_{ij} = \epsilon x_i y_i - \lambda w_{ij} - \lambda' w_{ij}x_i @@ -66,24 +66,24 @@ La règle d'apprentissage de Hebb (\cite{hebb2005}), inspirée de la biologie, d Cette équation concerne la modification des connexions entre deux neurones, où un neurone est appelé "pré-synaptique" (i) et l'autre "post-synaptique" (j). Lorsque ces neurones s'activent ensemble, les connexions entre eux deviennent plus fortes, c'est comme si le cerveau apprenait que ces neurones sont liés d'une certaine manière. -L'idée derrière cette règle ressemble à l'apprentissage d'un "ET" logique. Les termes $\lambda w_{ij}$ et $\lambda' w_{ij}x_i$ sont là pour éviter que ces connexions deviennent trop fortes et qu'elles ne finissent par augmenter indéfiniment. Ils agissent comme un mécanisme de régulation pour stabiliser l'apprentissage. +L'idée derrière cette règle ressemble à l'apprentissage d'un "ET" logique. Les termes $\lambda w_{ij}$ et $\lambda' w_{ij}x_i$ sont là pour éviter que ces connexions ne deviennent trop fortes et qu'elles ne finissent par augmenter indéfiniment. Ils agissent comme un mécanisme de régulation pour stabiliser l'apprentissage. \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/schema/hebb.PNG} -\caption[Principe de renforcement des poids pour la règle de Hebb.]{Le principe de renforcement des poids selon la règle de Hebb est illustré dans plusieurs cas : a) Lorsqu'il n'y a pas de co-activation pré-synaptique et post-synaptique avant l'apprentissage, cela signifie qu'il n'y a pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. b) Lorsqu'il y a une activation pré-synaptique mais aucune activation post-synaptique avant l'apprentissage, et après l'apprentissage, il n'y a toujours pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. c) Lorsqu'il y a une activation post-synaptique mais aucune activation pré-synaptique avant l'apprentissage, et après l'apprentissage, il n'y a toujours pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. d) Lorsqu'il y a une co-activation pré-synaptique et post-synaptique avant l'apprentissage, il y aura, après l'apprentissage, une activation post-synaptique lorsque le signal pré-synaptique est présent. Dans tous ces cas, l'épaisseur des flèches représente le renforcement des connexions synaptiques, où une flèche fine correspond à une diminution du poids de la connexion et une flèche épaisse correspond à une augmentation du poids de la connexion. Cela montre comment la règle de Hebb renforce ou diminue les connexions synaptiques en fonction des corrélations d'activation entre les neurones pré-synaptiques et post-synaptiques.}\label{fig:hebb}% +\caption[Principe de renforcement des poids pour la règle de Hebb]{Le principe de renforcement des poids selon la règle de Hebb est illustré dans plusieurs cas : a) Lorsqu'il n'y a pas de co-activation pré-synaptique et post-synaptique avant l'apprentissage, cela signifie qu'il n'y a pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. b) Lorsqu'il y a une activation pré-synaptique mais aucune activation post-synaptique avant l'apprentissage, et après l'apprentissage, il n'y a toujours pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. c) Lorsqu'il y a une activation post-synaptique mais aucune activation pré-synaptique avant l'apprentissage, et après l'apprentissage, il n'y a toujours pas d'activation post-synaptique lorsque le signal pré-synaptique est présent. d) Lorsqu'il y a une co-activation pré-synaptique et post-synaptique avant l'apprentissage, il y aura, après l'apprentissage, une activation post-synaptique lorsque le signal pré-synaptique est présent. Dans tous ces cas, l'épaisseur des flèches représente le renforcement des connexions synaptiques, où une flèche fine correspond à une diminution du poids de la connexion et une flèche épaisse correspond à une augmentation du poids de la connexion. Cela montre comment la règle de Hebb renforce ou diminue les connexions synaptiques en fonction des corrélations d'activation entre les neurones pré-synaptiques et post-synaptiques.}\label{fig:hebb} \end{figure} \section{Compétition : le Winner Takes All} Les mécanismes de compétition sont comme un concours entre les neurones d'un groupe. Dans ce concours, les neurones les plus actifs l'emportent. Ce processus est simulé par le Winner Takes All (WTA), qui utilise des connexions entre les neurones pour décider quel neurone est le plus actif (\cite{wta1999}). -La variation du potentiel d’action d’un neurone xi du groupe est définie par : +La variation du potentiel d’action d’un neurone $x_i$ du groupe est définie par : \begin{equation} \label{eq:7} \frac{dx_i}{dt} = \alpha x_i - \beta \sum_{k\neq i}^{K}x_k I_i \end{equation} -Avec K le nombre de neurone du groupe, $I_i$ l’activité du neurone i, $\alpha \in [0, 1]$ le poids du lien récurrent autoexcitateur du neurone i et $\beta \in [0, 1]$ le poids des liens inhibiteurs provenant des +Avec K le nombre de neurones du groupe, $I_i$ l’activité du neurone i, $\alpha \in [0, 1]$ le poids du lien récurrent autoexcitateur du neurone i et $\beta \in [0, 1]$ le poids des liens inhibiteurs provenant des autres neurones du groupe. Si un neurone est très actif, il encourage l'activité de ses voisins, mais il les inhibe aussi un peu. Au bout du compte, le neurone le plus actif devient de plus en plus actif, tandis que les autres deviennent moins actifs. Ce processus simple permet au réseau de prendre des décisions en utilisant un ensemble minimal de règles de base, sans avoir besoin d'instructions compliquées. C'est comme si les neurones se battaient pour devenir le plus actif, et celui qui gagne prend la décision. @@ -91,17 +91,17 @@ Ce processus simple permet au réseau de prendre des décisions en utilisant un \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/schema/wta.PNG} -\caption[Exemple de mécanisme de compétition de type WTA.]{Exemple de mécanisme de compétition de type WTA à une seule couche. Chaque neurone s’auto-excite et inhibe ses voisins.}\label{fig:wta}% +\caption[Exemple de mécanisme de compétition de type WTA]{Exemple de mécanisme de compétition de type WTA à une seule couche. Chaque neurone s’auto-excite et inhibe ses voisins.}\label{fig:wta} \end{figure} \section{Architecture PerAc} -L'architecture PerAc (Perception/Action) est un type d'architecture développée par Gaussier et Zrehen (\cite{gaussier1995}). +L'architecture \acrshort{PerAc} (Perception/Action) est un type d'architecture développée par mon tuteur de stage Gaussier et Zrehen (\cite{gaussier1995}). \ref{fig:wta} \begin{figure} \centering \includegraphics[width=0.8\textwidth]{images/schema/perac.PNG} -\caption[Schéma de l'architecture PerAc (Perception/Action).]{Schéma de l'architecture PerAc (Perception/Action). Les liens modifiables correspondent aux connexions synaptiques qui suivent une règle d'apprentissage (Hebb ou LMS)}\label{fig:perac}% +\caption[Schéma de l'architecture PerAc (Perception/Action)]{Schéma de l'architecture PerAc (Perception/Action). Les liens modifiables correspondent aux connexions synaptiques qui suivent une règle d'apprentissage (Hebb ou LMS)}\label{fig:perac} \end{figure} Elle permet aux robots d'apprendre comment réagir aux différentes choses qu'ils perçoivent. Elle a deux parties : une première partie qui gère les réactions immédiates aux choses, comme les réflexes, et une autre partie qui apprend à comprendre les conséquences de ces réactions. @@ -115,14 +115,14 @@ créer et de simuler un réseau de neurones artificiel. \subsection{Coeos} -Coeos est un programme qui permet de créer visuellement un schéma pour un réseau de neurones que l'on souhaite utiliser avec Promethe, un autre logiciel. En utilisant Coeos, on peut dessiner des boîtes reliées les unes aux autres à l'aide de la souris. Ces boîtes représentent des groupes de neurones, et les liens entre elles représentent les connexions synaptiques. De plus, les groupes peuvent accepter des paramètres à partir des liens d'entrée et fournir des sorties. +Coeos est un programme qui permet de créer visuellement un schéma pour un réseau de neurones que nous souhaitons utiliser avec Promethe, un autre logiciel. En utilisant Coeos, des boîtes peuvent être reliées les unes aux autres à l'aide de la souris. Ces boîtes représentent des groupes de neurones, et les liens entre elles représentent les connexions synaptiques. De plus, les groupes peuvent accepter des paramètres à partir des liens d'entrée et fournir des sorties. -Voici un exemple de groupes créés dans Leto et reliés par des liens : +Voici un exemple de groupes créés dans Leto et reliés par des liens : \ref{fig:coeos} \begin{figure} \centering \includegraphics[width=0.8\textwidth]{images/capture/coeos.PNG} -\caption[Capture d'écran du logiciel Coeos.]{Ce script charge une image en mémoire et l'affiche sur l'écran}\label{fig:coeos}% +\caption[Capture d'écran du logiciel Coeos]{Ce script charge une image en mémoire et l'affiche sur l'écran}\label{fig:coeos} \end{figure} La particularité de Coeos est que ces groupes peuvent représenter soit un réseau de neurones réel comme Hebb ou Kohonen, soit une fonction algorithmique, ce qui signifie qu'ils ne sont pas liés à des neurones réels. Par exemple, un groupe peut être utilisé pour afficher une image à l'écran. @@ -131,10 +131,10 @@ De la même manière, les liens peuvent représenter des connexions synaptiques \subsection{Promethe} -Promethe est un programme qui permet d'exécuter le réseau de neurones créé avec Coeos. Plus précisément, il permet d'envoyer des données au réseau de neurones et de contrôler les entrées et sorties des différents groupes de neurones dans ce réseau. Cela signifie qu'il est possible de simuler le réseau de neurones et voir comment il réagit aux données qu'on lui donne. +Promethe est un programme qui permet d'exécuter le réseau de neurones créé avec Coeos. Plus précisément, il permet d'envoyer des données au réseau de neurones et de contrôler les entrées et sorties des différents groupes de neurones dans ce réseau. Cela signifie qu'il est possible de simuler le réseau de neurones et voir comment il réagit aux données que nous lui donnons. \ref{fig:promethe} \begin{figure} \centering \includegraphics[width=0.8\textwidth]{images/capture/promethe.png} -\caption[Capture d'écran du logiciel Promethe.]{Fenêtre principale de Promethe, elle affiche par défaut tous les boîtes neuronales utilisées ainsi que leur évolution en cours de simulation. Cela peut être très utile pour observer le comportement du réseau.}\label{fig:promethe}% +\caption[Capture d'écran du logiciel Promethe]{Fenêtre principale de Promethe, elle affiche par défaut toutes les boîtes neuronales utilisées ainsi que leur évolution en cours de simulation. Cela peut être très utile pour observer le comportement du réseau.}\label{fig:promethe} \end{figure} diff --git a/Doc/2023/Source_latex/chapitre5.tex b/Doc/2023/Source_latex/chapitre5.tex index 92263053685331e449f171bf827db96d60fe4e23..d05f55a5d3deee4fe7f81c8ee024e5461f64324e 100644 --- a/Doc/2023/Source_latex/chapitre5.tex +++ b/Doc/2023/Source_latex/chapitre5.tex @@ -1,8 +1,8 @@ -Avant de se pencher sur les algorithmes d'IA, il est important de s'assurer de la stabilité lors du contrôle du drone en plein vol. En effet, le choix a été fait d'opter pour un contrôle simple du drone en relatif, mais on perd en précision. Il est donc nécessaire d'ajouter des asservissements au contrôle du drone. +Avant de se pencher sur les algorithmes d'IA, il est important de s'assurer de la stabilité lors du contrôle du drone en plein vol. En effet, le choix a été fait d'opter pour un contrôle simple du drone en relatif, mais nous perdons en précision. Il est donc nécessaire d'ajouter des asservissements au contrôle du drone. \section{Asservissement de la hauteur} -L'asservissement de la hauteur se réalise en contrôlant la puissance de commande sur l'axe vertical (axe Z) du drone. La valeur 0 correspond au minimum, 0.5 représente la puissance nécessaire pour maintenir le drone en vol stationnaire, et une valeur supérieure à 0.5 indique la puissance nécessaire pour faire monter le drone. Pour l'algorithme, l'altitude souhaitée est comparée à l'altitude mesurée par le baromètre. Les valeurs sont normalisées en fonction du paramètre MAX\_ALT, où l'altitude maximale correspondra toujours à 1. +L'asservissement de la hauteur \ref{fig:alt_schema_2} se réalise en contrôlant la puissance de commande sur l'axe vertical (axe z) du drone. La valeur 0 correspond au minimum, 0.5 représente la puissance nécessaire pour maintenir le drone en vol stationnaire, et une valeur supérieure à 0.5 indique la puissance nécessaire pour faire monter le drone. Pour l'algorithme, l'altitude souhaitée est comparée à l'altitude mesurée par le baromètre. Les valeurs sont normalisées en fonction du paramètre MAX\_ALT, où l'altitude maximale correspondra toujours à 1.\ref{algo2} \begin{algorithm}[ht] \DontPrintSemicolon @@ -33,13 +33,13 @@ L'asservissement de la hauteur se réalise en contrôlant la puissance de comman \begin{figure}[ht] \centering \includegraphics[width=0.4\textwidth]{images/capture/coeos_alt.png} -\caption[Script d'asservissement de l'altitude sur Coeos.]{Script d'asservissement de l'altitude sur Coeos. Une erreur est calculée entre la mesure et la consigne, puis trois branches divergent vers trois boîtes distinctes. Ces trois boîtes fonctionnent comme des drapeaux qui s'activent lorsque la valeur en entrée dépasse un certain seuil. Dans le premier cas, "positive\_error", la boîte s'active lorsque l'entrée est positive (supérieure au seuil 0) et permet donc le passage de la commande de montée "gas\_high". Dans le deuxième cas, l'entrée est inversée (multipliée par -1), la boîte est strictement identique à celle ci-dessus. Mais puisque l'entrée est inversée, la boîte s'active lorsque l'entrée est négative (seuil toujours de 0) et envoie une commande de maintien "gas\_mid". Dans le troisième cas, le fonctionnement est similaire au deuxième cas. La boîte prend également une entrée inversée mais s'active seulement à un seuil défini (par exemple 0.1). Ainsi, si l'altitude mesurée est trop au-dessus de l'altitude désirée, une valeur soustractive "gas\_low" s'ajoute à "gas\_mid", ce qui a pour effet de faire descendre doucement le drone.}\label{fig:coeos_alt} +\caption[Script d'asservissement de l'altitude sur Coeos]{Script d'asservissement de l'altitude sur Coeos. Une erreur est calculée entre la mesure et la consigne, puis trois branches divergent vers trois boîtes bleues distinctes. Ces trois boîtes fonctionnent comme des drapeaux qui s'activent lorsque la valeur en entrée dépasse un certain seuil. Dans le premier cas, "positive\_error", la boîte s'active lorsque l'entrée est positive (supérieure au seuil 0) et permet donc le passage de la commande de montée "gas\_high". Dans le deuxième cas, l'entrée est inversée (multipliée par -1), la boîte est strictement identique à celle ci-dessus. Mais puisque l'entrée est inversée, la boîte s'active lorsque l'entrée est négative (seuil toujours de 0) et envoie une commande de maintien "gas\_mid". Dans le troisième cas, le fonctionnement est similaire au deuxième cas. La boîte prend également une entrée inversée mais s'active seulement à un seuil défini (par exemple 0.1). Ainsi, si l'altitude mesurée est trop au-dessus de l'altitude désirée, une valeur soustractive "gas\_low" s'ajoute à "gas\_mid", ce qui a pour effet de faire descendre doucement le drone.}\label{fig:coeos_alt} \end{figure} \begin{figure}[ht] \centering \includegraphics[width=0.6\textwidth]{images/schema/alt_control.png} -\caption[Illustration simplifié de l'asservissement de l'altitude.]{Illustration simplifié de l'asservissement de l'altitude.}\label{fig:alt_schema} +\caption[Illustration simplifiée de l'asservissement de l'altitude]{Illustration simplifiée de l'asservissement de l'altitude.}\label{fig:alt_schema_1} \end{figure} \section{Asservissement de l'orientation} @@ -69,31 +69,31 @@ L'asservissement de l'orientation se fait sur le contrôle de la rotation autour \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/capture/coeos_comp.png} -\caption[Script d'asservissement de l'orientation sur Coeos.]{Script d'asservissement de l'orientation sur Coeos. L'erreur calculée entre l'orientation mesurée de la boussole et l'orientation souhaitée correspond à la distance minimale entre les deux angles. Cette opération consiste à effectuer un calcul modulo pour déterminer la distance la plus courte. Par exemple, si nous mesurons un angle de 359° alors que la consigne est de 0°, la différence serait de -359°. Cependant, cela n'est pas efficace, car la distance la plus courte est de 1°. C'est pourquoi l'opérateur modulo est utilisé. Ensuite, un coefficient de gain est appliqué pour ajuster la dynamique de l'erreur à la dynamique des rotations des moteurs.}\label{fig:coeos_comp}% +\caption[Script d'asservissement de l'orientation sur Coeos]{Script d'asservissement de l'orientation sur Coeos. L'erreur calculée entre l'orientation mesurée de la boussole et l'orientation souhaitée correspond à la distance minimale entre les deux angles. Cette opération consiste à effectuer un calcul modulo pour déterminer la distance la plus courte. Par exemple, si nous mesurons un angle de 359° alors que la consigne est de 0°, la différence serait de -359°. Cependant, cela n'est pas efficace, car la distance la plus courte est de 1°. C'est pourquoi l'opérateur modulo est utilisé. Ensuite, un coefficient de gain est appliqué pour ajuster la dynamique de l'erreur à la dynamique des rotations des moteurs.}\label{fig:coeos_comp} \end{figure} \begin{figure}[ht] \centering -\includegraphics[width=0.3\textwidth]{images/schema/compass_control.png} -\caption[Illustration simplifié de l'asservissement de la boussole.]{Illustration simplifié de l'asservissement de l'orientation par rapport à la boussole.}\label{fig:alt_schema} +\includegraphics[width=1.0\textwidth]{images/schema/compass_control.png} +\caption[Illustration simplifiée de l'asservissement de la boussole]{Illustration simplifiée de l'asservissement de l'orientation par rapport à la boussole.}\label{fig:alt_schema_2} \end{figure} \section{Résultats et conclusion} Pour tester les algorithmes, le scénario suivant est établi : préparer le drone à l'orientation souhaitée, envoyer une commande d'altitude supérieure à l'altitude actuelle, effectuer quelques ajustements sur la commande d'orientation désirée, puis réduire l'altitude souhaitée au minimum. -On obtient alors les résultats suivants : \ref{fig:plot_alt_comp} +Nous obtenons alors les résultats suivants : \ref{fig:plot_alt_comp} \begin{figure}[ht] \centering -\includegraphics[width=0.5\textwidth]{images/courbes/plot_alt_comp.png} -\caption[Tracés des courbes d'altitudes et de boussoles durant l'asservissement.]{Tracés des courbes d'altitudes et de boussoles durant l'asservissement. Toutes les valeurs sont normalisées entre 0 et 1, la hauteur maximale étant de 2 mètres et l'angle maximal étant de 360 degrés. En haut, tout d'abord, une altitude élevée est demandée, ce qui entraîne l'envoi d'une commande de montée (0.75), faisant ainsi monter doucement le drone. Une fois que l'altitude de commande est dépassée, une commande de maintien (0.5) est envoyée. On observe alors que le drone tente de maintenir sa hauteur. Enfin, une altitude de base est demandée, entraînant l'envoi d'une commande de descente (0.3), ce qui fait descendre doucement le drone. En bas, nous observons les commandes envoyées pour stabiliser l'orientation. En effet, en surveillant la boussole mesurée, le drone a tendance à essayer de suivre la commande. Cependant, on peut noter quelques oscillations autour de l'orientation désirée lorsque celle-ci subit un changement brusque (quand il y a du vent qui souffle en faisant potentiellement tourner le drone).}\label{fig:plot_alt_comp}% +\includegraphics[width=1.0\textwidth]{images/courbes/plot_alt_comp.png} +\caption[Tracés des courbes d'altitudes et de boussoles durant l'asservissement]{Tracés des courbes d'altitudes et de boussoles durant l'asservissement. Toutes les valeurs sont normalisées entre 0 et 1, la hauteur maximale étant de 2 mètres et l'angle maximal étant de 360 degrés. En haut, tout d'abord, une altitude élevée est demandée (rouge), ce qui entraîne l'envoi d'une commande de montée 0.75 (bleu), faisant ainsi monter doucement le drone (vert). Une fois que l'altitude de commande est dépassée, une commande de maintien (0.5) est envoyée. Nous observons alors que le drone tente de maintenir sa hauteur. Enfin, une altitude de base est demandée, entraînant l'envoi d'une commande de descente (0.3), ce qui fait descendre doucement le drone. En bas, nous observons les commandes envoyées (magenta) pour stabiliser l'orientation. En effet, en surveillant la boussole mesurée (cyan), le drone a tendance à essayer de suivre la commande (bleu). Cependant, nous pouvons noter quelques oscillations autour de l'orientation désirée lorsque celle-ci subit un changement brusque (quand il y a du vent qui souffle en faisant potentiellement tourner le drone).}\label{fig:plot_alt_comp} \end{figure} \begin{figure}[ht] \centering -\includegraphics[width=0.5\textwidth]{images/capture/control_time.png} -\caption[Étude temps-réel du script d'asservissement.]{Étude temps-réel du script d'asservissement. Cette capture illustre la chronologie des boîtes de neurones qui demandent le plus de temps de calcul. La fréquence moyenne de fonctionnement est d'environ 49.8 Hz.}\label{fig:plot_alt_comp}% +\includegraphics[width=0.8\textwidth]{images/capture/control_time.png} +\caption[Étude temps-réel du script d'asservissement]{Étude temps-réel du script d'asservissement. Cette capture illustre la chronologie des boîtes de neurones qui demandent le plus de temps de calcul. La fréquence moyenne de fonctionnement est d'environ 49.8 Hz.}\label{fig:plot_alt_comp_2} \end{figure} En conclusion, les comportements observés pour ces algorithmes d'asservissement sont conformes à ce qui est attendu. En particulier, la fréquence est nettement supérieure aux exigences du cahier des charges. Bien que dans notre cas, cela puisse être suffisant pour les tests (et nous n'irons pas plus loin dans le cadre de ce stage), il peut être intéressant d'explorer des asservissements plus avancés pour améliorer les performances. Cela vaut particulièrement pour l'asservissement de la boussole, où les oscillations peuvent être évitées grâce à une correction intégrale. diff --git a/Doc/2023/Source_latex/chapitre6.tex b/Doc/2023/Source_latex/chapitre6.tex index 8c2bb5719f9f27ce8a5cd38aa63362f34d56a024..c06ca84001e53abf98b8fe2d525705f5599b3dda 100644 --- a/Doc/2023/Source_latex/chapitre6.tex +++ b/Doc/2023/Source_latex/chapitre6.tex @@ -4,13 +4,13 @@ Une fois que les contrôles de stabilité ont été validés, nous pouvons nous \begin{figure}[h] \centering - \begin{minipage}{0.45\textwidth} + \begin{minipage}{0.7\textwidth} \includegraphics[width=\textwidth]{images/schema/flow.png} \end{minipage} \caption[Suivi du flot optique]{Suivi du flot optique. Les informations du flot optique sont aplaties (moyenne sur chaque colonne) de manière à obtenir un vecteur de flot horizontal. Ensuite, l'ensemble est moyenné pour obtenir une valeur unique, qui représente la moyenne du flot horizontal. Cette valeur déterminera la direction vers laquelle le drone se dirigera avec un certain gain bien défini.}\label{fig:flow} \end{figure} -\begin{figure}[h] +\begin{figure}[ht] \centering \begin{minipage}{0.45\textwidth} \includegraphics[width=\textwidth]{images/capture/flot_left.png} @@ -23,6 +23,6 @@ Une fois que les contrôles de stabilité ont été validés, nous pouvons nous \end{figure} \subsection{Conclusion} -On savait que l'asservissement basé sur le flot optique n'était pas optimal, car il exige que le drone soit en mouvement pour que le suivi fonctionne. De plus, en raison de l'angle très large de la caméra\ref{sec:discussion}, les objets éloignés, tels que les humains, apparaissent très petits, obligeant les personnes à s'approcher davantage du drone pour que le flot soit suffisamment important et puisse contrer le bruit ambiant, comme le mouvement de l'herbe, des branches d'arbres soufflées par le vent, ou même le mouvement instable du drone lui-même. +Nous savions que l'asservissement basé sur le flot optique n'était pas optimal, car il exige que le drone soit en mouvement pour que le suivi fonctionne. De plus, en raison de l'angle très large de la caméra\ref{sec:discussion}, les objets éloignés, tels que les humains, apparaissent très petits, obligeant les personnes à s'approcher davantage du drone pour que le flot soit suffisamment important et puisse contrer le bruit ambiant, comme le mouvement de l'herbe, des branches d'arbres soufflées par le vent, ou même le mouvement instable du drone lui-même. -Cependant, ces limitations ne sont pas insurmontables. Ces expériences avaient pour principal objectif de déterminer si ces algorithmes pouvaient être intégrés dans notre projet, et il semble que cela soit prometteur. Nous restons optimistes quant aux possibilités d'amélioration - voir chapitre suivant \ref{chap:7}. +Cependant, ces limitations ne sont pas insurmontables. Ces expériences avaient pour objectif principal de déterminer si ces algorithmes pouvaient être intégrés dans notre projet, et il semble que cela soit prometteur. Nous restons optimistes quant aux possibilités d'amélioration - voir chapitre suivant \ref{chap:7}. diff --git a/Doc/2023/Source_latex/chapitre7.tex b/Doc/2023/Source_latex/chapitre7.tex index 94c5d3039a46a401c78d4e0e82291adb3ebed6cd..8e04cd5cfb03ac0d05781d9ba9e9fde2ec1b234a 100644 --- a/Doc/2023/Source_latex/chapitre7.tex +++ b/Doc/2023/Source_latex/chapitre7.tex @@ -9,14 +9,14 @@ Pour la navigation spatiale, l'équipe Neurocybernétique a proposé un modèle \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/schema/hippocampus.png} -\caption[Modèle de l'hippocampe]{Modèle de l'hippocampe pour la navigation. Le bloc de vigilance permet de lancer ou non l'apprentissage des cellules de lieu. Ce modèle présente de bons résultats pour la navigation en 2D \cite{espada2018}}\label{fig:hippocampus}% +\caption[Modèle de l'hippocampe]{Modèle de l'hippocampe pour la navigation. Le bloc de vigilance permet de lancer ou non l'apprentissage des cellules de lieu. Ce modèle présente de bons résultats pour la navigation en 2D \cite{espada2018}}\label{fig:hippocampus} \end{figure} En résumé, ce modèle vise à permettre au robot de naviguer en se basant sur ce qu'il voit et de s'orienter en utilisant des informations visuelles et des données de boussole. \section{Cellules de vue} -Les cellules de lieu sont comme des "neurones spéciaux" dans le cerveau qui s'activent lorsque nous reconnaissons un endroit particulier. Dans notre projet, ces cellules sont principalement impliquées dans la reconnaissance des endroits en utilisant principalement la vision. Pendant le stage, la vision provient d'une caméra fixe, mais le drone n'a pas une vision tout autour de lui (360°), donc on parle plutôt de "cellules de vue". +Les \acrshort{cellules de lieu} sont comme des "neurones spéciaux" dans le cerveau qui s'activent lorsque nous reconnaissons un endroit particulier. Dans notre projet, ces cellules sont principalement impliquées dans la reconnaissance des endroits en utilisant principalement la vision. Pendant le stage, la vision provient d'une caméra fixe, mais le drone n'a pas une vision tout autour de lui (360°), nous parlons plutôt de "cellules de vue". \subsection{Modèle implémenté} @@ -27,19 +27,19 @@ Dans cette section, nous présentons un exemple avec 10 cellules de vue.\ref{fig \begin{figure}[ht] \centering \includegraphics[width=1.0\textwidth]{images/capture/view_coeos.png} -\caption[Aperçu du modèle des cellules de vue sous Coeos.]{Aperçu du modèle des cellules de vue sous Coeos. La boîte 90 correspond à l'image en entrée de la chaîne de traitement (la boîte pan\_tilt n’est pas à prendre en compte puisqu'il n'y a pas d’orientation de caméra dans notre cas), les boîtes 28 et 85 sont les entrées (points d’intérêt, azimut) du réseau. En sortie, on retrouve les 10 neurones (boîte 25) correspondant aux 10 cellules de lieu. Les poids qui apprennent sont représentés par des liens en bleu foncé.}\label{fig:view_coeos}% +\caption[Aperçu du modèle des cellules de vue sous Coeos]{Aperçu du modèle des cellules de vue sous Coeos. La boîte 90 correspond à l'image en entrée de la chaîne de traitement (la boîte pan\_tilt n’est pas à prendre en compte puisqu'il n'y a pas d’orientation de caméra dans notre cas), les boîtes 28 et 85 sont les entrées (points d’intérêt, azimut) du réseau. En sortie, nous retrouvons les 10 neurones (boîte 25) correspondant aux 10 cellules de lieu. Les poids qui apprennent sont représentés par des liens en bleu foncé.}\label{fig:view_coeos} \end{figure} \subsection{Apprentissage} -L'apprentissage se fait en une seule étape, ce que l'on appelle one-shot learning. À chaque itération (c'est-à -dire à chaque image), une nouvelle cellule de vue est forcée à un état actif et les autres inhibées. Lorsqu'une image est présentée, les poids se mettent à jour en suivant la règle de Hebb (voir section \ref{sub:hebb}). En d'autres termes, les neurones qui s'activent en même temps (par exemple, lorsque des points d'intérêt apparaissent sur une image ET qu'une des cellules est activée) renforcent leurs connexions entre eux. Ainsi, une cellule de vue est fortement associée à une image en raison du renforcement de leur lien. +L'apprentissage se fait en une seule étape, ce que nous appelons one-shot learning. À chaque itération (c'est-à -dire à chaque image), une nouvelle cellule de vue est forcée à un état actif et les autres inhibées. Lorsqu'une image est présentée, les poids se mettent à jour en suivant la règle de Hebb (voir section \ref{sub:hebb}). En d'autres termes, les neurones qui s'activent en même temps (par exemple, lorsque des points d'intérêt apparaissent sur une image ET qu'une des cellules est activée) renforcent leurs connexions entre eux. Ainsi, une cellule de vue est fortement associée à une image en raison du renforcement de leur lien. -À titre d'exemple, voici comment les cellules sont activées à chaque itération pour avoir une valeur de 1\footnote{Tous les neurones dans le simulateur Promethe ont une activité normalisée entre 0 et 1, cela aide à garder une échelle de valeurs cohérente et commune entre les groupes.} (c'est le cas pour 5 points d'intérêt à chaque image) - voir Figure \ref{fig:view_plot_l}. +À titre d'exemple, voici comment les cellules sont activées à chaque itération pour avoir une valeur de 1\footnote{Tous les neurones dans le simulateur Promethe ont une activité normalisée entre 0 et 1, cela aide à garder une échelle de valeurs cohérentes et communes entre les groupes.} (c'est le cas pour 5 points d'intérêt à chaque image) - voir Figure \ref{fig:view_plot_l}. \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/capture/view_plot_l.png} -\caption[Graphique suivant l’évolution de 10 cellules lors de l'apprentissage de 6 images (6 itérations).]{Graphique montrant l'évolution de 10 cellules lors de l'apprentissage de 6 images (6 itérations). Chaque cellule peut apprendre au maximum 5 points d'intérêt. Les images sont espacées d'environ 10 mètres. À chaque itération, une seule cellule est activée à la fois, tandis que les autres présentent une activité très faible.}\label{fig:view_plot_l}% +\caption[Graphique suivant l’évolution de 10 cellules lors de l'apprentissage de 6 images (6 itérations)]{Graphique montrant l'évolution de 10 cellules lors de l'apprentissage de 6 images (6 itérations). Chaque cellule peut apprendre au maximum 5 points d'intérêt. Les images sont espacées d'environ 10 mètres. À chaque itération, une seule cellule est activée à la fois, tandis que les autres présentent une activité très faible.}\label{fig:view_plot_l} \end{figure} \subsection{Test} @@ -49,21 +49,21 @@ Lors du test du réseau, la mise à jour des poids est figée, et toutes les ima \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/capture/view_plot_t.png} -\caption[Graphique suivant l’évolution de 10 cellules sur 325 images après apprentissage.]{Graphique suivant l’évolution de 10 cellules sur 325 images après un apprentissage sur 6 images. Chaque cellule est nourrie de 15 points d’intérêt au maximum. Dessous, la représentation en couleur de la cellule avec la plus grosse activité à chaque itérations.}\label{fig:view_plot_t}% +\caption[Graphique suivant l’évolution de 10 cellules sur 325 images après apprentissage]{Graphique suivant l’évolution de 10 cellules sur 325 images après un apprentissage sur 6 images. Chaque cellule est nourrie de 15 points d’intérêt au maximum. Dessous, la représentation en couleur de la cellule avec la plus grosse activité à chaque itération.}\label{fig:view_plot_t} \end{figure} Le graphique représenté dans la Figure \ref{fig:view_plot_t} montre une différence constante entre les 6 premières cellules et les 4 dernières tout au long des tracés. Cela indique que, pour une image donnée, des caractéristiques communes (telles que le ciel et l'herbe au sol) à toutes les images ont été prises en compte dans l'apprentissage des poids de ces 6 cellules. Des pics d'activité sont clairement visibles aux emplacements des images apprises, ce qui correspond aux attentes puisque c'est à ces points précis que les connexions avec les cellules sont les plus fortes. -Cependant, la discrimination entre les activités autour des pics est initialement médiocre, puis s'améliore au fil du temps. Cette observation s'explique par l'environnement et sa richesse en termes de contenu sur les images. En effet, il y a peu d'objets distinctifs à repérer sur les images, ce qui incite l'algorithme à se concentrer sur les bâtiments en arrière-plan. Au début de la prise d'images, les bâtiments sont très éloignés, donc l'écart entre les mêmes points caractéristiques est faible pour chaque avancée de 10 mètres. Cependant, à mesure que l'on se rapproche, l'écart entre les mêmes points est plus grand pour la même distance, ce qui facilite la distinction entre deux images successives, notamment à proximité des bâtiments. C'est pourquoi les cellules 4 à 6 montrent des réponses plus nettes sur des distances de plus de 3 mètres, tandis que les cellules 1 à 3 ont du mal à se distinguer des autres, sauf à leur emplacement exact. +Cependant, la discrimination entre les activités autour des pics est initialement médiocre, puis s'améliore au fil du temps. Cette observation s'explique par l'environnement et sa richesse en matière de contenu sur les images. En effet, il y a peu d'objets distinctifs à repérer sur les images, ce qui incite l'algorithme à se concentrer sur les bâtiments en arrière-plan. Au début de la prise d'images, les bâtiments sont très éloignés, donc l'écart entre les mêmes points caractéristiques est faible pour chaque avancée de 10 mètres. Cependant, à mesure de l'avancée, l'écart entre les mêmes points est plus grand pour la même distance, ce qui facilite la distinction entre deux images successives, notamment à proximité des bâtiments. C'est pourquoi les cellules 4 à 6 montrent des réponses plus nettes sur des distances de plus de 3 mètres, tandis que les cellules 1 à 3 ont du mal à se distinguer des autres, sauf à leur emplacement exact. Un exemple d'une image apprise est montré dans la Figure \ref{fig:view_test0}. \begin{figure}[ht] \centering \includegraphics[width=0.4\textwidth]{images/capture/view_test0.png} -\caption[Exemple d'une image apprise.]{Exemple d'une image apprise. Les points d’intérêts sont généralement sur les bâtiments du fond. Ces points génèrent des vignettes qui nourrissent le réseau de neurones. Les vignettes contiennent des informations condensées d’une partie de l’image délimitée par les cercles en bleu.}\label{fig:view_test0}% +\caption[Exemple d'une image apprise]{Exemple d'une image apprise. Les points d’intérêts sont généralement sur les bâtiments du fond. Ces points génèrent des vignettes qui nourrissent le réseau de neurones. Les vignettes contiennent des informations condensées d’une partie de l’image délimitée par les cercles en bleu.}\label{fig:view_test0} \end{figure} \subsection{Optimisation des paramètres} @@ -86,7 +86,7 @@ Pour évaluer l'efficacité de chaque optimisation, nous calculons une mesure de \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/capture/view_temoin.png} -\caption[Ajout des cellules “témoins†afin de pouvoir calculer la précision.]{Ajout des cellules “témoins†afin de pouvoir calculer la précision.}\label{fig:view_temoin}% +\caption[Ajout des cellules “témoins†afin de pouvoir calculer la précision]{Ajout des cellules “témoins†afin de pouvoir calculer la précision.}\label{fig:view_temoin} \end{figure} Afin de réduire au maximum les biais dans l'évaluation des performances du modèle, nous avons évalué 6 \acrshort{datasets} différents. Chacun de ces ensembles représente une trajectoire allant vers l'avant de manière rectiligne et de même longueur. @@ -140,7 +140,7 @@ En général, nous pouvons observer que le modèle performe mieux avec un fort l \begin{minipage}{0.32\textwidth} \includegraphics[width=\textwidth]{images/capture/alpha_3_0.png} \end{minipage} - \caption[Influence du paramètre $\alpha$ sur le gradient.]{Influence du paramètre $\alpha$ sur le gradient. En haut, l'image original en niveaux de gris. En bas, les gradients différentes valeur de $\alpha$ : 0.1, 0.4, 3.0 dans cet ordre. Pour 0.1, le filtrage est trop fort, il est à peine possible de distinguer quelque chose. A l'inverse, pour 3.0, il n'y a quasiment plus aucun filtrage, ce qui pourrait laisser passer trop de détails. Pour 0.4, les traits semblent assez flous pour gommer les détails tout en laissant visible la forme générale de l'image.}\label{fig:alpha} + \caption[Influence du paramètre $\alpha$ sur le gradient]{Influence du paramètre $\alpha$ sur le gradient. En haut, l'image originale en niveaux de gris. En bas, les gradients différentes valeurs de $\alpha$ : 0.1, 0.4, 3.0 dans cet ordre. Pour 0.1, le filtrage est trop fort, il est à peine possible de distinguer quelque chose. A l'inverse, pour 3.0, il n'y a quasiment plus aucun filtrage, ce qui pourrait laisser passer trop de détails. Pour 0.4, les traits semblent assez flous pour gommer les détails tout en laissant visible la forme générale de l'image.}\label{fig:alpha} \end{figure} \subsubsection{Résolution des points d’intérêt (différence de gaussiennes)} @@ -157,7 +157,7 @@ La différence de gaussiennes est une technique de filtrage qui permet de mettre \begin{minipage}{0.5\textwidth} \includegraphics[width=\textwidth]{images/schema/dog2.png} \end{minipage} - \caption[Différence de gaussiennes]{Différence de gaussiennes. En appliquant une convolution par une \acrshort{DOG} sur l'image de gradient, on fait ressortir des caractéristiques propres à certaines formes. En particulier, les coins d'un objet où l'intensité sera particulièrement forte. En repérant ces coins, on peut alors faire apprendre au réseau de neurones des objets. Sur la figure du dessous, le trait plein représente le gradient et trait en pointillé représente la convolution par la DOG. Les points rouges représentent les pics d'intensité après convolution, on remarque bien comment les coins sont repérés selon les angles (l'objet de gauche a les coins tournés vers l'extérieur tandis que l'objet de droite a les coins tournés vers l'intérieur).}\label{fig:dog} + \caption[Différence de gaussiennes]{Différence de gaussiennes. En appliquant une convolution par une \acrshort{DOG} sur l'image de gradient, nous faisons ressortir des caractéristiques propres à certaines formes. En particulier, les coins d'un objet où l'intensité sera particulièrement forte. En repérant ces coins, nous pouvons alors faire apprendre au réseau de neurones des objets. Sur la figure du dessous, le trait plein représente le gradient et trait en pointillé représente la convolution par la DOG. Les points rouges représentent les pics d'intensité après convolution, nous remarquons bien comment les coins sont repérés selon les angles (l'objet de gauche a les coins tournés vers l'extérieur tandis que l'objet de droite a les coins tournés vers l'intérieur).}\label{fig:dog} \end{figure} La Figure \ref{fig:dog} permet de mieux comprendre les rôles joués par les paramètres $\theta$1 et $\theta$2. Il est important de maintenir les deux valeurs proches les unes des autres pour conserver des contours nets. La taille de ces paramètres influence la résolution des contours autour d'une forme : plus les valeurs de theta sont grandes, plus les contours seront épais, et vice versa. Il est à noter que les paramètres $\theta$ sont directement liés au gradient en entrée, ce qui influe sur l'épaisseur d'un trait. Une étude plus approfondie du couple $\alpha$/$\theta$ serait judicieuse, mais elle ne sera pas traitée dans le cadre de ce stage en raison de contraintes de temps. @@ -187,11 +187,11 @@ La Figure \ref{fig:dog} permet de mieux comprendre les rôles joués par les par Après l'extraction des points d'intérêt par la convolution à l'aide de la différence de gaussiennes (DOG), il est essentiel de déterminer la taille des vignettes à utiliser pour l'apprentissage du réseau de neurones. Ces vignettes subissent une transformation log-polaire, qui convertit les coordonnées cartésiennes des pixels de l'image en coordonnées log-polaires. Cette transformation présente deux avantages notables : \begin{itemize} - \item Invariance en échelle : Cela signifie que les objets de différentes tailles apparaîtront sous une forme similaire après la transformation, ce qui est particulièrement utile lorsque l'on s'intéresse à la reconnaissance d'objets ou de motifs à différentes échelles. + \item Invariance en échelle : Cela signifie que les objets de différentes tailles apparaîtront sous une forme similaire après la transformation, ce qui est particulièrement utile dans la reconnaissance d'objets ou de motifs à différentes échelles. \item Réduction des données : La transformation log-polaire peut réduire la quantité de données nécessaires pour représenter une image, ce qui peut être utile pour l'efficacité de l'apprentissage des cellules de vue. \end{itemize} -Chaque vignette est définie par deux cercles de rayons, R et r, où R est le rayon du cercle qui englobe la vignette et r est le rayon d'exclusion. En raison de la transformation log-polaire, plus on se rapproche du centre de la vignette, plus la résolution est élevée. Par conséquent, il n'est pas pertinent de conserver des informations provenant du centre de la vignette qui ne seront que sous un seul pixel. C'est pourquoi un rayon d'exclusion r est introduit.\ref{fig:grand_R} +Chaque vignette est définie par deux cercles de rayons, R et r, où R est le rayon du cercle qui englobe la vignette et r est le rayon d'exclusion. En raison de la transformation log-polaire, plus nous nous rapprochons du centre de la vignette, plus la résolution est élevée. Par conséquent, il n'est pas pertinent de conserver des informations provenant du centre de la vignette qui ne seront que sous un seul pixel. C'est pourquoi un rayon d'exclusion r est introduit.\ref{fig:grand_R} \begin{figure} \centering @@ -206,7 +206,7 @@ Chaque vignette est définie par deux cercles de rayons, R et r, où R est le ra \begin{minipage}{0.3\textwidth} \includegraphics[width=\textwidth]{images/capture/grand_R_100.png} \end{minipage} - \caption[Influence du paramètre R sur les vignettes autour des points d'intérêt.]{Influence du paramètre R sur les vignettes autour des points d'intérêt. On observe différentes valeur de R : 10, 30, 100 dans cet ordre. Pour se faire une idée, la bonne question à se poser serait : "Est-ce que je saurais reconnaître quelque chose en voyant que cette zone ?". A partir de ça, on peut remarquer que pour 10, on peut difficilement distinguer quelque chose. Pour 30, on peut commencer à observer des bouts d'objets. Pour 100, on est capable de visualiser une scène contenant plusieurs objets, cela peut être adapté pour apprendre un lieu mais peut être trop vaste pour traquer un objet}\label{fig:grand_R} + \caption[Influence du paramètre R sur les vignettes autour des points d'intérêt]{Influence du paramètre R sur les vignettes autour des points d'intérêt. Nous observons différentes valeurs de R : 10, 30, 100 dans cet ordre. Pour se faire une idée, la bonne question à se poser serait : "Est-ce que je saurais reconnaître quelque chose en voyant que cette zone ?". À partir de ça, nous pouvons remarquer que pour 10, il est difficile de distinguer quelque chose. Pour 30, nous pouvons commencer à observer des bouts d'objets. Pour 100, nous sommes capable de visualiser une scène contenant plusieurs objets, cela peut être adapté pour apprendre un lieu mais peut être trop vaste pour traquer un objet}\label{fig:grand_R} \end{figure} Tout au long de cette étude, une résolution pour la transformation log-polaire est calculée pour chaque paire de valeurs r et R de manière à couvrir au moins la moitié de la résolution en pixels. Par exemple, si la résolution en pixels pour une vignette est de 50, la résolution pour la transformation serait d'au moins 5x5. @@ -235,7 +235,7 @@ Tout au long de cette étude, une résolution pour la transformation log-polaire \subsubsection{Nombre de points d’intérêt} -Il peut être intéressant de varier le nombre de points d'intérêt à apprendre pour chaque image. Cependant, il est essentiel de noter que davantage de points ne signifie pas nécessairement une meilleure reconnaissance. En réalité, des points supplémentaires pourraient se concentrer sur des détails plutôt que sur une forme générale d'intérêt. En conséquence, cela pourrait rendre la reconnaissance difficile, même en cas de légères variations de vue. +Il peut être intéressant de varier le nombre de points d'intérêt à apprendre pour chaque image. Cependant, il est essentiel de noter que davantage de points ne signifient pas nécessairement une meilleure reconnaissance. En réalité, des points supplémentaires pourraient se concentrer sur des détails plutôt que sur une forme générale d'intérêt. En conséquence, cela pourrait rendre la reconnaissance difficile, même en cas de légères variations de vue. Une solution potentielle consisterait à augmenter le nombre de points en phase de test pour augmenter les chances de retrouver les points appris. Cependant, cela a un impact sur le temps de calcul. Dans notre cas, le nombre maximum de points est limité à 20 pour respecter une fréquence de 8 Hz, ce qui est proche de la limite spécifiée dans le cahier des charges. @@ -277,7 +277,7 @@ Le script de détection d'objet reprend le modèle des cellules de vue optimisé \begin{minipage}{0.45\textwidth} \includegraphics[width=\textwidth]{images/capture/tracking2.PNG} \end{minipage} - \caption[Détection et suivi d'un feutre.]{Détection et suivi d'un feutre. À gauche, un rectangle rouge encercle les points d'intérêt autour du feutre, déclenchant ainsi l'apprentissage des cellules et leur association à un objet (dans ce cas, le feutre). À droite, l'apprentissage est effectué, le feutre est déplacé vers la droite, et le marqueur "Objet\_1" suit parfaitement sa position. Juste en dessous, une commande de 0.93 en y est envoyée, demandant ainsi au drone de se déplacer vers la droite (valeur positive pour la droite et valeur négative pour la gauche).}\label{fig:tracking} + \caption[Détection et suivi d'un feutre]{Détection et suivi d'un feutre. À gauche, un rectangle rouge encercle les points d'intérêt autour du feutre, déclenchant ainsi l'apprentissage des cellules et leur association à un objet (dans ce cas, le feutre). À droite, l'apprentissage est effectué, le feutre est déplacé vers la droite, et le marqueur "Objet\_1" suit parfaitement sa position. Juste en dessous, une commande de 0.93 en y est envoyée, demandant ainsi au drone de se déplacer vers la droite (valeur positive pour la droite et valeur négative pour la gauche).}\label{fig:tracking} \end{figure} \begin{figure} @@ -285,10 +285,10 @@ Le script de détection d'objet reprend le modèle des cellules de vue optimisé \begin{minipage}{0.7\textwidth} \includegraphics[width=\textwidth]{images/capture/tracking_time.png} \end{minipage} - \caption[Étude temps-réel du script de suivi d'objet.]{Étude temps-réel du script de suivi d'objet. Cette capture montre une trame des boîtes de neurones qui consomment le plus de temps. La fréquence moyenne de fonctionnement est d'environ 16 Hz. Nous pouvons observer que le calcul du gradient prend particulièrement du temps en raison de la taille de l'image (720x576).}\label{fig:tracking_time} + \caption[Étude temps-réel du script de suivi d'objet]{Étude temps réel du script de suivi d'objet. Cette capture montre une trame des boîtes de neurones qui consument le plus de temps. La fréquence moyenne de fonctionnement est d'environ 16 Hz. Nous pouvons observer que le calcul du gradient prend particulièrement du temps en raison de la taille de l'image (720x576).}\label{fig:tracking_time} \end{figure} -\subsubsection{Conclusion} +\subsection{Conclusion} Ce script fonctionne à une fréquence de 16 Hz, dépassant ainsi la spécification minimale de 7 Hz du cahier des charges. Cependant, il montre des limites lors du suivi d'objets à une distance d'environ 10 mètres, où sa performance diminue significativement à cause de la diminution forte de la taille de l'objet.\ref{sec:discussion} @@ -301,7 +301,7 @@ Dans cette partie il s'agit d'une application concrète de l'architecture PerAc. \begin{minipage}{0.8\textwidth} \includegraphics[width=\textwidth]{images/schema/perac_joy.png} \end{minipage} - \caption[Association sensori-motrice]{Dans cette configuration d'association sensori-motrice, la boussole est d'abord représentée sous forme d'un vecteur de neurones en entrée. Ce vecteur est ensuite directement connecté au vecteur d'association. Ce dernier reçoit en plus les cellules de lieu/vue apprises en entrée. Le lien conditionnel signifie que les poids peuvent être modifiés, et effectivement, le vecteur d'association réalise un apprentissage LMS. Ainsi, les poids associés aux cellules apprennent la valeur actuelle de la boussole. Le joystick est utilisé pour déclencher l'apprentissage des cellules, ainsi que l'apprentissage de l'association entre la boussole et les cellules. Une fois l'association terminée, la partie correspondant à la boussole peut être retirée. À ce moment-là , on peut observer le comportement en sortie du bloc LMS pour vérifier si les cellules ont effectivement appris les bonnes valeurs de la boussole. Cette valeur de boussole apprise peut ensuite être utilisée comme orientation désirée dans le processus d'asservissement de la rotation.\ref{algo:boussole}}\label{fig:perac_joy} + \caption[Association sensori-motrice]{Dans cette configuration d'association sensori-motrice, la boussole est d'abord représentée sous forme d'un vecteur de neurones en entrée. Ce vecteur est ensuite directement connecté au vecteur d'association. Ce dernier reçoit en plus les cellules de lieu/vue apprises en entrée. Le lien conditionnel signifie que les poids peuvent être modifiés, et effectivement, le vecteur d'association réalise un apprentissage LMS. Ainsi, les poids associés aux cellules apprennent la valeur actuelle de la boussole. Le joystick est utilisé pour déclencher l'apprentissage des cellules, ainsi que l'apprentissage de l'association entre la boussole et les cellules. Une fois l'association terminée, la partie correspondant à la boussole peut être retirée. À ce moment-là , nous pouvons observer le comportement en sortie du bloc LMS pour vérifier si les cellules ont effectivement appris les bonnes valeurs de la boussole. Cette valeur de boussole apprise peut ensuite être utilisée comme orientation désirée dans le processus d'asservissement de la rotation.\ref{algo:boussole}}\label{fig:perac_joy} \end{figure} \begin{figure} @@ -309,10 +309,10 @@ Dans cette partie il s'agit d'une application concrète de l'architecture PerAc. \begin{minipage}{0.7\textwidth} \includegraphics[width=\textwidth]{images/capture/vpc_time.png} \end{minipage} - \caption[Étude temps-réel du script d'association sensori-motrice.]{Étude temps-réel du script d'association sensori-motrice. Cette capture montre la chronologie des boîtes de neurones qui demandent le plus de temps de calcul. La fréquence moyenne de fonctionnement est d'environ 7 Hz. Il est à noter que le calcul du gradient continue à occuper une part significative du temps de traitement, similaire à celui du suivi d'objet.}\label{fig:vpc_time} + \caption[Étude temps-réel du script d'association sensori-motrice]{Étude temps-réel du script d'association sensori-motrice. Cette capture montre la chronologie des boîtes de neurones qui demandent le plus de temps de calcul. La fréquence moyenne de fonctionnement est d'environ 7 Hz. Il est à noter que le calcul du gradient continue à occuper une part significative du temps de traitement, similaire à celui du suivi d'objet.}\label{fig:vpc_time} \end{figure} -\subsubsection{Conclusion} +\subsection{Conclusion} Le script fonctionne à une fréquence de 7 Hz, ce qui est en deçà de la spécification minimale de 7 Hz du cahier des charges. Une solution à envisager serait de sous-échantillonner l'image d'entrée, mais cela reviendrait à perdre en résolution, ce qui obligerait à avoir des objets plus proches dans la scène pour les distinguer. @@ -338,7 +338,7 @@ Comme observé dans les expériences précédentes, la vision de la caméra est \begin{minipage}{0.45\textwidth} \includegraphics[width=\textwidth]{images/courbes/ang_bat2.png} \end{minipage} - \caption[Études de la variation de la distance à la caméra.]{Études de la variation de la distance par rapport à la caméra. Les deux études portent sur des variations de 10 mètres. Dans le cas du haut, on constate que très rapidement, la taille d'un humain de 2 mètres devient quasiment indiscernable pour la caméra après une distance de 30 mètres. Au-delà de cette distance, il reste trop peu de pixels pour permettre la détection d'un objet de la taille d'un humain. En ce qui concerne le bas, la variation est de l'ordre du pixel après 200 mètres. À cette distance, il devient difficile de distinguer la différence entre deux prises de vue espacées de 10 mètres, notamment dans le cas de l'apprentissage de cellules de vue.}\label{fig:angle_plot} + \caption[Études de la variation de la distance à la caméra]{Études de la variation de la distance par rapport à la caméra. Les deux études portent sur des variations de 10 mètres. Dans le cas du haut, nous constatons que très rapidement, la taille d'un humain de 2 mètres devient quasiment indiscernable pour la caméra après une distance de 30 mètres. Au-delà de cette distance, il reste trop peu de pixels pour permettre la détection d'un objet de la taille d'un humain. En ce qui concerne le bas, la variation est de l'ordre du pixel après 200 mètres. À cette distance, il devient difficile de distinguer la différence entre deux prises de vues espacées de 10 mètres, notamment dans le cas de l'apprentissage de cellules de vue.}\label{fig:angle_plot} \end{figure} \ref{fig:angle_plot} diff --git a/Doc/2023/Source_latex/chapitre8.tex b/Doc/2023/Source_latex/chapitre8.tex index 1cd06c78bd81939689e2d203f5c8c814b6644b3e..ec500e2b63a6081a04409b7199e30518a59d26ec 100644 --- a/Doc/2023/Source_latex/chapitre8.tex +++ b/Doc/2023/Source_latex/chapitre8.tex @@ -8,7 +8,7 @@ En somme, ces phases ont permis de démontrer la faisabilité d'un tel système. Au cours de la période du stage, le projet n'a pas été exempt de défauts. La première critique concerne la caméra. Comme mentionné précédemment, elle possède un angle trop large pour des applications de suivi, mais trop étroit pour des applications de reconnaissance de lieux. Une solution serait soit de changer la lentille, soit d'ajouter à la caméra la capacité de s'articuler afin d'obtenir une vue panoramique.\\ -Nous avons choisi de faire contrôler le drone en mode assisté, spécifiquement en utilisant le mode "Manual-Easy: Position". Ce mode de contrôle simule le fonctionnement d'une radio-commande en gérant les commandes de l'accélérateur, de la rotation (yaw), de l'inclinaison avant-arrière (pitch) et de l'inclinaison latérale (roll). Cependant, il est important de noter que ce mode est conçu pour les débutants en drone, ce qui signifie qu'il limite la réactivité du drone pour éviter que l'utilisateur ne réalise des mouvements brusques. Dans notre cas, cette limitation de réactivité a un impact négatif sur les performances, ce qui se traduit par une réactivité plus lente du drone. Il serait donc intéressant d'explorer d'autres modes de contrôle pour améliorer ces performances. Par exemple, avec les modes acrobatiques, ou bien les modes de contrôle en cordonnées GPS\footnote{Manual-Acrobatic, Fllow-Me Offboard... \url{https://docs.px4.io/main/en/getting_started/flight_modes.html}}.\\ +Nous avons choisi de faire contrôler le drone en mode assisté, spécifiquement en utilisant le mode "Manual-Easy: Position". Ce mode de contrôle simule le fonctionnement d'une radio-commande en gérant les commandes de l'accélérateur, de la rotation (yaw), de l'inclinaison avant-arrière (pitch) et de l'inclinaison latérale (roll). Cependant, il est important de noter que ce mode est conçu pour les débutants en drone, ce qui signifie qu'il limite la réactivité du drone pour éviter que l'utilisateur ne réalise des mouvements brusques. Dans notre cas, cette limitation de réactivité a un impact négatif sur les performances, ce qui se traduit par une réactivité plus lente du drone. Il serait donc intéressant d'explorer d'autres modes de contrôle pour améliorer ces performances. Par exemple, avec les modes acrobatiques, ou bien les modes de contrôle en coordonnées GPS\footnote{Manual-Acrobatic, Fllow-Me Offboard... \url{https://docs.px4.io/main/en/getting_started/flight_modes.html}}.\\ Étant donné que le drone est un véhicule assez dangereux, il est arrivé plusieurs fois que le drone fasse des chutes destructrices. Souvent, il fallait alors remplacer les composants défectueux ou les racheter. Il est donc important de noter que ce type de système nécessite toujours des pièces de rechange.\\ @@ -20,7 +20,7 @@ Un point non mentionné dans ce rapport (mais visible dans le Gantt, référence Un autre point sur les scripts déployés est qu'ils sont, dans le cadre de ce stage, relativement peu complexes (mouvement latéral uniquement ou rotation uniquement). Une piste intéressante serait d'ajouter une information supplémentaire dans la modélisation de l'hippocampe, à savoir l'élévation. Avec cette élévation, une navigation 3D serait envisageable en ajoutant un axe vertical.\\ -Enfin, un dernier point méritant que l'on s'y penche est le fonctionnement de la paire caméra/flux optique et du capteur ultrason. Ces capteurs très performants pourraient potentiellement améliorer le drone. Les inclure pour fonctionner en tandem avec les capteurs déjà présents serait une tâche à considérer, il serait dommage de s'en priver.\\ +Enfin, un dernier point méritant que nous nous y penchons est le fonctionnement du couple caméra flux optique / capteur ultrason. Ces capteurs très performants pourraient potentiellement améliorer le drone. Les inclure pour fonctionner en tandem avec les capteurs déjà présents serait une tâche à considérer, il serait dommage de s'en priver.\\ \section{Bilan des compétences acquises} diff --git a/Doc/2023/Source_latex/conclusion.tex b/Doc/2023/Source_latex/conclusion.tex new file mode 100644 index 0000000000000000000000000000000000000000..66b88a00166f04958a239dca4087767331ea67b9 --- /dev/null +++ b/Doc/2023/Source_latex/conclusion.tex @@ -0,0 +1,5 @@ +Mon stage au laboratoire d'application de réseaux de neurones pour la navigation de drone a été une expérience inestimable. J'ai eu l'opportunité d'explorer une utilisation innovante de réseaux de neurones telle que les modèles bio-inspirés.\\ + +Au cours de ce stage, j'ai développé des compétences techniques essentielles, notamment la programmation, le traitement d'images et la conception de réseaux de neurones. J'ai également beaucoup renforcé ma rigueur que ce soit pour la préparation de l'environnement de test pour le drone ou le report de tâches effectuées dans un carnet de bord.\\ + +Je suis reconnaissant envers l'équipe du laboratoire pour leur mentorat précieux. Cette expérience a renforcé ma passion pour la recherche dans le domaine de l'IA. J'ai hâte de poursuivre mon parcours dans ce domaine en tant que professionnel engagé, convaincu de l'importance de ces technologies pour notre avenir. \ No newline at end of file diff --git a/Doc/2023/Source_latex/images/courbes/figureRead.png b/Doc/2023/Source_latex/images/courbes/figureRead.png new file mode 100644 index 0000000000000000000000000000000000000000..a0447af1b3238de7b4e22af82ff26fa3afc4eb52 Binary files /dev/null and b/Doc/2023/Source_latex/images/courbes/figureRead.png differ diff --git a/Doc/2023/Source_latex/images/courbes/figureWrite.png b/Doc/2023/Source_latex/images/courbes/figureWrite.png new file mode 100644 index 0000000000000000000000000000000000000000..632ccde9f1f46d637607e4fd578c17636c133a6d Binary files /dev/null and b/Doc/2023/Source_latex/images/courbes/figureWrite.png differ diff --git a/Doc/2023/Source_latex/introduction.tex b/Doc/2023/Source_latex/introduction.tex index 8652725d29c1c4f800975810fc8be7a027a93b3d..df8c60ae4fee863de6360662d20e8ecd70e18de2 100644 --- a/Doc/2023/Source_latex/introduction.tex +++ b/Doc/2023/Source_latex/introduction.tex @@ -1,12 +1,5 @@ -\markboth{\MakeUppercase{Introduction}}{}% -\addcontentsline{toc}{chapter}{Introduction}% - -%Voici une référence à l'image de la Figure \ref{fig:test} page \pageref{fig:test} et une autre vers la partie \ref{chap:2} page \pageref{chap:2}. -%On peut citer un livre\, \cite{caillois1} et on précise les détails à la fin du rapport dans la partie références. -%Voici une note\footnote{Texte de bas de page} de bas de page\footnote{J'ai bien dit bas de page}. Nous pouvons également citer l'Algorithme \ref{algo1}, la Définition \ref{def1}, le Théorème \ref{theo1} ou l'Exemple \ref{exo1}...\\ - Ce stage de projet de fin d'études au sein du groupe Neurocybernétique du laboratoire ETIS est une exploration des domaines de l'ingénierie électronique et de l'intelligence artificielle. L'objectif de mon projet est l'intégration d'un réseau neuronal bio-inspiré sur un drone contrôlé par télémétrie à l'aide d'une station au sol, fonctionnant sur un ordinateur portable. L’initiative de la mise en place d’un réseau neuronal bio-inspiré est soutenue par le laboratoire ETIS, qui croit en l'efficacité de cette approche novatrice. -Dans le domaine de la robotique, les approches classiques ont traditionnellement reposé sur l'implémentation d'algorithmes décrivant de manière explicite les étapes pour accomplir une tâche. Cependant, notre projet évolue vers une approche neuronale avec un modèle plus proche du cerveau et plus généralisable. Notamment, notre réseau neuronal bio-inspiré est principalement conçu pour analyser en temps réel une vidéo en direct, ce qui pose des défis en termes de latence et de temps de traitement des images reçues. Il faut également prendre en compte la structure physique du drone, ainsi que la compatibilité entre les composants électroniques. Ce projet offre l'opportunité de concevoir un système électronique complet, exigeant une rigueur tant dans la préparation de l'environnement (chargement des batteries, vérification du fonctionnement des scripts, prise en compte des cas extrêmes pour garantir la sécurité) avant les tests en vol, que dans l'entretien du drone, incluant le remplacement des composants défaillants et la soudure. Ce rapport de stage examinera la faisabilité du système ainsi que ses performances. +Dans le domaine de la robotique, les approches classiques ont traditionnellement reposé sur l'implémentation d'algorithme décrivant de manière explicite les étapes pour accomplir une tâche. Cependant, notre projet évolue vers une approche neuronale avec un modèle plus proche du cerveau et plus généralisable. Notamment, notre réseau neuronal bio-inspiré est principalement conçu pour analyser en temps réel une vidéo en direct, ce qui pose des défis en matière de latence et de temps de traitement des images reçues. Il faut également prendre en compte la structure physique du drone, ainsi que la compatibilité entre les composants électroniques. Ce projet offre l'opportunité de concevoir un système électronique complet, exigeant une rigueur tant dans la préparation de l'environnement (chargement des batteries, vérification du fonctionnement des scripts, prise en compte des cas extrêmes pour garantir la sécurité) avant les tests en vol, que dans l'entretien du drone, incluant le remplacement des composants défaillants et la soudure. Ce rapport de stage examinera la faisabilité du système ainsi que ses performances. -%Le plan est détaillé comme suit : le chapitre \ref{chap:chapterone} introduit le cadre général de ce travail. Il s'agit de présenter le laboratoire et l'environnement de travail. Le chapitre \ref{chap:2} introduit les données ainsi que les modèles choisies. Le chapitre \ref{chap:3} donne les principaux résultats et la comparaison entre divers modèles (courbe de ROC, indice de Gini). Nous clôturons ce travail par une brève conclusion résumant le travail accompli ainsi que des perspectives qui pourraient enrichir ce travail. \ No newline at end of file +Le plan est détaillé comme suit : Le chapitre \ref{chap:1} introduit le contexte général de cette étude, fournissant une présentation du laboratoire et de l'environnement de travail. Le chapitre \ref{chap:2} présente en détail les composants du système électronique, ainsi que les outils logiciels disponibles. Le chapitre \ref{chap:3} se consacre à l'examen du programme principal de communication et de contrôle du drone. Le chapitre \ref{chap:4} explore les réseaux de neurones et les modèles choisis pour ce travail. Le chapitre \ref{chap:5} offre une première approche des scripts de contrôle du drone. Le chapitre \ref{chap:6} reprend le modèle du chapitre 5, mais ajoute un contrôle basé sur la vision. Le chapitre \ref{chap:7} présente des scripts plus avancés implémentant des réseaux de neurones, accompagnés des principaux résultats obtenus. Le chapitre \ref{chap:8} réalise une évaluation de la méthode utilisée, met en lumière les améliorations possibles, et souligne les compétences acquises au cours de ce travail. Nous concluons ce travail par une brève synthèse résumant les réalisations accomplies, et nous évoquons des perspectives qui pourraient enrichir cette étude. diff --git a/Doc/2023/Source_latex/rapport.pdf b/Doc/2023/Source_latex/rapport.pdf deleted file mode 100644 index 378f47693efb37ad15cfb17fb6acbfb5677644f0..0000000000000000000000000000000000000000 Binary files a/Doc/2023/Source_latex/rapport.pdf and /dev/null differ diff --git a/Doc/2023/Source_latex/rapport.tex b/Doc/2023/Source_latex/rapport.tex index dae6262318228c5042a03c12288cc16124ff8f93..838da8b6d41ba4f8808a4ca6f6619d11a2049484 100644 --- a/Doc/2023/Source_latex/rapport.tex +++ b/Doc/2023/Source_latex/rapport.tex @@ -1,6 +1,6 @@ -%% @Author: Ines Abdeljaoued Tej -% @Date: 2022-06 -%% @Class: PFE de l'ESSAI - Universite de Carthage, Tunisie. +%% @Author: Stéphane Yang +% @Date: 2023-10 +%% @Class: PFE ENSEA SIA \documentclass[a4paper, oneside, 12pt, final]{extreport} \usepackage{graphicx} @@ -31,8 +31,6 @@ % \section{References}}{}{} %\makeatother - - \usepackage[nottoc]{tocbibind} \textwidth 18cm @@ -50,7 +48,6 @@ \usepackage{lmodern} \fi - % Enable SageTeX to run SageMath code right inside this LaTeX file. % documentation: http://mirrors.ctan.org/macros/latex/contrib/sagetex/sagetexpackage.pdf %\usepackage{sagetex} @@ -114,7 +111,6 @@ \usepackage{graphics} \usepackage{graphicx} - \usepackage[acronym,toc,section=chapter]{glossaries} \makeglossaries \renewcommand{\acronymname}{Glossaire} @@ -122,6 +118,7 @@ \newacronym{ENSEA}{ENSEA}{École nationale supérieure de l'électronique et de ses applications} \newacronym{ETIS}{ETIS}{Équipes Traitement de l'Information et Systèmes} \newacronym{UMR8051}{UMR8051}{Unité Mixte de Recherche de l’Université de Cergy-Paris Université de l’ENSEA et du CNRS} +\newacronym{hardware}{harware}{Ensemble des composants physiques d'un système informatique et électronique} \newacronym{Autopilote}{Autopilote}{Coeur (commande des moteurs) et cerveau (asservissements, gestion de MAVLink) du drone} \newacronym{Fly Monitor}{Fly Monitor}{Nom du projet} \newacronym{fly\string_monitor}{fly\string_monitor}{Nom du code C++ gérant tous les threads et la communication entre eux} @@ -131,11 +128,14 @@ \newacronym{firmware}{firmware}{Logiciel embarqué} \newacronym{PX4}{PX4}{Firmware implanté dans l’autopilote Pixhawk 4} \newacronym{QGC}{QGC}{QGroundControl} -\newacronym{ESC}{ESC}{Electronic speed control, circuit électronique contrôlant et régulant la vitesse d’un moteur électrique.} -\newacronym{IMU}{IMU}{Inertial Measurement Unit, circuit électronique contenant 3 gyroscopes et 3 accéléromètres.} -\newacronym{datasets}{datasets}{Jeu de données, dans le cadre de ce rapport, les images prises par la caméra du drone pour un certain parcours.} -\newacronym{UAV}{UAV}{Unmanned Aerial Vehicle, véhicule aérien sans pilote qui peut voler de façon autonome ou être contrôlé à distance depuis le sol.} +\newacronym{ESC}{ESC}{Electronic speed control, circuit électronique contrôlant et régulant la vitesse d’un moteur électrique} +\newacronym{IMU}{IMU}{Inertial Measurement Unit, circuit électronique contenant 3 gyroscopes et 3 accéléromètres} +\newacronym{datasets}{datasets}{Jeu de données, dans le cadre de ce rapport, les images prises par la caméra du drone pour un certain parcours} +\newacronym{UAV}{UAV}{Unmanned Aerial Vehicle, véhicule aérien sans pilote qui peut voler de façon autonome ou être contrôlé à distance depuis le sol} +\newacronym{neurone}{neurone}{Brique de base d'un modèle d'intelligence artificielle jouant un rôle essentiel dans l'apprentissage et la prise de décision.} \newacronym{DOG}{DOG}{Difference Of Gaussian, différence de gaussiennes} +\newacronym{cellules de lieu}{cellules de lieu}{Les cellules de lieu, découvertes dans l'hippocampe du cerveau, sont des neurones spéciaux qui jouent un rôle essentiel dans la représentation spatiale et la navigation. Ensemble, elles constituent une cartographie mentale d'un lieu donné} +\newacronym{PerAc}{PerAc}{Architecture Perception Action conceptualisée au sein du laboratoire, architecture de réseau de neurones faisant le rapprochement entre les informations sensorielles et le réflexe moteur à la manière du fonctionnement du cerveau chez les animaux} \pagenumbering{roman} @@ -271,19 +271,15 @@ % \raggedleft\normalfont\large\itshape{} \reportAuthor\par% %} % -%\cleardoublepage% +\newpage -\chapter*{Remerciements} -%\addcontentsline{toc}{chapter}{Thanks} -\thispagestyle{empty} -% -Au terme de ce travail, je tiens à remercier Philippe Gaussier, pour la confiance qu'il m'a accordée en acceptant d'encadrer ce travail, pour ses multiples conseils et pour sa disponibilité.\\ +\ % The empty page -Je tiens également à remercier à tous mes prédécesseurs pour les travaux légués, sans qui, le projet commencerait de zéro : Paul Chevalier, Aminata Barry, Sylvain Colomer.\\ +\newpage -Mes remerciements vont aussi à ma tutrice, Roseline Descout-Rénier, pour m’avoir encadré et fourni des conseils utiles pour le stage.\\ +\chapter*{Remerciements} +\input{remerciements.tex} -Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leur spontanéité lors des commandes de composants, ainsi que tous les collègues stagiaires. \input{abstract.tex} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -308,7 +304,7 @@ Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leu \input{introduction.tex} \chapter{Contexte et cadre}% -\label{chap:chapterone} +\label{chap:1} \input{chapitre1.tex} \chapter{Hardware et logiciels} @@ -341,13 +337,7 @@ Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leu \chapter*{Conclusion} \label{chap:conclusion} -\markboth{\MakeUppercase{Conclusion}}{}% -\addcontentsline{toc}{chapter}{Conclusion} -Mon stage au laboratoire d'application de réseaux de neurones pour la navigation de drone a été une expérience inestimable. J'ai eu l'opportunité d'explorer une utilisation innovante de réseaux de neurones telle que les modèles bio-inspirés.\\ - -Au cours de ce stage, j'ai développé des compétences techniques essentielles, notamment la programmation, le traitement d'image et la conception de réseaux de neurones. J'ai également beaucoup renforcé ma rigueur que ce soit pour la préparation de l'environnement de test pour le drone ou le report de tâches effectuée dans un carnet de bord.\\ - -Je suis reconnaissant envers l'équipe du laboratoire pour leur mentorat précieux. Cette expérience a renforcé ma passion pour la recherche dans le domaine de l'IA. J'ai hâte de poursuivre mon parcours dans ce domaine en tant que professionnel engagé, convaincu de l'importance de ces technologies pour notre avenir. +\input{conclusion.tex} \newpage \appendix @@ -395,7 +385,7 @@ Je suis reconnaissant envers l'équipe du laboratoire pour leur mentorat précie \bibliography{Biblio.bib} -\cleardoublepage% +\cleardoublepage \addtocontents{toc}{\protect\setcounter{tocdepth}{3}} diff --git a/Doc/2023/Source_latex/remerciements.tex b/Doc/2023/Source_latex/remerciements.tex new file mode 100644 index 0000000000000000000000000000000000000000..9660507e13beec39f45e2e64611e9e31e2f76eec --- /dev/null +++ b/Doc/2023/Source_latex/remerciements.tex @@ -0,0 +1,9 @@ +Au terme de ce travail, je tiens à remercier Philippe Gaussier, pour la confiance qu'il m'a accordée en acceptant d'encadrer ce travail, pour ses multiples conseils et pour sa disponibilité.\\ + +Je tiens également à remercier à tous mes prédécesseurs pour les travaux légués, sans qui, le projet commencerait de zéro : Paul Chevalier, Aminata Barry, Sylvain Colomer.\\ + +Mes remerciements vont aussi à ma tutrice, Roseline Descout-Rénier, pour m’avoir encadré et fourni des conseils utiles pour le stage.\\ + +Je souhaite remercier Mehdi et Chloé pour avoir répondu à de nombreuses sollicitations pour l'impression des pieds en 3D destinés au support du drone.\\ + +Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leur spontanéité lors des commandes de composants, ainsi que tous les collègues stagiaires. \ No newline at end of file