Skip to content
Snippets Groups Projects
Commit be6d38f6 authored by simon.fanetti's avatar simon.fanetti
Browse files

doc

parent c12b034e
Branches
No related tags found
No related merge requests found
Showing
with 723 additions and 87 deletions
File added
% !TeX spellcheck = fr_FR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %
%% HEPIA BACHELOR ABSTRACT LATEX TEMPLATE %
%% version 0.10 - 2020/04/25 % %
%% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% To fill up by the student
\newcommand{\Session}{Printemps 2020}
\newcommand{\Author}{Simon FANETTI}
\newcommand{\Professor}{Paul ALBUQUERQUE et Adrien LESCOURT}
\newcommand{\Client}{Aucun}
\newcommand{\Convention}{non}
\newcommand{\Confidentiel}{non}
\input{config/conf}
%\usepackage{showframe} % Prints document frame
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DOCUMENT STARTS BELOW %%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\chapter*{Résumé}
%% HEADER IMAGES
\tikz[remember picture,overlay] \node[shift={(4.655cm,-1.95cm)}] at (current page.north west)
{\includegraphics[width=5.86cm,height=3.31cm]{template/images/title/hepia_logo}};
\begin{spacing}{0.956}
\vspace{0.5cm}
%% CONTENT STARTS HERE
La création de maquettes physiques de terrains par les architectes paysagistes est un processus nécessaire lors de la réalisation de projet d’aménagement de territoire. Cependant, ces maquettes basées sur des matériaux comme le carton ou le bois, ne leur permettent pas de les modifier en cas de changements dans leur projets. C’est pourquoi nous proposons de substituer leurs maquettes par la technologie du bac à sable, qui leur permettra de vivre une expérience de réalité augmentée. Grâce aux projections d'images sur le bac, tenant compte de la topologie de celui-ci, les architectes paysagistes pourront modeler leur terrains dans le sable et avoir un rendu direct des aménagements, laissant place aux changements à tout instant. Toutefois, la création d’applications permettant ceci est pour le moment irréalisable, car aucune interface ne permet d’utiliser cette infrastructure. Après avoir reproduit l’infrastructure nécessaire au projet, constituée d’un bac à sable, d’une caméra de profondeur Intel RealSense, d’un beamer et d’un PC sous distribution Linux, nous avons commencé à développer notre interface C++ permettant son utilisation. Afin de permettre une flexibilité lors de l’installation de l’infrastructure, nous avons développé une API de calibration permettant l’obtention des paramètres nécessaires à la compensation de l’infrastructure permettant une expérience de réalité augmentée cohérente. De plus, une application de calibration basée sur cette API, permet à l’utilisateur de suivre la procédure de manière guidée et adaptée à différents environnements. Elle permet notamment de générer la configuration regroupant nos différents paramètres liés à l’infrastructure et est utilisée par notre API d’utilisation, qui a été développée par la suite. Cette API couplée à la configuration générée, permet l’utilisation du bac et finalement l’interface nécessaire aux développeurs permettant la création d’applications en réalité augmentée. C’est pourquoi finalement, nous avons développé une application affichant les niveaux du bac en couleurs.
\vfill
\begin{center}
{\includegraphics[scale=0.32]{template/images/abstract/image}}\\*
\vfill
%% CONTENT ENDS HERE
{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%% DO NOT MODIFY THE TABLE BELOW %%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular*}{16cm}{p{7.59cm} p{7.58cm}}
\small Candidat-e: & \small Professeur-e(s) responsable(s):\\*[10pt]
\small\textbf{\textsc{\Author}} & \small\textbf{\textsc{\Professor}}\\*[10pt]
\footnotesize Filière d’études : ITI & \footnotesize \textbf{En collaboration avec:} -\\*[10pt]
\footnotesize {} & \footnotesize Travail de bachelor soumis à une convention de stage en entreprise: \Convention\\*[20pt]
\footnotesize {} & \footnotesize Travail soumis à un contrat de confidentialité: \Confidentiel\\*[10pt]
\end{tabular*}\\*[1.9cm]
}
\end{center}
\end{spacing}
\end{document}
\documentclass[12pt]
{report} % Set document to report class
\usepackage[T1]
{fontenc} % Font enconding
\usepackage[utf8]
{inputenc} % Set input encoding to utf-8, thus allow for non-ASCII characters
\usepackage[french]
{babel} % set document to default language to french
\usepackage[cm]
{fullpage} % Set margins to full page
\usepackage[a4paper,includehead,headheight=24pt,left=2.5cm, right=2.5cm, bottom=2.5cm, top=1.26cm]
{geometry} % Configure document geometry
\usepackage{tikz} % Image and drawing related package
\usepackage{helvet} % Helvetica font ~ Arial
\usepackage{mathptmx} % Times font ~ Times New Roman
\usepackage[sfmath,notextcomp]{kpfonts} % Calibri replacement, font is \sf
\usepackage[scaled=0.85]
{beramono} % Vera mononspace {fvm}
\usepackage {berasans} % Vera sans {fvs}
%% This defines the default sans serif, roman and monospace fonts
\renewcommand{\sfdefault}
{phv} % helvetica as sans serif font
\renewcommand{\rmdefault}
{ptm} % times as roman (serif) font
\renewcommand{\ttdefault}
{fvm} % Vera mononspace as monospace font
\usepackage{bold-extra} % Allow custom typsettings horrors like bold Small Caps
\usepackage{slantsc} % Allow custom typsettings horrors like slanted Small Caps
\usepackage{numprint} % number notation related package, e.g 10'000'000
\usepackage{setspace} % linespacing related package
\usepackage{lipsum} % Lorem Ipsum generator
%\usepackage{showframe} % Print document frame
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CUSTOM HEADER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\fancyhf{}
\fancypagestyle{plain}{
\fancyhf{}%
\fancyhead[L,C]{}
\fancyhead[R]{\fontsize{11pt}{12.4pt} \sf \textbf{\\*\Session\\*[1.2pt]Session de bachelor}}
\fancyfoot[L,C,R]{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CUSTOM CHAPTER TITLES %%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{titlesec}
\titleformat{\chapter}[hang]{\centering \bfseries\scshape\Large}{\thechapter.}{1pc}{}
\titleformat{name=\chapter,numberless}[hang]{\fontsize{15.5}{18.7}\centering\bfseries\scshape}{}{1pc}{}
\titlespacing{\chapter}{0pt}{3em}{-12pt}
\ No newline at end of file
enonce-resume/template/images/abstract/image.png

438 KiB

enonce-resume/template/images/title/hepia_logo.jpg

10.5 KiB

File added
enonce-resume/template/images/title/hes-so_geneve_logo.png

64.7 KiB

This diff is collapsed.
enonce-resume/template/images/title/image.png

8.23 KiB

File added
...@@ -12,6 +12,9 @@ ...@@ -12,6 +12,9 @@
]{report} %% should use memoir documentclass ]{report} %% should use memoir documentclass
\input{config/thesis} \input{config/thesis}
\usepackage[style=iso-authoryear]{biblatex}
\addbibresource{biblio/sandbox.bib}
%% To fill up by the student %% To fill up by the student
\newcommand{\Author}{Simon FANETTI} \newcommand{\Author}{Simon FANETTI}
\newcommand{\TitleImage}{template/images/title/title} \newcommand{\TitleImage}{template/images/title/title}
...@@ -52,19 +55,14 @@ ...@@ -52,19 +55,14 @@
\end{spacing} \end{spacing}
%\clearpage %\clearpage
\cleardoublepage \cleardoublepage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEDICATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TABLE OF CONTENT %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TABLE OF CONTENT %%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{spacing}{1} \begin{spacing}{1}
\input{chapters/globaltoc} \input{chapters/globaltoc}
\end{spacing} \end{spacing}
%\clearpage %\clearpage
\cleardoublepage \cleardoublepage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEDICATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{spacing}{1.5}
\input{chapters/dedication}
%\clearpage
\cleardoublepage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ACKNOWLEDGEMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ACKNOWLEDGEMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{spacing}{1.5}
\input{chapters/acknowledgements} \input{chapters/acknowledgements}
%\clearpage %\clearpage
\cleardoublepage \cleardoublepage
...@@ -106,8 +104,8 @@ ...@@ -106,8 +104,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CHAPTERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CHAPTERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Add your chapters here %%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Add your chapters here %%%%%%%%%%%%%%%%%%%%%%%%%
%\input{chapters/chapXXX} %\input{chapters/chapXXX}
\input{chapters/content/dispositif}
\input{chapters/content/existant} \input{chapters/content/existant}
\input{chapters/content/dispositif}
\input{chapters/content/besoins} \input{chapters/content/besoins}
\input{chapters/content/architecture} \input{chapters/content/architecture}
\input{chapters/content/technologies} \input{chapters/content/technologies}
......
This diff is collapsed.
...@@ -4,13 +4,7 @@ ...@@ -4,13 +4,7 @@
\addcontentsline{toc}{chapter}{Résumé} % Adding toc entry \addcontentsline{toc}{chapter}{Résumé} % Adding toc entry
\thispagestyle{noheader} \thispagestyle{noheader}
\vspace{118pt} \begin{figure}[H]
\centering
\begin{center} \includegraphics[scale=0.8]{resume.jpg}
{\Large < Insérez ici la page d’énoncé complété et signé\\*[-0.8em] \end{figure}
par l’enseignant-e responsable (cf. feuille de style fournie) >\\*[1em]
(obligatoire)\\*[1em]
\textit{Attention : Tout l’énoncé doit tenir sur une seule page}}
\end{center}
\ No newline at end of file
...@@ -2,4 +2,4 @@ ...@@ -2,4 +2,4 @@
\chapter*{Remerciements} % No (numbered) toc entry with * \chapter*{Remerciements} % No (numbered) toc entry with *
\addcontentsline{toc}{chapter}{Remerciements} % Adding toc entry \addcontentsline{toc}{chapter}{Remerciements} % Adding toc entry
\textit{< Formulez ici vos remerciements aux personnes qui vous ont aidé dans la réalisation de votre travail. >} Je remercie M. Paul Albuquerque, M. Adrien Lescourt et M. Pierre Kunzli de m'avoir suivi tout au long de ce projet.
\ No newline at end of file
% !TeX spellcheck = fr_FR % !TeX spellcheck = fr_FR
\printnoidxglossary[type=\acronymtype,title={Liste de acronymes}] \printnoidxglossary[type=\acronymtype,title={Liste de acronymes}]
% Use the acronyms
\vspace{5cm}
\textit{NB : Vous pouvez utiliser des acronymes en les définissant dans le fichier externe \texttt{/glossary/acronyms}. Une page dans la table des matières sera automatiquement ajoutée. Vous pourrez ensuite les référencer dans votre texte comme dans l'exemple ci-après:}\medskip
\gls{utc} is 3 hours behind \gls{adt} and 10 hours ahead of \gls{est}.\medskip
\textit{Lors de la première déclaration, l'acronyme est accompagné de sa définition, mais lors des utilisations suivantes, il ne l'est plus, comme illustré ci-dessous:}\medskip
\gls{utc} is 3 hours behind \gls{adt} and 10 hours ahead of \gls{est}.
\ No newline at end of file
...@@ -6,25 +6,34 @@ ...@@ -6,25 +6,34 @@
%%% /COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES %%% /COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES
\chapter*{Annexes} \chapter*{Annexes}
\begin{center}
\textit{Imprimer idéalement cette page sur une page de couleur.}
\textit{Chaque annexe doit commencer sur une nouvelle page et doit être numérotée : Annexe 1 puis Annexe 2, etc.}
\end{center}
\chapter*{Annexe 1 : Arborescence Gperftools}
\chapter*{Annexe 1} \addcontentsline{toc}{chapter}{Annexe 1 : Arborescence Gperftools}
\addcontentsline{toc}{chapter}{Annexe 1} \begin{figure}[H]
\centering
\includegraphics[scale=0.32]{gperftools_graph.jpg}
\chapter*{Annexe 2} \end{figure}
\addcontentsline{toc}{chapter}{Annexe 2}
\chapter*{Annexe 2 : Interface Valgrind}
\addcontentsline{toc}{chapter}{Annexe 2 : Interface Valgrind}
\chapter*{Annexe 3} \begin{figure}[H]
\addcontentsline{toc}{chapter}{Annexe 3} \centering
\includegraphics[angle=90,scale=0.4]{valgrind.png}
\end{figure}
\chapter*{Annexe 3 : Exemple d'utilisation de la librairie}
\addcontentsline{toc}{chapter}{Annexe 3 : Exemple d'utilisation de la librairie}
\begin{figure}[H]
\centering
\includegraphics[scale=0.6]{exemple_code_main.png}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{exemple_code_display_levels.png}
\end{figure}
%%% COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES %%% COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES
\stopcontents[annexes] \stopcontents[annexes]
\resumecontents[default] \resumecontents[default]
%%% /COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES %%% /COMMENT THESES LINES IF YOU DO NOT USE DEDICATED TOC FOR ANNEXES
\ No newline at end of file
% !TeX spellcheck = fr_FR
\chapter{Architecture logicielle} \chapter{Architecture logicielle}
\section{Librairies} \section{Librairies}
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.5]{archi_sandbox_api.jpg} \includegraphics[scale=0.6]{archi_sandbox_api.jpg}
\caption{Relations entre les classes de l'\gls{api}}
\label{fig:archi_archi_sandbox_api}
\end{figure} \end{figure}
Dans cette architecture, les classes sont assez représentatives de l'infrastructure réelle. Nous avons \textit{Beamer} qui représente les informations liées au vidéoprojecteur et méthodes liées à l'étape de calibration. Elle contient aussi FrameProcessProfil, qui est un profil contenant des informations liées au traitement d'images et est utilisé lors de configuration de la librairie. \textit{Camera} est l'interface utilisant la librairie realsense 2, permettant l'utilisation de la camera Intel. Elle est notamment utilisée par Beamer. Dans cette architecture, les classes sont assez représentatives de l'infrastructure réelle. Nous avons \textit{Beamer} qui représente les informations liées au vidéoprojecteur utilisé et les méthodes spécifiques au beamer liées à l'étape de calibration. Elle contient aussi \textit{FrameProcessProfil}, qui est un profil contenant des informations liées au traitement d'images et est utilisé lors de la calibration. \textit{Camera} est l'interface utilisant la librairie realsense 2 \parencite{noauthor_intel_nodate}, permettant l'utilisation de la camera d'Intel. Elle est notamment utilisée par \textit{Beamer} lors de la calibration et par \textit{Projection} lors de l'utilisation.
\\ \\
Ensuite nous avons Projection, qui contient les traitements nécessaires à appliquer à une image projetée. Puis il y a SandboxConfig, qui est une classe permettant de lire et écrire les informations liées à la configuration de la librairie dans un fichier yaml. Ensuite nous avons \textit{Projection}, qui contient les traitements nécessaires à appliquer à une image projetée. Puis il y a \textit{SandboxConfig}, qui est une classe permettant de lire et écrire les informations liées à la configuration de la librairie dans un fichier.
\\ \\
Enfin nous avons les interfaces de la librairie sandbox, respectivement Sandbox pour les applications utilisateur et SandboxSetup pour les applications permettant génération de la configuration utilisée par Sandbox. Enfin nous avons les interfaces de la librairie, respectivement \textit{Sandbox} correspondant à la librairie d'utilisation permettant de développer les applications utilisateur et \textit{SandboxSetup} correspondant à la librairie de calibration et permettant de développer les applications de calibration qui généreront la configuration utilisée par \textit{Sandbox}.
\section{API Sandbox} \section{Librairie d'utilisation}
Sandbox instancie Camera, Beamer et Projection et fait le lien entre le tout. Elle va s'occuper de fournir de quoi initlialiser la camera et charger la configuration. Elle fournira les méthodes permettant de récupérer les images de profondeur et de couleur de la camera adaptées à la zone d'affichage du vidéoprojecteur, et de quoi ajuster une image à projeter sur le bac à sable. La librairie d'utilisation, aussi appelée \textit{Sandbox} instancie \textit{Camera}, \textit{Beamer} et \textit{Projection} et fait le lien entre le tout. Elle va s'occuper de fournir de quoi initlialiser la caméra et charger la configuration. Elle fournira les méthodes permettant de récupérer les images de profondeur et de couleur de la caméra adaptées à la zone d'affichage du beamer, et de quoi ajuster une image à projeter sur le bac à sable, qui tiendra compte de la position du beamer, de sa rotation par rapport à la caméra, ainsi que de sa distance avec le sommet du bac à sable.
\section{API SandboxSetup} \section{Librairie de calibration}
SandboxSetup instancie aussi Camera, Beamer et Projection et permet d'accéder aux méthodes de configuration de la librairie. Elle permet de déterminer les variables liées à l'infrastructure qui serviront à avoir un rendu correcte sur le bac à sable. Hormis le fait que nous n'allons pas utiliser les méthodes de traitement d'images de Projection, Camera et Beamer seront solicités pour déterminer la position du Beamer par rapport à la caméra et pour récupérer les images capturés sans traitement. Une fois que la configuration déterminé, SandboxConfig permettra de la sauvegarder. La librairie de calibration \textit{SandboxSetup} instancie aussi \textit{Camera}, \textit{Beamer} et \textit{Projection} et permet d'accéder aux méthodes de configuration de la librairie. Elle permet de déterminer les variables liées à l'infrastructure qui serviront à avoir un rendu correcte sur le bac à sable. Hormis le fait que nous n'allons pas utiliser les méthodes de traitement d'images de \textit{Projection}, \textit{Camera} et \textit{Beamer} seront solicités pour déterminer la position du \textit{Beamer} par rapport à la caméra et pour récupérer les images capturées sans traitement. Une fois la configuration déterminée, \textit{SandboxConfig} permettra de la sauvegarder.
\section{Application de calibration} \section{Application de calibration}
Pour faciliter la génération du fichier de configuration, il a fallut faire une application plus sympa pour l'utilisateur. L'application de configuration utilise la librairie SandboxSetup et est basé sur le framework Qt. Pour faciliter la génération du fichier de configuration, il a fallu faire une application plus agréable pour l'utilisateur. L'application de calibration utilise la librairie de calibration \textit{SandboxSetup}.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.4]{archi_setup_app.jpg} \includegraphics[scale=0.45]{archi_setup_app_main.jpg}
\caption{Relations entre les éléments principaux de l'application de calibration}
\label{fig:archi_archi_sandbox_api}
\end{figure} \end{figure}
Cette application est basé sur MainWindow, qui sera l'interface parent tout au long de la procédure de configuration. Elle instancie SandboxSetup, afin qu'elle puisse utiliser l'infrastructure du bac à sable, et toutes les classes héritant de SubApp. SubApp représente une étape de la configuration, donc chaque classes en héritant, correspondra à une phase de la configuration. En l'occurence les classes InitCameraGui, MonitorGui, ProjectionGui, CameraFocusGui, CroppingMaskGui, BeamerLocationGui et SaveConfigGui. Cette application est basée sur MainWindow, qui sera l'interface parente tout au long de la procédure de calibration. Elle instancie \textit{SandboxSetup}, afin qu'elle puisse utiliser l'infrastructure du bac à sable, puis instancie toutes les classes héritant de \textit{SubApp}. \textit{SubApp} représente une étape de la calibration, donc chaque classes en héritant correspondra à une phase de la configuration. En l'occurence les classes \textit{InitCameraGui}, \textit{MonitorGui}, \textit{ProjectionGui}, \textit{CameraFocusGui}, \textit{CroppingMaskGui}, \textit{BeamerLocationGui} et \textit{SaveConfigGui}.
\\ \\
InitCameraGui sert à initialiser la caméra et vérifier qu'elle soit disponible. MonitorGui sert à sélectionner la sortie correspondant au vidéoprojecteur et sa résolution. ProjectionGui sert à correctement placer le vidéoprojecteur et la caméra. CameraFocusGui permet d'établir le FrameProcessProfil qui contient des valeurs permettant un meilleur rendu de l'image capturée par la caméra. CroppingMaskGui permet de déterminer la matrice de rotation et la zone intéréssante dans les images de la caméra, qui seront utilisées lors de l'ajustement de l'image projetée. BeamerLocationGui permet d'executer la routine permettant d'établir la position du vidéoprojecteur. Enfin SaveConfigGui permet de sauvegarder la configuration dans un fichier. \textit{InitCameraGui} sert à initialiser la caméra et vérifier qu'elle soit disponible. \textit{MonitorGui} sert à sélectionner la sortie correspondant au vidéoprojecteur et sa résolution. \textit{ProjectionGui} permet de faciliter la mise en place du vidéoprojecteur et de la caméra. \textit{CameraFocusGui} permet d'établir le profil \textit{FrameProcessProfil} qui contient les valeurs permettant un meilleur rendu de l'image de la caméra lors de la calibration. \textit{CroppingMaskGui} permet de déterminer la matrice de rotation liée à la rotation du beamer, ainsi que la zone d'intérêt des images de la caméra et la distance avec le plan se trouvant au dessus du bac à sable. Tout ces paramètres seront nécessaires à l'ajustement des images projetées. \textit{BeamerLocationGui} permet d'exécuter la routine permettant d'établir la position du vidéoprojecteur, qui sera elle aussi utilisée lors de l'ajustement des projections. Enfin \textit{SaveConfigGui} permet de sauvegarder la configuration dans un fichier.
\section{Applications utilisateur} \section{Applications utilisateurs}
Lorsqu'un utilisateur veut utiliser la librairie Sandbox, il devra toujours passer par ces étapes. Lorsqu'un utilisateur veut utiliser la librairie d'utilisation \textit{Sandbox}, il devra toujours passer par ces étapes.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.4]{sandbox_activity_diagram.jpg} \includegraphics[scale=0.4]{sandbox_activity_diagram.jpg}
\caption{Etapes d'initialisation de la librairie utilisateur}
\label{fig:archi_archi_sandbox_api}
\end{figure} \end{figure}
Il devra initialiser la librairie pour s'assurer que l'infrastructure est disponible. Puis charger la configuration et s'assurer qu'elle soit présente, pour ensuite exécuter son application avec la confirmation que la librairie fonctionnera correctement. Il devra initialiser la librairie pour s'assurer que l'infrastructure est disponible. Puis charger la configuration en s'assurant qu'elle soit présente, pour ensuite exécuter son application avec la confirmation que la librairie fonctionnera correctement.
% !TeX spellcheck = fr_FR
\chapter{Besoins et Fonctionnalités} \chapter{Besoins et Fonctionnalités}
\section{Définition des besoins} \section{Définition des besoins}
Lors du montage de l'infrastructure du bac à sable, la caméra et le vidéoprojecteur peuvent ne pas être exactement positionnés comme ils le devraient, c'est pourquoi nous prenons en compte les paramètres décrient dans \textit{problématiques géométriques}. Mais ces paramètres ne sont pas facilement déterminables, c'est pourquoi il faut mettre en place une application de calibration permettant de déterminer ces paramètres de manière guidée. De plus cette application devra se baser sur une librairie de calibration, afin de pouvoir créer différentes applications de calibration si besoin.\\ Les utilisateurs du bac sont variés. Il y a tout d'abord les utilisateurs qui voudront développer des applications sur le bac à sable et ensuite les utilisateurs qui voudront utiliser les applications développées pour le bac. Comme il n'existe actuellement pas de librairie permettant aux développeurs de faire des applications, il faudra fournir une librairie d'utilisation du bac à sable le leur permettant. Cette librairie devra permettre de corriger les problématiques indiquées précédemment dans la section \textit{problématiques géométriques}. De plus, elle devra permettre aux applications de réalité augmentée d'être affichées correctement et le plus dynamiquement possible, afin de garder une fluidité dans l'expérience de réalité augmentée.\\
De plus, il faudrait aussi éviter de réitérer la procédure de calibration à chaque utilisations de la librairie.\\
Enfin, il faudra fournir une librairie d'utilisation du bac à sable, afin que les développeurs puissent utiliser le bac de manière simple. C'est à dire, charger la configuration établi lors de la calibration et initialiser le système, ainsi que récupérer les images prises par la caméra et ajuster correctement l'image à projeter. Le tout en essayant de minimiser le temps des traitements, afin de rendre les applications le plus dynamique possible.
Lorsqu'un utilisateur d'application voudra utiliser le bac, il devra tout d'abord le construire et passer par l'étape de calibration qui permet de déterminer les facteurs géométriques liés à l'infrastructure, afin de pouvoir les corriger lors de l'utilisation des applications basées sur la librairie d'utilisation. C'est pourquoi une application de calibration permettant de déterminer ces facteurs de manière guidée est nécessaire.\\
Une fois ces facteurs déterminés, les applications devront en prendre connaissance afin d'être cohérentes avec l'infrastructure présente. De plus, comme ces facteurs sont nécessaire aux applications, il faudra permettre la sauvegarde de cette configuration, afin de ne pas réitérer la procédure de calibration à chaque utilisation des applications. Car cette procédure n'est nécessaire que lors du montage du système ou lors de sa modification.
\section{Fonctionnalités} \section{Fonctionnalités}
La librairie devra être séparée en deux parties distinctes. Une devra fournir les fonctionnalités La librairie devra être séparée en deux parties distinctes. Une devra fournir les fonctionnalités
de calibration de la librairie, et l’autre devra fournir les fonctionnalités d’utilisation de la de calibration de la librairie, et l’autre devra fournir les fonctionnalités d’utilisation de la
librairie.\\ librairie. Ces deux librairies devront permettre la création des applications de réalité augmentée et de calibration.\\
\subsection*{Librairie d'utilisation} \subsection*{Librairie d'utilisation}
La librairie d'utilisation devra permettre ces points clé : La librairie d'utilisation devra répondre à ces attentes :
\begin{itemize} \begin{itemize}
\item capture les photos de profondeurs et couleurs avec la camera \item capture les photos de profondeurs et couleurs avec la camera
\item ajuste une image à projeter sur le bac à sable \item ajuste une image à projeter sur le bac à sable
\item charge la configuration depuis le fichier \item charge la configuration depuis un fichier de configuration
\item initialise le bac à sable \item initialise le bac à sable
\end{itemize} \end{itemize}
...@@ -32,7 +35,7 @@ Une fois les étapes de configuration et initialisation effectuées avec succès ...@@ -32,7 +35,7 @@ Une fois les étapes de configuration et initialisation effectuées avec succès
\subsection*{Librairie de calibration} \subsection*{Librairie de calibration}
La librairie de calibration devra permettre à l'application d'exécuter correctement les routines et sauvegarder la configuration. Elle devra donc : La librairie de calibration devra permettre à l'application d'exécuter correctement les routines et sauvegarder la configuration. Elle devra donc :
\begin{itemize} \begin{itemize}
\item charger certaines informations du fichier de config si nécessaire \item charger certaines informations du fichier de configuration si nécessaire
\item fournir les méthodes de calibration permettant de déterminer les données de configuration \item fournir les méthodes de calibration permettant de déterminer les données de configuration
\item sauvegarder la configuration dans un fichier pour la rendre persistante \item sauvegarder la configuration dans un fichier pour la rendre persistante
\end{itemize} \end{itemize}
...@@ -44,4 +47,4 @@ La librairie de calibration devra permettre à l'application d'exécuter correct ...@@ -44,4 +47,4 @@ La librairie de calibration devra permettre à l'application d'exécuter correct
\label{fig:besoins_diagram_sequence_sandbox_setup} \label{fig:besoins_diagram_sequence_sandbox_setup}
\end{figure} \end{figure}
Dans ce scénario, nous allons récupérer les données de configuration en effectuant les routines de calibration, puis les sauvegarder dans un fichier. Ainsi nous avons notre configuration de prête pour les applications utilisateurs. Dans ce scénario, nous allons récupérer les données de configuration en effectuant les routines de calibration, puis les sauvegarder dans un fichier. Ainsi nous avons notre configuration prête pour les applications utilisateurs.
% !TeX spellcheck = fr_FR % !TeX spellcheck = fr_FR
\chapter*{Conclusion} \chapter{Conclusion}
\addcontentsline{toc}{chapter}{Conclusion} % Adding toc entry
Les architectes paysagistes peinent à modifier leurs maquettes de terrain une fois qu’elles sont créées. C’est pourquoi en se basant sur le projet de réalité augmentée de l'UC Davis, nous avons mis en place un bac à sable de réalité augmentée qui leur servira de substitut à leurs maquettes. De plus, il est désormais facile de déterminer la configuration d'autres infrastructures et dans différents milieux, grâce à l'application de calibration réalisée en Qt qui générera un fichier YAML contenant la configuration. L'application produite est basée sur notre \gls{api} de calibration en C++, afin de permettre la création d'autres applications de calibration si la nôtre ne convenait pas à leur besoin. En complément de la librairie de calibration, une autre librairie d'utilisation en C++ a été fournie afin de permettre la création d'applications utilisateurs. Cette dernière permet de lire la configuration déterminée grâce à l'application de calibration et permet d'utiliser la caméra et de projeter des images adaptées à l'infrastructure. Finalement une application de démonstration affichant les niveaux du bac en couleurs a été développée grâce à l'\gls{api} d'utilisation.
Les paysagistes et architectes peinent à modifier leurs maquettes une fois qu’elles sont créées. C’est pourquoi nous proposons de mettre à disposition un bac à sable de réalité augmentée qui leur servira de substitue à leur maquette tant que leurs plans ne sont pas définitifs. Les diverses applications basées sur le bac utiliseront l’API C++ refaite, permettant une utilisation similaire aux autres librairies C++ standard. Grâce à l’amélioration de la précision et de l’affichage de la librairie, les applications seront plus justement rendues. De plus, comme la librairie nécessite des données de configuration, une application de calibration a été créée afin qu’il soit plus facile de saisir ces données en cas de configuration et qu’il ne soit plus nécessaire de le faire à chaque utilisations.\\
Ce travail m’a permis de développer des compétences avec le langage C++ et le framework Qt. Ainsi que de me pousser à mieux maîtriser la librairie OpenCV durant la phase d’optimisation et d’avoir une introduction à l’utilisation d’outils de profiling. J’ai aussi appris à tout d’abord réaliser une solution fonctionnelle avant de l’améliorer, comme ce fut le cas lors de l’utilisation de la librairie xrandr.
\section{Amélioration} \section{Améliorations}
La manière de déterminer la matrice de rotation pourrait être revue, afin de prendre en compte le centre du rectangle dessiné par l’utilisateur lors de la phase de calibration, cela permettrait à la mise en place du vidéoprojecteur d’être un peu plus permissive. De plus, il serait judicieux d’essayer d’améliorer la vitesse de l’application des filtres sur les images prises par la caméra. Puis, l’amélioration de la vitesse d’ajustement d’une image projetée permettra d’améliorer la réactiver des applications utilisateurs. Ensuite, les différentes données de calibration pourraient toutes être regroupées dans une classe de calibration. Finalement, nous pourrions faciliter l’installation de la librairie, afin de permettre aux développeurs C++ d’inclure la librairie comme tout autre librairie système. Mais encore, la présence direct d’un exécutable pour l’application de calibration et la possibilité de choisir le lieu de sauvegarde du fichier de configuration en fin de calibration.\\ La manière de déterminer la matrice de rotation pourrait être revue, afin de prendre en compte le centre du rectangle dessiné par l’utilisateur lors de la phase de calibration, cela permettrait la mise en place du vidéoprojecteur plus permissive. De plus, il serait judicieux d’essayer d’améliorer la vitesse de l’application des filtres sur les images prises par la caméra. Ainsi que l’amélioration de la vitesse de traitement d'une image à projeter grâce à de la parallèlisation, ce qui permettrait aux applications utilisateurs d'être plus réactives. Finalement, nous pourrions faciliter l’installation de la librairie, afin de permettre aux développeurs C++ d’inclure la librairie directement à la racine du système d'exploitation. Ainsi que, la présence d’un exécutable pour l’application de calibration et la possibilité de choisir le lieu de sauvegarde du fichier de configuration en fin de calibration.\\
Donc je pense que globalement le projet est stable et que la prochaine étape est l’amélioration des performances et la facilitation de l’expérience utilisateur/développeur. Ainsi, les différents projets de réalité augmentée utilisant le bac à sable et la librairie pourront voir le jour.
\section{Perspectives}
La flexiblitée apportée lors de ce projet permet la création de différentes applications utilisateurs. Comme une application de reproduction de modèles de topologie, qui permettrait aux architectes paysagistes de faire une simple sauvegarde de leur topologie et de la reproduction dans le bac une fois qu'ils en auraient besoin. Ou encore une application de bac à distance, qui connecterait deux bacs distants afin que les utilisateurs voient en temps réel à travers le monde et concrètement la topologie envisagée par leur partenaire.
% !TeX spellcheck = fr_FR
\chapter{Description du dispositif} \chapter{Description du dispositif}
Le projet utilise une camera pour récupérer la topologie du bac à sable qui nous permettra d’ajuster en conséquence l’image à projetée par le vidéoprojecteur sur le bac à sable. \section{Dispositif}
Afin de reproduire cet outil de réalité augmentée, nous nous sommes basés sur le projet open source de l'\gls{ucdavis}.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.5]{dispositif.jpg} \includegraphics[scale=0.5]{ARSandboxLayout.jpg}
\caption{Dispositif} \caption{Infrastructure du bac à sable de l'\gls{ucdavis}. Source : tiré de arsandbox.ucdavis.edu, ref. URL03}
\label{fig:dispositif_dispositif} \label{fig:dispositif_ARSandboxLayout}
\end{figure} \end{figure}
Contrairement au projet décrit dans l'introduction, nous utilisons la caméra d'Intel D415 avec la librairie realsense 2, ainsi que le vidéoprojecteur PLC-XU116 de la marque Sanyo.
Nous avons donc monté notre propre bac à sable (100cm x 75cm x 20cm), posé un beamer à courte focale qui se trouve à environ 1.2 mètres au-dessus du bac afin de recouvrir l'entièreté du bac, ainsi qu'une caméra de profondeur positionnée à un mètre au dessus du bac à sable. De plus nous utilisons un ordinateur standard basé sur une distribution linux.
\begin{figure}[H]
\centering
\includegraphics[scale=0.1]{dispositif_sandbox.jpg}
\caption{Dispositif du bac à sable de réalité augmentée à HEPIA}
\label{fig:dispositif_dispositif_sandbox}
\end{figure}
Cependant, comme énoncé précédement dans le projet d'\gls{ucdavis}, la Kinect utilisée dans leur projet est désormais obsolète. Nous avons donc dû choisir une autre caméra de profondeur pouvant fonctionner correctement à un mètre du bac.
\section{Caméra}
Lors du choix de la caméra, il faut prendre en compte ses performances, ainsi que ses spécificités d'objectif. Le but étant de trouver une caméra pouvant être positionnée à un mètre au-dessus du bac, nous avons comparé les caractéristiques de la Realsense D415 \parencite{intel_realsense_depth_nodate} et de la D435 \parencite{intel_realsense_depth_nodate-1}.
\begin{table}
\begin{center}
\begin{tabular}{|m{2cm} m{2cm} m{2cm} m{2cm} m{2cm}|}
\hline
Caméra & Ouvertures objectif & Distance minimum & Résolution profondeur & Vitesse de rafraîchissement \\
\hline
D415 & 65°±2° × 40°±1° & 0.16 m & Up to 1280 × 720 & Up to 90 fps \\
\hline
D435 & 86° × 57° (±3°) & 0.105 m & Up to 1280 × 720 & Up to 90 fps \\
\hline
\end{tabular}
\end{center}
\caption{Tableau comparatif des caméra de profondeur de Intel RealSense. Source : tiré de www.intelrealsense.com, ref URL07}
\label{tab:dispositif_table_realsense_depth_camera}
\end{table}
Les deux caméras ont globalement les mêmes caractéristiques, avec la D435 qui est plus imposante que la D415. Mais ce qui détermina notre choix, c'est l'ouverture des caméras. La D435 a une ouverture plus grande que la D415, ce qui implique que si nous voulons avoir notre bac à sable complètement dans l'objectif, nous devrons poser la D435 plus bas que la D415. Mais comme nous voulons poser notre caméra à un mètre et que notre bac à sable est de dimensions 100cm x 75cm, nous avons déduit que la D415 s'approchait le plus de cette hauteur.
\section{Applications}
Les applications fournies par le projet de l'\gls{ucdavis} fonctionnent correctement avec leur projet. Malheureusement, le projet ne propose pas de librairie permettant d'exploiter le bac à sable. Il est donc impossible en l'état de développer des applications avec ce projet et aucune de leurs applications ne peut foncionner sur notre infrastructure.
\section{Problématiques géométriques} \section{Problématiques géométriques}
Normalement, lorsque nous voulons projeter une image avec un vidéoprojecteur, nous le faisons sur une surface plane. Hors dans notre cas, l'image est projetée sur le sable avec une certaine topologie. Afin de pouvoir exploiter cet outils, nous devons résoudre quelques problématiques géométriques liées à la disposition de l'infrastructure.\\
Normalement, lorsque nous voulons projeter une image avec un vidéoprojecteur, nous le faisons sur une surface plane. Or dans notre cas, l'image est projetée sur le sable avec une certaine topologie.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.4]{adjust_pixel.jpg} \includegraphics[scale=0.5]{adjust_pixel.jpg}
\caption{Projection pixel} \caption{Correction de la projection d'un pixel}
\label{fig:dispositif_adjust_pixel} \label{fig:dispositif_adjust_pixel}
\end{figure} \end{figure}
Comme notre vidéoprojecteur doit pouvoir projeter sur une surface plane, nous avons défini le sommet du bac à sable comme repère pour projeter notre image. Ainsi le champ de vision de la caméra correspond à la zone de projection du vidéoprojecteur. \\ Comme notre vidéoprojecteur doit pouvoir projeter sur une surface plane, nous avons défini le sommet du bac à sable comme repère pour projeter notre image. Ainsi le champ de vision de la caméra correspond à la zone de projection du vidéoprojecteur. \\
Dans ce schéma, nous avons la caméra qui récupère la hauteur à un certain point (orange) et nous avons notre vidéoprojecteur qui projette un pixel. Ce pixel sera projeté à la position bleu sans ajustement, car l'image projetée correspondant au champ de vision de la caméra. C'est seulement en corrigeant la position sur notre plan (sommet du bac à sable), que nous pouvons adapter notre affichage à la position du vidéoprojecteur. Donc en ajustant le pixel qui serait projeté à la position bleu, vers la position orange, nous arrivons à projeter une image cohérente sur le sable.\\ Dans ce schéma, nous avons la caméra qui récupère la hauteur à un certain point (orange) et nous avons notre vidéoprojecteur qui projette un pixel. Ce pixel sera projeté à la position bleu sans ajustement, car l'image projetée correspond au champ de vision de la caméra. C'est seulement en corrigeant la position sur notre plan (sommet du bac à sable), que nous pouvons adapter notre affichage à la position du vidéoprojecteur. Donc en ajustant le pixel qui serait projeté à la position bleu, vers la position orange, nous arrivons à projeter une image cohérente sur le sable.\\
Malheureusement, l'infrastructure mise en place ne sera pas toujours aussi exacte que celle sur le schéma. Notamment la position de la caméra et du vidéoprojecteur, ainsi que la taille du bac à sable. C'est pourquoi il faut ajuster la taille de l'image projetée à celle de la capture de la caméra. Malheureusement, l'infrastructure mise en place ne sera pas toujours aussi exacte que celle sur le schéma. Notamment la position de la caméra et du vidéoprojecteur, ainsi que la taille du bac à sable. C'est pourquoi il faut ajuster la taille de l'image projetée à celle de la capture de la caméra.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[scale=0.35]{camera_zones.jpg} \includegraphics[scale=0.35]{camera_zones.jpg}
...@@ -29,7 +76,7 @@ Malheureusement, l'infrastructure mise en place ne sera pas toujours aussi exact ...@@ -29,7 +76,7 @@ Malheureusement, l'infrastructure mise en place ne sera pas toujours aussi exact
\label{fig:dispositif_camera_zones} \label{fig:dispositif_camera_zones}
\end{figure} \end{figure}
Ainsi, en ajustant seulement les pixels de la projection, nous conservons la cohérence entre la zone de projection et la zone capturée par la caméra.\\ Ainsi, en déterminant la zone de projection par rapport au point de vue de la caméra, nous pouvons ajuster seulement les pixels de la projection et ainsi conserver la cohérence entre la zone de projection et la zone capturée par la caméra.\\
Enfin il se peut que le vidéoprojecteur ne soit pas parfaitement droit et qu'il y ait une rotation de l'image projetée par rapport à la caméra. Enfin il se peut que le vidéoprojecteur ne soit pas parfaitement droit et qu'il y ait une rotation de l'image projetée par rapport à la caméra.
\begin{figure}[H] \begin{figure}[H]
...@@ -39,5 +86,5 @@ Enfin il se peut que le vidéoprojecteur ne soit pas parfaitement droit et qu'il ...@@ -39,5 +86,5 @@ Enfin il se peut que le vidéoprojecteur ne soit pas parfaitement droit et qu'il
\label{fig:dispositif_rotation} \label{fig:dispositif_rotation}
\end{figure} \end{figure}
En corrigeant cette rotation lors de l'affichage, nous aurons une projection juste par rapport à la caméra. En corrigeant cette rotation centrée à la projection lors de l'affichage, nous aurons une projection alignée au point de vue de la caméra.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment