\documentclass{beamer}

\usepackage{beamerthemesplit}
\usepackage{graphicx}
\usepackage{amsmath, amsthm}
\usepackage[latin1]{inputenc}
\usepackage[cyr]{aeguill}
\usepackage[francais]{babel}

\usepackage{ifsym}

\usepackage{color}

\usepackage{multimedia}

\usepackage{listings}

\usepackage{hyperref}

%\usepackage[spacesep,definevectors]{easyvector}



%\definecolor{Blue}{rgb}{0.3,0.3,0.9}
\definecolor{Blue}{rgb}{0.0,0.0,1.0}
\definecolor{Viol}{rgb}{0.4,0.0,0.6}
\definecolor{Red}{rgb}{0.7,0.0,0.3}
\definecolor{Green}{rgb}{0.4,0.6,0.0}
\definecolor{Grey}{rgb}{0.2,0.2,0.2}
\definecolor{Greyy}{rgb}{0.5,0.5,0.5}


\newcommand{\vbeg}{\left( \begin{array}{c} } 
\newcommand{\vend}{ \end{array} \right)} 


\title{Modélisation de l'Hydroptère}
\author{Basile Graf}
\date{\today}


\begin{document}

\frame{
\titlepage
}


%\section[Outline]{}
\frame{
	\begin{columns}[c]
		\column{2in}
			\tableofcontents
		\column{1.5in}
			\includegraphics[width=1.5in]{figures/hydroptere.jpg}
		\end{columns}			
}


\section{Buts du projet}
\frame
{
\frametitle{Buts}

\begin{itemize}
	\item<1-> Optimiser le modèle de l'hydroptère
	\begin{itemize}
		\item<1-> Les temps de calculs sont trop importants
	\end{itemize}
	\item<1-> Traduction (semi-automatique) du modèle de MATLAB à C++
	\item<1-> Implémentation en temps réel
	\item<1-> Réalité virtuelle
		\begin{itemize}
		\item<1-> Affichage 3D
		\item<1-> Pilotage
	\end{itemize}
	\item<1-> (Documentation) (!)
\end{itemize}
}


\section{Introduction}
\subsection{Géométrie du modèle}
\frame
{
\frametitle{Géométrie du modèle}

On considère le bateau comme un solide
\vspace{0.2in}
 
	\begin{columns}[c]
		\column{1.5in}
			\includegraphics[width=1.5in]{figures/coord.png}
		\column{2in}
		Position et attitude\\
		\vspace{0.1in}
		 $\vec{r}= \vbeg x\\y\\z \vend$ $\ \ \vec{a}= \vbeg \phi\\ \theta\\ \psi \vend$ \\
		 
		\vspace{0.2in}
		 
		Le vecteur d'état est donc \\
		\vspace{0.1in}
		$\vec{q} = \vbeg \vec{r} \\ \vec{a} \\ \vec{\dot{r}} \\ \vec{\dot{a}} \vend$ $\ \ \dim{(\vec{q})}=12$
	\end{columns}
}




\subsection{Génération du modèle}
\frame
{
\frametitle{Génération du modèle sous MATLAB}

	\begin{columns}[c]
		\column{1.85in}
			\includegraphics[width=1.85in]{figures/modele.png}
		\column{3in}
			\begin{itemize}
				\item<1-> Évolution décrite par\\ \vspace{0.1in}
					$\dot{\vec{q}}=\vec{f}(\vec{q}, \vec{Q}, \vec{p})$
					\begin{itemize}
						\item<1->[] $\vec{q}$: état
						\item<1->[] $\vec{Q}$: forces appliquées
						\item<1->[] $\vec{p}$: paramètres (positions des gouvernes, vent, etc...)\\ \vspace{0.2in}
					\end{itemize}
				\item<1-> Solution par intégration numérique
			\end{itemize}
	\end{columns}
}


\section{Simulation et optimisation}
\subsection{Simulation}

\frame
{
\frametitle{Simulation et temps de calcul sous MATLAB}

Lorsque le système $\dot{\vec{q}}=f(\vec{q}, \vec{Q}, \vec{p})$ obtenu est intégré sous MATLAB avec le "slover" \texttt{ode45(...)},\\
\vspace{12pt}
\begin{columns}[c]
	\column{3in}
		on a quelques problèmes:\\
		\begin{itemize}
			\item<1-> Les expressions à évaluer son très longues (jusqu'à 20000 caractères)
			\item<1-> Sur mon Pentium IV, temps relatif de simulation: $\frac{t_{simulation}}{t_{reel}}= \sim 400\%$
			\item<1-> On est loin du temps réel...
		\end{itemize}
	\column{1in}
		\includegraphics[width=1.3in]{figures/computer.png}
\end{columns}
}



\subsection{Optimisation}

\frame
{
\frametitle{Optimisation et traduction}

Programme (MATLAB) d'optimisation:\\ \vspace{0.1in}
\begin{itemize}
	\item<1->[1)] Réduction de la complexité des expressions
	\begin{itemize}
		\item<1-> Recherche de sous-expressions communes ou fréquentes
		\item<1-> Variables intermédiaires et substitutions
		\item<1-> Précalcul de fonctions trigonométriques (fréquentes à cause des projections géométriques)
	\end{itemize}
	\vspace{0.1in}
	\item<1->[2)] Traduction en code C/C++
	\begin{itemize}
		\item<1-> Expressions symboliques MATLAB $\rightarrow$ C/C++ (casse-tête avec chaînes de caractères)
		\item<1-> Grouper ces expression dans des fonction C/C++
		\item<1-> Génération de fichiers compilables (\texttt{.cpp} et \texttt{.h})
	\end{itemize}
\end{itemize}

}




