\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[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{\tableofcontents}


\section{Intoduction}
\frame
{
\frametitle{L'Hydroptère, un voilier à hydrofoils}
	\begin{columns}[c]
		\column{1.5in}
			\includegraphics[width=1.5in]{figures/hydroptere.jpg}
		\column{2in}
			\begin{itemize}
				\item<1-> Longueur $18m$
				\item<1-> Envergure $24.5m$
				\item<1-> Hauteur du mât $27m$
				\item<1-> Masse  $6.5t$
				\item<1-> Grand Voile $165m^2$
				\item<1-> Vitesse de pointe $45$ noeuds ($83km/h$)
			\end{itemize}
	\end{columns}
}


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

\begin{itemize}
	\item<1-> Continuer la modélisation de l'hydroptère
	\begin{itemize}
		\item<1-> Comportement des surfaces portantes (polaires)
		\item<1-> Comportement des voilures (polaires)
		\item<1-> Gouvernes
		\item<1-> Inclure les paramètres réels de la machine (ou réalistes si pas disponibles)
	\end{itemize}
	\item<1-> Traduction du modèle de MATLAB à C++
	\item<1-> (Implémentation en temps réel)
\end{itemize}
}



\section{Modèle}



\subsection{Géométrie du modèle}
\frame
{
\frametitle{Géométrie du modèle (1)}

On considère le bateau comme un solide
 
	\begin{columns}[c]
		\column{2in}
			\includegraphics[width=2in]{figures/coord.png}
		\column{2in}
		Pour le situer dans l'espace, il faut
			\begin{itemize}
				\item<1-> 3 coordonnées pour sa position $\vec{r}= \left( \begin{array}{c} x\\y\\z \end{array} \right)$
				\item<1-> 3 coordonnées pour son attitude $\vec{a}= \left( \begin{array}{c} \phi\\ \theta\\ \psi \end{array} \right)$
			\end{itemize}
	\end{columns}
 
}

\frame
{
\frametitle{Géométrie du modèle (2)}
Pour décrire la dynamique, il faut les coordonnées $\vbeg \vec{r} \\ \vec{a} \vend$ et leur dérivées temporelles $\vbeg \dot{\vec{r}} \\ \dot{\vec{a}} \vend$ \\
L'état du système est donc décrit par $\vec{q} = \vbeg \vec{r} \\ \vec{a} \\ \dot{\vec{r}} \\ \dot{\vec{a}} \vend$, $\dim{(\vec{q})}=12$
}


\frame
{
\frametitle{Évolution temporelle}
L'évolution de l'état est décrite par le système d'équations différentielles\\
\begin{equation*}
\centering
\dot{\vec{q}}=f(\vec{q}, \vec{Q}, \vec{p})
\end{equation*}

\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...)\\
\end{itemize}

\vspace{12pt}

Solution par intégration numérique
}



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

	\begin{columns}[c]
		\column{2in}
			\includegraphics[width=1.85in]{figures/modele.png}
		\column{2in}
		Le programme génère des expressions qui calculent:
			\begin{itemize}
				\item<1-> Les paramètres géométriques
				\item<1-> Les forces
				\item<1-> Les moments de force
				\item<1-> Les vitesses
				\item<1-> Les accélérations
			\end{itemize}
	\end{columns}
}


\subsection{Simulation}

\frame
{
\frametitle{Simulation sous MATLAB}

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}
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}}= ~400\%$
	\item<1-> On est loin du temps réel...
\end{itemize}
}



\frame
{
\frametitle{MATLAB $\rightarrow$ C++}
Écriture d'un programme MATLAB de traduction MATLAB $\rightarrow$ C++ automatique
\begin{itemize}
	\item<1-> Recherche de sous-expressions communes (Symbolic Toolbox)
	\item<1-> Recherche de fonctions trigonométriques fréquentes
	\item<1-> Variables intermédiaires et substitutions
	\item<1-> Fonction de traduction d'une expression MATLAB $\rightarrow$ C++
	\item<1-> Génération de fichiers-fonctions \texttt{.cpp}
\end{itemize}
Note: Le compilateur MATLAB n'est pas adapté (interpréteur)
}




\frame
{
\frametitle{Résultats intermédiaires}
\begin{itemize}
	\item<1-> Pour l'instant, seules les fonctions d'évaluation $\vec{f}(...)$ sont implémentées en C++\\
	\item<1-> L'intégration se fait toujours depuis MATLAB par \texttt{ode45()}
	\item<1-> Sur la même machine: $\frac{t_{simulation}}{t_{reel}}= 3\%$ à $16\%$
	\item<1->[] $\rightarrow$ environ 100 fois plus rapide
	\item<1->[] $\rightarrow$ temps réel envisageable
\end{itemize}

Aussi testé:
\begin{itemize}
	\item<1-> Lecture de la position d'un joystick
\end{itemize}	
}



\frame
{
\frametitle{Étapes suivantes (1)}

Intégration en C++ (au lieu de \texttt{ode45()}) avec la librairie \emph{ODE++}\\
\emph{ODE++} offre:
\begin{itemize}
	\item<1-> Runge-Kutta d'ordres 4, 5 et 8 et d'autres méthodes
	\item<1-> Spécification d'erreur maximale et ou relative
	\item<1-> Intégration sur $t \in [a,b]$ ou pas à pas
	\item<1-> Pas variables automatiques
	\item<1-> ...
\end{itemize}	
}


\frame
{
\frametitle{Étapes suivantes (2)}
\begin{itemize}
	\item<1-> Modélisation des surfaces portantes et des voiles par tables de polaires (jusqu'ici: modèle polynomial pour la version C++)
	\item<1-> Utiliser les données des la machine réelle (si on les obtient) 
	\item<1-> Affichage \emph{OpenGL} temps réel (ce serait rigolo)
	\item<1-> Pilotage par joystick (encore plus rigolo)
	\item<1-> Propositions?
\end{itemize}	
}

\end{document}