diff --git a/Doc/2023/Rapport_PFE_YANG_Stephane.pdf b/Doc/2023/Rapport_PFE_YANG_Stephane.pdf index a8211e4a80570be45f3fa373e01fe807c7018255..f2a781bbd5d2f96da2d994d7b8c143f406bc8a3f 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 new file mode 100644 index 0000000000000000000000000000000000000000..72f4f879abb9beccfc61bbd54159ea26771c867b Binary files /dev/null and b/Doc/2023/Source_latex/alt_control.png differ diff --git a/Doc/2023/Source_latex/chapitre1.tex b/Doc/2023/Source_latex/chapitre1.tex index b180d20a83d95b033ee5d3d5a24a1036652d75e7..60955419e14c08c4330d7478b5e35d2d67a4160b 100644 --- a/Doc/2023/Source_latex/chapitre1.tex +++ b/Doc/2023/Source_latex/chapitre1.tex @@ -111,11 +111,11 @@ La plupart des tests de vol sont réalisés sur une zone ouverte du campus. Pour %image fil à la pate + images avec protection \begin{figure} \centering - \begin{minipage}{0.45\textwidth} + \begin{minipage}{0.35\textwidth} \includegraphics[width=\textwidth]{images/drone/fil_a_la_patte.jpg} \end{minipage} \hfill - \begin{minipage}{0.45\textwidth} + \begin{minipage}{0.35\textwidth} \includegraphics[width=\textwidth]{images/drone/protection_helice.jpg} \end{minipage} \caption[Zoom sur les protections]{Zoom sur les protections. A gauche, le fil à la patte, à droite, les protections pour les hélices}\label{fig:protection} @@ -125,7 +125,7 @@ Des tests en intérieur ont également été effectués lorsque les conditions m \begin{figure}% \center% -\includegraphics[width=0.65\textwidth]{images/plateforme.png} +\includegraphics[width=0.35\textwidth]{images/plateforme.png} \caption{Aperçu de la plateforme en bois}\label{fig:plateforme}% \end{figure} diff --git a/Doc/2023/Source_latex/chapitre3.tex b/Doc/2023/Source_latex/chapitre3.tex index ca31b7fd289a7eabecc222b2e556da0da2444ae1..d3f296e68b93aed8e8f3f1f721293c4f71567ce6 100644 --- a/Doc/2023/Source_latex/chapitre3.tex +++ b/Doc/2023/Source_latex/chapitre3.tex @@ -10,8 +10,9 @@ 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 Latence maximale (comprenant la télémétrie à la réception à la station au sol) : 50 ms. Sous un noyau Linux temps réel, les performances ne sont jamais meilleurs que l'ordre de 1 ms. Dans notre cas sur Ubuntu, on peut espérer un latence inférieure à 50 ms mais dans le cas contraire, un passage vers un Linux temps réel pourrait être envisagé. - \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). + \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 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} diff --git a/Doc/2023/Source_latex/chapitre5.tex b/Doc/2023/Source_latex/chapitre5.tex index 166aa2f1b06b6aa52a43303ef3251b941328a6a9..92263053685331e449f171bf827db96d60fe4e23 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é opté pour un contrôle simple du drone en relatif mais on perd en précision. Il faut alors ajouter au contrôle du drone des asservissements. +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. \section{Asservissement de la hauteur} -L'asservissement de la hauteur se fait sur le contrôle de la puissance de commande en z (axe vertical) du drone. La valeur 0 est le minimum, 0.5 est la puissance suffisante pour le maintien stationnaire du drone en vol, >0.5 est la puissance faisant monter le drone. Pour l'algorithme, l'altitude désirée est comparée à l'altitude mesurée par le baromètre. Les valeurs sont normalisées selon le paramètre MAX\_ALT où l'altitude maximum vaudra toujours 1. +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. \begin{algorithm}[ht] \DontPrintSemicolon @@ -32,13 +32,19 @@ L'asservissement de la hauteur se fait sur le contrôle de la puissance de comma \begin{figure}[ht] \centering -\includegraphics[width=0.8\textwidth]{images/capture/coeos_alt.png} -\caption[Script d'asservissement de l'altitude sur Coeos.]{Script d'asservissement de l'altitude sur Coeos. Un erreur est calculée entre la mesure et la consigne, puis trois liens partent 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érieur 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 renversée (multiplication par -1), la boîte est strictement identique à celle d'au dessus. Mais puisque l'entrée est renversée, la boîte s'active lorsque l'entrée est négative (seuil toujours de 0) et une commande de maintien "gas\_mid" est envoyée. Dans le troisième cas, le fonctionnement est additionnel au deuxième cas. La boîte prend également une entrée inversée mais s'active seulement à un seuil défini (0.1 par exemple). Ainsi, si l'altitude mésuré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 doucement descendre le drone.}\label{fig:coeos_alt}% +\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} +\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} \end{figure} \section{Asservissement de l'orientation} -L'asservissement de l'orientation se fait sur le contrôle de la rotation autour de l'axe z (vertical) du drone. La valeur 0 ne fait aucune rotation, le signe de la valeur détermine le sens de rotation , et l'intensité de la valeur détermine la vitesse de rotation (des inversions sont possibles, des vérifications sont donc toujours à faire). +L'asservissement de l'orientation se fait sur le contrôle de la rotation autour de l'axe z (vertical) du drone. Une valeur de 0 ne génère aucune rotation. Le signe de la valeur détermine le sens de la rotation, et son intensité détermine la vitesse de rotation. Des inversions sont possibles, ce qui nécessite des vérifications constantes. \begin{algorithm}[ht] \DontPrintSemicolon @@ -63,19 +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 de la boussole mesurée et l'orientation voulue est la distance minimal entre les deux angles. Il s'agit d'effectuer une opération modulo afin de trouver la plus courte distance. Par exemple si on mesure 359° alors que la consigne est 0°, la différence serait de -359°. Or ce n'est pas efficace, puisque la distance la plus courte est de 1°, d'où l'intervention de l'opérateur modulo. Ensuite, un gain est appliqué de sorte à ce que la dynamique de l'erreur soit ajustée à 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} \end{figure} \section{Résultats et conclusion} -Pour tester les algorithmes, le scénario suivant est établi : préparer le drone à la même orientation que l'orientation désirée, envoyer une commande d'altitude supérieure à l'altitude actuelle, jouer un peu sur la commande de l'orientation désirée, baisser l'altitude voulue à fond. +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} \begin{figure}[ht] \centering -\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. Les valeurs sont toutes normalisées entre 0 et 1, la hauteur max étant 2 m et l'angle max étant 360°. En haut, en premier lieu, une altitude haute est demandée. Une commande de montée est alors envoyée (0.75), ce qui fait monter doucement le drone. Une fois que l'altitude de commande est dépassée, une commande de stationnement est envoyée (0.5). On observe alors bien que le drone tente de maintenir sa hauteur. Enfin, une altitude base est demandée, une commande de descente est envoyée (0.3), le drone se met alors à descendre doucement. En bas, on observe les commandes envoyées pour stabiliser l'orientation. En effet, en observant la boussole mesurée, le drone a tendance à essayer de suivre la commande. On observe toutefois quelques oscillations autour de l'orientation désirée lorsque cette dernière effectue un changement brusque.}\label{fig:plot_alt_comp}% +\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}% +\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}% \end{figure} -En conclusion, le comportement observé pour ces algorithmes d'asservissement sont conformes à ce qui est attendu. Bien que dans notre cas cela puisse être suffisant pour les tests, il peut être intéressant de se pencher sur des asservissements plus poussés pour un gain en performance. Notamment l'asservissement de la boussole où les oscillations peuvent être évitées grâce à une correction intégrale. \ No newline at end of file +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 6622234b61b43248c9290af7aecd8fd80c618c23..8c2bb5719f9f27ce8a5cd38aa63362f34d56a024 100644 --- a/Doc/2023/Source_latex/chapitre6.tex +++ b/Doc/2023/Source_latex/chapitre6.tex @@ -1,3 +1,5 @@ +\section{Script n°1 : Flot optique} + Une fois que les contrôles de stabilité ont été validés, nous pouvons nous concentrer sur l'intégration d'un réseau de neurones dans le système. Néanmoins, dans cette phase de preuve de concept, nous allons créer un script simple de vision. Ce script permettra de faire déplacer le drone horizontalement de droite à gauche en fonction du flux de mouvement détecté par la caméra. Pour ce faire, nous allons calculer le flux optique à partir de l'image d'entrée, en nous concentrant sur l'axe horizontal (axe x). Le drone se dirigera ensuite vers la direction où le mouvement est le plus intense. \begin{figure}[h] @@ -5,5 +7,22 @@ Une fois que les contrôles de stabilité ont été validés, nous pouvons nous \begin{minipage}{0.45\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 sorte à obtenir un vecteur de flot horizontal. Ensuite, la valeur la plus intense du vecteur sera la direction vers laquelle le drone se dirigera. En l'occurrence c'est la valeur du milieu qui gagne, le drone restera alors sur place.}\label{fig:flow} + \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] + \centering + \begin{minipage}{0.45\textwidth} + \includegraphics[width=\textwidth]{images/capture/flot_left.png} + \end{minipage} + \hfill + \begin{minipage}{0.45\textwidth} + \includegraphics[width=\textwidth]{images/capture/flot_right.png} + \end{minipage} + \caption[Test du flot optique]{Test du flot optique. Il s'agit de tests réalisés en faisant bouger une main devant la caméra, avec un gain de 2 pour la puissance des moteurs. La fréquence de fonctionnement est de 15 Hz environ. Sur la gauche, vous pouvez voir une main se déplaçant vers la gauche, ce qui incite le drone à se diriger vers la gauche (-1.12). À droite, la main se déplace vers la droite, ce qui provoque un mouvement du drone vers la droite (0.78)}\label{fig:flow_test} +\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. + +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}. diff --git a/Doc/2023/Source_latex/chapitre7.tex b/Doc/2023/Source_latex/chapitre7.tex index fa919d0acc8dc5bd0c1e4e515e4621ab74e0f436..94c5d3039a46a401c78d4e0e82291adb3ebed6cd 100644 --- a/Doc/2023/Source_latex/chapitre7.tex +++ b/Doc/2023/Source_latex/chapitre7.tex @@ -1,50 +1,50 @@ Pour la navigation spatiale, l'équipe Neurocybernétique a proposé un modèle du cerveau comprenant l'hippocampe et des boucles corticales pour contrôler un robot mobile lors de tâches de navigation visuelle. Ce modèle est basé sur : \begin{itemize} - \item L'acquisition d'informations visuelles et d'orientation à partir de l'entrée visuelle, ainsi que des données d'une boussole ou du flux optique. - \item La création de repères et d'une table d'azimuts à partir de ces données, qui imitent les processus "quoi" et "où" du cerveau. - \item La fusion de ces repères et azimuts avec l'unité SigmaPi (construction de la matrice PrPh) et la création de cellules de lieu visuelles simulées à partir de PrPh. +\item L'acquisition d'informations visuelles et d'orientation à partir de l'entrée visuelle, ainsi que des données d'une boussole ou du flux optique. +\item La création de repères et d'une table d'azimuts à partir de ces données, qui imitent les processus "quoi" et "où" du cerveau. +\item La fusion de ces repères et azimuts avec l'unité SigmaPi (construction de la matrice PrPh) et la création de cellules de lieu visuelles simulées à partir de PrPh. \end{itemize} \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 lancer ou non l'apprentissage des cellules de lieu. Ce modèle présente de bon résultats pour la navigation 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 lieux sont des neurones dont l’activité est liée à la reconnaissance d’un lieu. Dans notre cas, la reconnaissance d’un lieu se base essentiellement sur la vision. Dans le cadre du stage, la vision provient d’une caméra fixe, le drone ne possède donc pas une vision 360°, on parle plutôt de 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". \subsection{Modèle implémenté} -Pour la modélisation, le modèle \ref{fig:hippocampus} est repris. Une chaîne de traitement d’images fait ressortir des informations (points d’intérêt, azimuth…) qui nourrissent un réseau de neurones constituant les cellules de vue. En sortie, chaque cellule correspond à un neurone, à une seule image (avec les informations associées) et donc à une seule vue. +Pour la modélisation, nous avons utilisé le modèle représenté dans la Figure \ref{fig:hippocampus}. Une chaîne de traitement d'images extrait des informations telles que les points d'intérêt et les azimuts, qui alimentent un réseau de neurones formant les cellules de vue. Chaque cellule de vue correspond à un seul neurone, une seule image (avec les informations associées) et donc à une seule perspective. -Dans cette sous-partie, un exemple avec 10 cellules est présenté. +Dans cette section, nous présentons un exemple avec 10 cellules de vue.\ref{fig:view_plot_l} \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 lieux. 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, 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}% \end{figure} \subsection{Apprentissage} -L’apprentissage se fait en une seule boucle, on parle de one-shot learning. Ici, à chaque itération (chaque image), une nouvelle cellule de vue est forcée à être activée. A la présentation d’une image, les poids se mettent à jour en suivant la règle de Hebb \ref{sub:hebb}, c’est-à -dire que les neurones qui s’excitent ensemble (l’apparition des points d’intérêt sur une image par exemple ET une des cellules activée) renforcent les poids entre eux. Ainsi, une cellule de vue est bien corrélée à une image de part leur lien qui est renforcé. +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. -Par exemple, voici comment les cellules sont forcées à chaque itération à 1 (pour 5 points d’intérêt à chaque image):\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é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}. \begin{figure}[ht] \centering \includegraphics[width=0.8\textwidth]{images/capture/view_plot_l.png} -\caption[Graphique suivant l’évolution de 10 cellules pour un apprentissage de 6 images (6 itérations).]{Graphique suivant l’évolution de 10 cellules pour un apprentissage de 6 images (6 itérations). Chaque cellule apprend au maximum 5 points d’intérêt. Chaque image est à peu près espacée de 10 mètres. A chaque itération, une seule cellule est activée à la fois, les autres étant en très faible activité.}\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} -Pour le test du réseau, la mise à jour des poids est gelée et toutes les images filmées sont présentées (dont celles qui ont été apprises) au réseau de neurones. Cette fois-ci, plus de points d’intérêt (15) sont fournis aux cellules afin d’avoir plus de chance de retrouver les mêmes points que les ceux appris précédemment. +Lors du test du réseau, la mise à jour des poids est figée, et toutes les images capturées sont présentées au réseau de neurones, y compris celles qui ont été apprises précédemment. Cette fois-ci, un plus grand nombre de points d'intérêt (15) sont fournis aux cellules pour augmenter les chances de retrouver les mêmes points que ceux appris précédemment. \begin{figure}[ht] \centering @@ -52,11 +52,13 @@ Pour le test du réseau, la mise à jour des poids est gelée et toutes les imag \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}% \end{figure} -Dans le graphique \ref{fig:view_plot_t}, une différence est notée tout le long des tracés entre les 6 premières cellules et les 4 restantes. Cela veut dire que pour une image donnée, des caractéristiques communes (ciel, herbes au sol) à toutes les images ont été prises en compte dans l'apprentissage des poids 6 cellules. +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 sont remarqués exactement à l’emplacement des images apprises, ceci correspond bien aux attentes puisque c’est à ces points précis que les liens avec les cellules sont les plus forts. +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. -Le point critique est la discrimination entre les activités autour des pics, elle est très mauvaise au début, puis meilleure vers la seconde moitié du temps. Cela s’explique par l’environnement et sa richesse sur cette prise de photos. En effet, il y a peu d'objets à distinguer sur les images, l’algorithme a donc tendance à se focaliser sur les bâtiments en arrière-plan. Au début de la prise, les bâtiments sont très éloignés, l’écart à l’image des points caractéristiques est donc faible pour 10 m. Mais au fur et mesure que l’on s’approche, l'écart entre les mêmes points est plus grand pour la même distance, il est donc plus facile de distinguer la différence entre deux images (adjacentes en temps) près des bâtiments que loin. On comprend alors pourquoi les cellules 4 à 6 se distinguent sur plus de 3 m tandis que les cellules 1 à 3 ont du mal à ressortir des concurrents (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 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. + +Un exemple d'une image apprise est montré dans la Figure \ref{fig:view_test0}. \begin{figure}[ht] \centering @@ -66,7 +68,7 @@ Le point critique est la discrimination entre les activités autour des pics, el \subsection{Optimisation des paramètres} -Étant donné la difficulté dans la reconnaissance de vue dans les zones éloignées des bâtiments, il est intéressant de se pencher sur la possibilité d’amélioration du script. Pour cela plusieurs paramètres entrent en compte. Par souci de temps, nous allons chercher à optimiser un à un les paramètres dans cet ordre : \footnote{Cette partie présente le pire cas. Dans les prochaines applications, le mouvement latéral est privilégié, ce qui forcément présente de meilleures performances.} +Étant donné les défis liés à la reconnaissance des vues dans les zones éloignées des bâtiments, il est intéressant d'examiner la possibilité d'améliorer le script. Pour ce faire, plusieurs paramètres entrent en jeu. Par souci de simplicité, nous allons chercher à optimiser ces paramètres un par un, en suivant l'ordre suivant\footnote{Il convient de noter que cette section traite du scénario le plus exigeant. Dans les applications futures, le mouvement latéral est privilégié, ce qui conduit naturellement à de meilleures performances.} : \begin{itemize} \item Résolution du gradient @@ -75,11 +77,11 @@ Le point critique est la discrimination entre les activités autour des pics, el \item Nombre de points d’intérêt \end{itemize} -Il est également possible de jouer sur un meilleur jeu d’images, cependant, le but est de mesurer les performances pour le scénario suivant : reconnaître des vues dans un mouvement rectiligne (avant/arrière) avec pour seuls points de repère à plus de 100 m. +Il est également envisageable de jouer sur un meilleur jeu d’images. Cependant, l'objectif principal est de mesurer les performances dans le scénario suivant : la reconnaissance de vues dans un mouvement avant/arrière avec pour seuls points de repère à plus de 100 mètres de distance (bâtiments en arrière-plan). -\subsubsection{Métrique pour la performance} +\subsubsection{Métrique de performance} -Pour chacune des optimisations, une précision est calculée par rapport à ce qui est attendu. Simplement : nb prédiction correcte / nb total de prédiction. On en revient à un problème de classification où l’on cherche à avoir la bonne cellule de lieu/vue qui s’active au voisinage d’une vue apprise. +Pour évaluer l'efficacité de chaque optimisation, nous calculons une mesure de précision par rapport aux attentes. En d'autres termes, la précision est définie comme le nombre de prédictions correctes divisé par le nombre total de prédictions. Cette approche s'apparente à un problème de classification, où l'objectif est de déterminer la cellule de lieu/vue appropriée qui s'active à proximité d'une vue déjà apprise. \begin{figure}[ht] \centering @@ -87,15 +89,15 @@ Pour chacune des optimisations, une précision est calculée par rapport à ce q \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 minimiser les biais dans les résultats dans l’évaluation des performances du modèle, 6 \acrshort{datasets} seront évalués. Il s’agit de 6 trajectoires allant vers l’avant de manière rectiligne et de même longueur. +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. \subsubsection{Résolution du gradient} -La première étape avant d'extraire des points d'intérêt consiste à calculer le gradient de l'image. Le gradient représente la variation locale de l'intensité des pixels, mettant ainsi en évidence les contours, les transitions d'intensité et les zones d'intérêt de l'image. +La première étape avant d'extraire des points d'intérêt consiste à calculer le gradient de l'image. Le gradient représente la variation locale de l'intensité des pixels, ce qui permet de mettre en évidence les contours, les transitions d'intensité et les zones d'intérêt de l'image. -Dans notre cas, un coefficient alpha est associé au calcul du gradient de l'image en niveaux de gris. Ce coefficient influence le lissage lors du calcul du gradient, c'est-à -dire dans quelle mesure les pixels voisins sont pris en compte pour le calcul. Une valeur faible d'alpha aura tendance à lisser l'image en supprimant certains détails fins, tandis qu'une valeur plus élevée d'alpha préservera davantage de détails, mais pourrait également introduire du bruit indésirable.\ref{fig:alpha} +Dans notre cas, un coefficient $\alpha$ est utilisé pour le calcul du gradient de l'image en niveaux de gris. Ce coefficient influe sur le lissage lors du calcul du gradient, c'est-à -dire dans quelle mesure les pixels voisins sont pris en compte. Une valeur faible d'alpha aura tendance à lisser l'image en supprimant certains détails fins (moyenne sur plus de pixels voisins), tandis qu'une valeur plus élevée d'alpha préservera davantage de détails (moyenne sur quelques voisins, voire pas du tout), mais pourrait également introduire du bruit indésirable (voir Figure \ref{fig:alpha}). -Voici, le résultat sur plusieurs choix de lissage du gradient pour les 6 jeux d’images : +Le tableau ci-dessous résume les performances du modèle en fonction de différents niveaux de lissage du gradient. \begin{table} \centering @@ -116,10 +118,10 @@ Voici, le résultat sur plusieurs choix de lissage du gradient pour les 6 jeux d 10 & 47.85 & 50.82 & 61.05 & 35.24 & 38.36 & 35.27 & 44.76 \\ \hline \end{tabular} -\caption{Tableau des performances du modèle selon plusieurs lissage du gradient. Autres paramètres : $\theta1$=8.5, $\theta2$=10, r=3, R=30, nombre de points=5. $\alpha$=1.5 sera la valeur retenue pour la suite.} +\caption{Tableau des performances du modèle selon différents niveaux de lissage du gradient. Autres paramètres : $\theta1$=8.5, $\theta2$=10, r=3, R=30, nombre de points=5. $\alpha$=1.5 sera la valeur retenue pour la suite.} \end{table} -On observe en général que le modèle performe mieux avec un fort lissage du gradient (faible valeur de $\alpha$). Car en ce faisant, des structures plus robustes sont repérées plutôt de des détails qui ne restent pas longtemps dans l'images ou qui sont difficiles à redétecté dû à leur finesse. Pour détecter plus de détails de manière consistante, une caméra avec une meilleur qualité aurait été mieux adaptée, ce qui n'est pas notre cas car on cherche plus de performances latence et de rafraîchissement d'images. +En général, nous pouvons observer que le modèle performe mieux avec un fort lissage du gradient, ce qui correspond à une faible valeur de $\alpha$. En procédant ainsi, le modèle identifie des structures plus robustes plutôt que des détails éphémères qui peuvent être difficiles à détecter en raison de leur finesse. Pour capturer davantage de détails de manière constante, une caméra de meilleure qualité aurait été plus appropriée. Cependant, notre choix est motivé par la priorité donnée à la latence et au rafraîchissement d'images. \begin{figure} \centering @@ -127,15 +129,15 @@ On observe en général que le modèle performe mieux avec un fort lissage du gr \includegraphics[width=\textwidth]{images/capture/alpha.png} \end{minipage} \vfill - \begin{minipage}{0.3\textwidth} + \begin{minipage}{0.32\textwidth} \includegraphics[width=\textwidth]{images/capture/alpha_0_1.png} \end{minipage} \hfill - \begin{minipage}{0.3\textwidth} + \begin{minipage}{0.32\textwidth} \includegraphics[width=\textwidth]{images/capture/alpha_0_4.png} \end{minipage} \hfill - \begin{minipage}{0.3\textwidth} + \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} @@ -143,7 +145,7 @@ On observe en général que le modèle performe mieux avec un fort lissage du gr \subsubsection{Résolution des points d’intérêt (différence de gaussiennes)} -La différence de gaussiennes est une technique de filtrage qui permet de mettre en évidence les structures d'intérêt dans une image, comme les bords, les coins, etc. Pour ce faire, on convolue l'image avec deux filtres gaussiens différents, l'un ayant un écart-type (sigma) de theta1 et l'autre de theta2, où theta1 est plus petit que theta2. +La différence de gaussiennes est une technique de filtrage qui permet de mettre en évidence les structures d'intérêt dans une image, telles que les bords, les coins, etc. Pour ce faire, l'image est convoluée avec deux filtres gaussiens différents, l'un ayant un écart-type (sigma) de $\theta$1 et l'autre de $\theta$2, où $\theta$1 est plus petit que $\theta$2. \begin{figure} \centering @@ -155,10 +157,10 @@ 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. Notamment 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, 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} \end{figure} -Grâce la figure \ref{fig:dog} on comprend bien les rôles que jouent $\theta$1 et $\theta$2. Il est important de maintenir les deux valeurs proches entre elles, afin de garder des contours saillants. Leur taille influence donc la résolution des contours autour d'une forme, plus les $\theta$ sont grands plus les contours seront gros et inversement \footnote{Les paramètres $\theta$ sont alors directement dépendant du gradient en entrée qui influence l'épaisseur d'un trait. Une étude sur le couple $\alpha$/$\theta$ serait alors plus judicieuse, mais ne sera pas traitée dans ce stage par manque de temps.}. +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. \begin{table} \centering @@ -177,19 +179,19 @@ Grâce la figure \ref{fig:dog} on comprend bien les rôles que jouent $\theta$1 14,16 & 44.88 & 57.05 & 63.55 & 35.54 & 53.70 & 39.81 & 43.16 \\ \hline \end{tabular} -\caption{Tableau des performances du modèle selon plusieurs tailles de gaussiennes. Autres paramètres : $\alpha$=1.5, r=3, R=30, nombre de points=5. $\theta1$=12, $\theta2$=14 seront les valeurs retenues pour la suite.} +\caption{Tableau des performances du modèle pour différentes tailles de gaussiennes. Autres paramètres : $\alpha$=1.5, r=3, R=30, nombre de points=5. $\theta1$=12, $\theta2$=14 seront les valeurs retenues pour la suite.} \end{table} \subsubsection{Taille d’une vignette pour chaque point d’intérêt et sa résolution} -Une fois les points d'intérêt extraits après la convolution par la DOG, on s'intéresse à la taille des vignettes à apprendre par le réseau de neurones. Ces vignettes sont transformées par une transformation log-polaire. Cela consiste à convertir les coordonnées cartésiennes des pixels d'une image en coordonnées log-polaires. En découlent alors des propriétés intéressantes : +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 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} -Une vignette est caractérisée par deux cercle de rayons r et R. R est le rayon du cercle contenant la vignette, r est le rayon d'exclusion. En raison de la transformée log-polaire, plus on se situe proche du centre de la vignette, plus la résolution est élevée. De ce fait, il n'est pas pertinent de garder des informations du centre de la vignette qui ne seront que sous le pixel, d'où l'introduction d'un rayon d'exclusion r.\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 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} \begin{figure} \centering @@ -207,7 +209,7 @@ Une vignette est caractérisée par deux cercle de rayons r et R. R est le rayon \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} \end{figure} -Tout le long de cette étude, une résolution pour la transformée log-polaire est calculée pour chaque couple r, R de sorte à couvrir au moins la moitié de la résolution en pixel. Par exemple, si la résolution en pixels est de 50 pixels, alors la résolution pour la transformée sera de 5*5. +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. \begin{table} \centering @@ -228,14 +230,14 @@ Tout le long de cette étude, une résolution pour la transformée log-polaire e 10,100 & 64.38 & 46.88 & 67.29 & 31.93 & 40 & 31.07 & 46.92 \\ \hline \end{tabular} -\caption{Tableau des performances du modèle selon plusieurs tailles de vignette. Autres paramètres : $\alpha$=1.5, $\theta1$=12, $\theta2$=14, nombre de points=5. r=7, R=70 seront les valeurs retenues pour la suite.} +\caption{Tableau des performances du modèle pour différentes tailles de vignettes. Autres paramètres : $\alpha$=1.5, $\theta1$=12, $\theta2$=14, nombre de points=5. r=7, R=70 seront les valeurs retenues pour la suite.} \end{table} \subsubsection{Nombre de points d’intérêt} -Il peut être intéressant de jouer sur le nombre de points d'intérêt à apprendre pour chaque image. Cependant, il faut noter que plus de points ne veut pas forcément dire meilleure reconnaissance. En effet, les points supplémentaires peuvent être portés sur des détails plutôt qu'une forme générale intéressante. Ce qui aurait alors pour conséquence une difficulté à reconnaître une vue même en étant légèrement décalé. +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. -Une solution serait d'augmenter également le nombre de points en test afin d'avoir plus de chance de retrouver les points appris. Cependant, cela a un coup en temps de calcul. Dans notre cas, le maximum de points est de 20 afin de maintenir une fréquence de 8 Hz (proche de la limite du cahier des charges). +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. \begin{table} \centering @@ -259,12 +261,12 @@ Une solution serait d'augmenter également le nombre de points en test afin d'av 15 & 20 & 44.59 & 59.34 & 75.41 & 27.87 & 56.06 & 45.90 & 51.53 \\ \hline \end{tabularx} -\caption{Tableau des performances du modèle selon plusieurs lissages du gradient. Autres paramètres : $\alpha=1.5$, $\theta_1=12$, $\theta_2=14$, $r=7$, $R=70$. Pour la suite, on va rester sur 5 points.} +\caption{Tableau des performances du modèle pour différents nombres de points en apprentissage et en test. Autres paramètres : $\alpha=1.5$, $\theta_1=12$, $\theta_2=14$, $r=7$, $R=70$. Pour la suite, nous conservons 5 points en apprentissage.} \end{table} \section{Script n°2 : Détection et suivi d'objet} -Le script de détection d'objet reprend le modèle des cellules de vue optimisé, et ajoute la possibilité d'associer des points d'intérêts à un objet. Une fois un objet appris, les points lui appartenant forment alors un nuage dont le barycentre est la coordonnée en (x,y) de la position de l'objet. Dans ce script, on suit l'objet latéralement : si l'objet est au centre, le drone reste immobile. Si l'objet traqué est à droite, le drone va tenter de bouger à droite pour se recentrer. +Le script de détection d'objet reprend le modèle des cellules de vue optimisé, et ajoute la possibilité d'associer des points d'intérêts à un objet. Une fois qu'un objet est appris, les points d'intérêt qui lui appartiennent forment un nuage, dont le barycentre représente la position de l'objet en (x, y). Dans ce script, nous effectuons un suivi latéral de l'objet : si l'objet est centré, le drone reste immobile. Si l'objet suivi se déplace vers la droite, le drone tente de se recentrer en se déplaçant vers la droite.\ref{fig:tracking} \begin{figure} \centering @@ -275,9 +277,21 @@ 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. A gauche, un rectangle rouge sélectionne les points d'intérêt autour du feutre, cela va déclencher l'apprentissage des cellules et leur association à un objet (ici, le feutre). A droite, l'apprentissage est effectué, le feutre est déplacé à droite et le marqueur "Objet\_1" suit bien la position. Juste en dessous, une commande en y de 0.93 est envoyée demandant donc au drone de déplacer à droite.}\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} + \centering + \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} \end{figure} +\subsubsection{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} + \section{Script n°3 : Association sensori-motrice} Dans cette partie il s'agit d'une application concrète de l'architecture PerAc. L'idée est d'associer le contrôle de la boussole aux cellules de vue afin de reproduire un comportement similaire à l'asservissement de l'orientation. \ref{fig:perac_joy} @@ -287,12 +301,26 @@ 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]{Association sensori-motrice. En entrée, la boussole est décomposée en un vecteur de neurone. Le vecteur est ensuite lié directement 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, d'ailleurs le vecteur d'association réalise un apprentissage LMS. Ainsi les poids associés aux cellules apprennent la valeur actuelle de la boussole. Joystick nous sert à enclencher l'apprentissage des cellules mais aussi de l'association boussole / cellules. Enfin, lorsque l'association est terminée, la partie boussole peut être retirée, on peut alors observer le comportement en sortie du bloc LMS et voir si cellules ont effectivement appris les bonnes valeurs de boussole. On peut alors utiliser cette valeur de boussole comme orientation désirée dans l'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à , 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} \end{figure} -\section{Discussion de l'angle d'ouverture de la caméra} +\begin{figure} + \centering + \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} +\end{figure} + +\subsubsection{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. + +Il est également important de noter que la performance du script diminue lorsque les cellules de vues apprises sont espacées de plus de 10 mètres. Cela affecte sa capacité à distinguer efficacement entre différents lieux. Pour plus de détails sur la raison : (\ref{sec:discussion}). + +\section{Discussion de l'angle d'ouverture de la caméra}\label{sec:discussion} -Comme observé dans les précédentes expériences, la vision de la caméra est très vaste avec un angle d'ouverture de plus de 130° (calcul en annexe \ref{chap:angle}). Dû à cet angle, il est difficile pour un objet éloigné en mouvement de remarquer les variations de pixels. Cela a donc un impact sur flot optique qui est réduit, mais aussi sur la capacité à différencier des vues proches. A l'inverse, l'angle est trop faible pour pouvoir apprendre des cellules de lieu qui nécessitent au moins une vision sur 270°. +Comme observé dans les expériences précédentes, la vision de la caméra est très étendue, avec un angle d'ouverture de plus de 130° (calcul en annexe \ref{chap:angle}). En raison de cet angle, il est difficile pour un objet éloigné en mouvement de provoquer des variations de pixels perceptibles. Cela a donc un impact sur le flot optique qui est réduit, mais limite également la capacité à distinguer des vues rapprochées. En revanche, l'angle est trop étroit pour permettre l'apprentissage de cellules de lieu, qui requièrent au moins un champ de vision de 270°. \begin{figure} \centering @@ -310,9 +338,9 @@ Comme observé dans les précédentes expériences, 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 à la caméra. Les deux études portent sur des variations de 10 m. Pour le haut, très rapidement la taille d'un humain de 2 m quasiment plus à la caméra après 30 m. Au delà , trop peu de pixels restent pour traiter un objet de taille humaine dans le cas de détection d'objet. Pour le bas, la variation est de l'ordre du pixel après 200 m. Il devient alors difficile de distinguer la différence entre deux prise de vue espacée de 10 M 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, 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} \end{figure} \ref{fig:angle_plot} -Le choix d'un telle lentille a donc eu définitivement un impact sur les expériences. Il pourrait être intéressant de réfléchir à un remplacement de lentille/caméra pour un angle plus aigu, ou bien octroyer la capacité à la caméra de tourner sur plusieurs axes (monture sur un servomoteur par exemple) afin de capturer tout un panorama. \ No newline at end of file +Le choix d'une telle lentille a donc eu définitivement un impact sur les expériences. Il pourrait être intéressant de réfléchir à un remplacement de la lentille/caméra pour un angle plus aigu, ou bien d'octroyer la capacité à la caméra de tourner sur plusieurs axes (par exemple, une monture pan-tilt) afin de capturer un panorama plus large. diff --git a/Doc/2023/Source_latex/chapitre8.tex b/Doc/2023/Source_latex/chapitre8.tex index 1a3ebbe506ee584a9f54242cb2276d6fe649903e..1cd06c78bd81939689e2d203f5c8c814b6644b3e 100644 --- a/Doc/2023/Source_latex/chapitre8.tex +++ b/Doc/2023/Source_latex/chapitre8.tex @@ -1,31 +1,33 @@ \section{Synthèse} -Pour résumer, le projet s’est déroulé en trois phases, chacune étant essentielle à la réalisation du projet. La première phase implique la remise en fonctionnement du drone tant au niveau hardware que la communication. La deuxième phase se concentre sur l'étude des performances du drone et du respect du cahier des charges, notamment sur l'aspect temps-réel. Enfin, la troisième partie a permis la mise en place de scripts algorithmiques de navigation du flot optique aux cellules de vue. +Pour résumer, le projet s’est déroulé en trois phases, chacune étant essentielle à la réalisation du projet. La première phase implique la remise en fonctionnement du drone tant au niveau hardware que de la communication. La deuxième phase se concentre sur l'étude des performances du drone et sur le respect du cahier des charges, notamment en ce qui concerne l'aspect temps réel. Enfin, la troisième partie a permis la mise en place de scripts algorithmiques de navigation, du flot optique aux cellules de vue. -En somme, ces phases ont permis de montrer la faisabilité d'un tel système. +En somme, ces phases ont permis de démontrer la faisabilité d'un tel système. \section{Difficultés rencontrées et améliorations possibles} -Au cours de la période du stage, le projet n'aura pas été exempt de défauts. La première critique serait sur la caméra. Comme mentionnée précédemment, elle possède un angle trop grand pour des applications de suivi mais trop faible pour des applications de reconnaissance de lieux. Une solution serait de soit changer la lentille ou bien d'ajouter à la caméra la capacité de s'articuler afin d'obtenir une vue panoramique.\\ +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.\\ -Le drone étant un véhicule assez dangereux, il est arrivé plusieurs fois que le drone fasse des chutes auto-destructrices. Souvent, il fallait alors changer les composants défectueux ou en racheter. Il faut donc retenir à l'avenir que ce type de système nécessite toujours de pièces de rechanges.\\ +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}}.\\ -Un autre critique est à faire sur le choix des batteries. En effet bien que les batteries LiPo à 3 cellules (11.1V) suffisent pour le fonctionnement du drone, elle sont en réalité légèrement sous dimensionnées. Pour un test de 10 min., une batterie 11.1V 6000mAh n'est plus en mesure de fournir assez de tension, tandis qu'elle est encore à 50 \% de sa capacité. A l'avenir, il serait potentiellement plus judicieux d'opter pour une batterie LiPo à 4 cellules (14.8V).\\ +É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.\\ -Le temps aura également un facteur critique durant le stage. Certains études de performance se sont vue écourtée au profit d'autre. Notamment le script n°3 qui n'est encore qu'en phase de test, et qui donc n'a pas pu fournir de résultats.\\ +Une autre critique concerne le choix des batteries. En effet, bien que les batteries LiPo à 3 cellules (11.1V) soient suffisantes pour le fonctionnement du drone, elles sont en réalité légèrement sous-dimensionnées. Pour un test de 10 minutes, une batterie 11.1V 6000mAh n'est plus en mesure de fournir suffisamment de tension, même si elle est encore à 50 \% de sa capacité. À l'avenir, il serait potentiellement plus judicieux d'opter pour une batterie LiPo à 4 cellules (14.8V).\\ -Un point non mentionné dans ce rapport (mais visible dans le Gantt\ref{fig:gantt}) est l'abandon de l'utilisation du simulateur de vol AirSim. Dû à l'abandon par les développeur eux-même, et l'incompatibilité de versions entre les OS, il est devenu très difficile de faire fonctionner ce simulateur. Il est encore une fois question d'une contrainte de temps qui empêchait l'exploitation de cette piste qui aurait pu s'avérer très utile pour diminuer les crash de drones.\\ +Le temps a également été un facteur critique pendant le stage. Certaines études de performance ont été écourtées au profit d'autres. Notamment, le script n°3 est encore en phase de test, et n'a donc pas pu fournir de résultats.\\ -Autre point sur les scripts déployés, ils sont dans le cadre de ce stage relativement peu complexe (mouvement latéral uniquement, ou bien rotation uniquement). Un piste intéressant serait d'ajouter une information supplémentaire dans la modélisation de l'hippocampe qui est l'élévation. Avec cet élévation, une navigation 3D serait envisageable en ajoutant un axe vertical.\\ +Un point non mentionné dans ce rapport (mais visible dans le Gantt, référence \ref{fig:gantt}) est l'abandon de l'utilisation du simulateur de vol AirSim. En raison de l'abandon par les développeurs eux-mêmes et de l'incompatibilité des versions entre les OS, il est devenu très difficile de faire fonctionner ce simulateur. Il s'agit d'une autre victime de la contrainte de temps qui a empêché l'exploitation de cette piste, qui aurait pu s'avérer très utile pour réduire les crashs de drones.\\ -Enfin, un dernier point méritant qu'on s'y penche dessus, est le fonctionnement du couple caméra flot optique / capteur ultrason. Ces capteurs très performants s'avèrent possiblement être une amélioration du drone. Les inclure pour faire fonctionner en tandem avec les capteurs déjà présents serait une tâche à considérer, il serait dommage de s'en priver.\\ +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.\\ \section{Bilan des compétences acquises} -La réalisation de ce projet m’a permis d’acquérir des compétences techniques et transversales.\\ +La réalisation de ce projet m'a permis d'acquérir des compétences techniques et transversales.\\ -Tout d'abord, j'ai eu l'occasion de consolider mes connaissances en matière de réseau de neurones, notamment leur connexion avec les modèles biologiques. Le développement de solutions pour le programme fly\_monitor en C++, sous l’environnement Linux, s’est avérée être une compétence très bénéfique pour mon future parcours.\\ +Tout d'abord, j'ai eu l'occasion de consolider mes connaissances en matière de réseaux de neurones, notamment leur relation avec les modèles biologiques. Le développement de solutions pour le programme fly\_monitor en C++, sous l'environnement Linux, s'est avéré être une compétence très bénéfique pour mon parcours futur.\\ -J'ai pu également renforcé mes connaissances en électronique grâce aux contacts quotidiens avec les composants déployés pour le système, sans oublier mes compétences manuelles pour souder et monter le drone.\\ +J'ai également renforcé mes connaissances en électronique grâce aux contacts quotidiens avec les composants déployés pour le système, sans oublier mes compétences manuelles pour souder et monter le drone.\\ -Enfin, j'ai pu développer ma rigueur et mon autonomie lors de la prise de connaissance des travaux réalisés au sein d'ETIS et la préparation des test de vol pour assurer la sécurité, en particuliers lors de la manipulation d'un véhicule potentiellement dangereux.\\ +Enfin, j'ai pu développer ma rigueur et mon autonomie lors de la prise de connaissance des travaux réalisés au sein d'ETIS et la préparation des tests de vol pour assurer la sécurité, en particulier lors de la manipulation d'un véhicule potentiellement dangereux.\\ diff --git a/Doc/2023/Source_latex/images/capture/control_time.png b/Doc/2023/Source_latex/images/capture/control_time.png new file mode 100644 index 0000000000000000000000000000000000000000..15ec40d55cf0d84a27f4b8d65d8b28a71356ac93 Binary files /dev/null and b/Doc/2023/Source_latex/images/capture/control_time.png differ diff --git a/Doc/2023/Source_latex/images/capture/flot_left.png b/Doc/2023/Source_latex/images/capture/flot_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c24e6f6325fed86c1ee57d2a494acc8821b4f8ae Binary files /dev/null and b/Doc/2023/Source_latex/images/capture/flot_left.png differ diff --git a/Doc/2023/Source_latex/images/capture/flot_right.png b/Doc/2023/Source_latex/images/capture/flot_right.png new file mode 100644 index 0000000000000000000000000000000000000000..1a971cca022df7ae60a63cd5f40ffbb9daa1c1e3 Binary files /dev/null and b/Doc/2023/Source_latex/images/capture/flot_right.png differ diff --git a/Doc/2023/Source_latex/images/capture/tracking_time.png b/Doc/2023/Source_latex/images/capture/tracking_time.png new file mode 100644 index 0000000000000000000000000000000000000000..00975a001782c925cf095ed84dbe0785fa0dffa3 Binary files /dev/null and b/Doc/2023/Source_latex/images/capture/tracking_time.png differ diff --git a/Doc/2023/Source_latex/images/capture/vpc_time.png b/Doc/2023/Source_latex/images/capture/vpc_time.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9d3db81266ef17c4d31199632bbe051763b5ea Binary files /dev/null and b/Doc/2023/Source_latex/images/capture/vpc_time.png differ diff --git a/Doc/2023/Source_latex/images/schema/alt_control.png b/Doc/2023/Source_latex/images/schema/alt_control.png new file mode 100644 index 0000000000000000000000000000000000000000..72f4f879abb9beccfc61bbd54159ea26771c867b Binary files /dev/null and b/Doc/2023/Source_latex/images/schema/alt_control.png differ diff --git a/Doc/2023/Source_latex/images/schema/compass_control.png b/Doc/2023/Source_latex/images/schema/compass_control.png new file mode 100644 index 0000000000000000000000000000000000000000..b70ce6cfbd433ff51394106115792c4829c0249e Binary files /dev/null and b/Doc/2023/Source_latex/images/schema/compass_control.png differ diff --git a/Doc/2023/Source_latex/images/schema/flow.png b/Doc/2023/Source_latex/images/schema/flow.png index 4c58560c485002c7704fad536ab3afcec575d8cb..85b890ab40d9e8e64f61664c5aab71384aef64a8 100644 Binary files a/Doc/2023/Source_latex/images/schema/flow.png and b/Doc/2023/Source_latex/images/schema/flow.png differ diff --git a/Doc/2023/Source_latex/rapport.tex b/Doc/2023/Source_latex/rapport.tex index d44629d7f06dd07b5b4bb0cb427251bafd5607a0..46e1ccf2d5901a656d7295eb8244b968d05c701b 100644 --- a/Doc/2023/Source_latex/rapport.tex +++ b/Doc/2023/Source_latex/rapport.tex @@ -5,7 +5,7 @@ \documentclass[a4paper, oneside, 12pt, final]{extreport} \usepackage{graphicx} -\parindent 0cm +%\parindent 0cm \usepackage{makeidx} \makeindex @@ -117,7 +117,7 @@ \usepackage[acronym,toc,section=chapter]{glossaries} \makeglossaries -\renewcommand{\acronymname}{Lexique} +\renewcommand{\acronymname}{Glossaire} \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} @@ -307,7 +307,6 @@ Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leu \label{chap:general_introduction} \input{introduction.tex} - \chapter{Contexte et cadre}% \label{chap:chapterone} \input{chapitre1.tex} @@ -324,15 +323,15 @@ Pour finir, je remercie le secrétariat Virginie Laizet et Aude Marquet pour leu \label{chap:4} \input{chapitre4.tex} -\chapter{Script n°0 : Asservissement} +\chapter{Asservissement} \label{chap:5} \input{chapitre5.tex} -\chapter{Script n°1 : Asservissement visuel} +\chapter{Asservissement visuel simple} \label{chap:6} \input{chapitre6.tex} -\chapter{Script n°2 \& n°3 : Les modèles neuronaux} +\chapter{Asservissement visuel avec des modèles neuronaux} \label{chap:7} \input{chapitre7.tex} diff --git a/Doc/2023/Support_PFE_YANG_Stephane.pptx b/Doc/2023/Support_PFE_YANG_Stephane.pptx index c7b3fb395f53208163f6b4b719460439c52fea5f..4516d58937d965ba8de94c5d48d8491eb8d365a2 100644 Binary files a/Doc/2023/Support_PFE_YANG_Stephane.pptx and b/Doc/2023/Support_PFE_YANG_Stephane.pptx differ