\subsection{Intégration}
\frame
{
\frametitle{Intégration en C/C++}
L'intégration du système d'équations $\dot{\vec{q}}=f(\vec{q}, \vec{Q}, \vec{p})$, effectuée avec \texttt{ode45()} sous MATLAB a également été implémentée en C/C++\\ \vspace{0.1in}

Utilisation de la librairie CVODE de la suite SUNDIALS
\begin{itemize}
	\item<1-> Ordre variable
	\item<1-> Pas d'intégration variable
	\item<1-> (Jacobien estimé ou fourni par l'utilisateur)
	\item<1-> Une version pour processeurs parallèles existe (MACs)
	\item<1-> ...
	\item<1-> Tout ce que peut faire \texttt{ode45()} et plus
\end{itemize}
}



\subsection{Performances}
\frame
{
\frametitle{Performances (temps de calcul)}

Chaque étape a permis un gain de vitesse conséquent:\\
\vspace{0.1in}
\begin{itemize}
	\item<1-> Intégration et évaluation sous MATLAB\\
		$\frac{t_{simulation}}{t_{reel}}= \sim  400\%$
	\item<1-> Intégration sous MATLAB et évaluation en C/C++\\
		$\frac{t_{simulation}}{t_{reel}}= \sim  3\%$ à $16\%$
	\item<1-> Intégration et évaluation en C/C++\\
		Encore $\sim 10\times$ plus rapide
\end{itemize}
\vspace{0.1in}
Le gain de vitesse final est environ de $1300$ et la simulation est largement plus rapide que le temps réel \\
$\rightarrow$ Réalité virtuelle possible
}


\section{Réalité virtuelle}
\subsection{Réalité virtuelle}
\frame
{
\frametitle{Possibilités}

Le faible temps relatif de simulation libère les ressources du processeur et nous permet de
\vspace{0.1in}
\begin{itemize}
	\item<1-> Réaliser un affichage de la scène en temps réel (OpenGL)
	\item<1-> Gestion des périphériques (joystick, clavier)
	\item<1-> (plus tard: implémenter un algorithme de contrôle)
\end{itemize}
}


\subsection{Programme}
\frame
{
\frametitle{Structure du programme}
	\includegraphics[width=4in]{figures/mainProg.png}
}



\frame
{
\frametitle{Indépendance à MATLAB}

\begin{itemize}
	\item<1-> Le programme est un exécutable MATLAB (MEX)
	\item<1-> Mais seules les conditions initiales et la récupération des résultats de simulation (éventuelle analyse) sont traités sous MATLAB
	\vspace{0.1in}
	\item<1->[$\rightarrow$] Le programme est indépendant et peut donc facilement être détaché de MATLAB
\end{itemize}
}




\frame
{
\frametitle{Documentation}
Pour permettre la poursuite du travail\\
\vspace{0.1in}
Documentation complète avec Doxygen:
\begin{itemize}
	\item<1-> Évolutive
	\item<1-> Version \texttt{html} et \texttt{pdf}
	\item<1-> Graphes structurels
	\item<1-> Navigation et hyperliens
\end{itemize}

}



\section{Conclusion}
\frame
{
\frametitle{Conclusions}
\begin{itemize}
	\item<1-> Objectifs du projet atteints
	\item<1-> Le programme de traduction est utilisable dans d'autres contextes/projets pour l'accélération de simulations
	\item<1-> Le simulateur est prêt pour être développé plus avant:
	\begin{itemize}
		\item<1-> Tables de polaires
		\item<1-> Gouvernes au lieu de varier l'angle de calage (Polaires 2D)
		\item<1-> Contrôle
		\item<1-> ...
	\end{itemize}
\end{itemize}
}


\end{document}