\documentclass[a4]{beamer}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}

\usepackage{listings}
\usepackage{color}

\title{Logiciel de contrôle Khepera II}
\author{Guillaume Libersat <glibersat@linux62.org>}
\date{Mercredi 16 Mai}

\usecolortheme{dolphin}
\usefonttheme{default}
\useinnertheme{rounded}
\useoutertheme{shadow}

\begin{document}

\maketitle


\begin{frame}
  \tableofcontents[subsectionstyle=hide]
\end{frame}



\section{Introduction}

\begin{frame}
  \frametitle{Introduction}
  
  Environnement
  \begin{itemize}
  \item Equipe GRAPPA (LIFL)
  \item Projet Sequel
  \end{itemize}

\pause
  Objectifs
  \begin{itemize}
  \item Etablir un canal de communication avec le robot ;
  \item Donner des ordres ;
  \item Recevoir les informations des capteurs ;
  \item Créer un interprète de commandes.
  \end{itemize}

\pause
  Contraintes
  \begin{itemize}
  \item Doit fonctionner sous GNU/Linux ;
  \item Doit être programmé en langage C.
  \end{itemize}


\end{frame}



\section{Présentation du Khepera II}

\subsection{Description générale}

\begin{frame}
  \frametitle{Description générale}

  Société K-team
  \begin{itemize}
  \item Création de robots pour les scientifiques
  \item Internationalement reconnus
  \item Utilisés par plus de 500 universités et industriels
  \end{itemize}

  \begin{center}
    \includegraphics[scale=0.3]{../images/khepera.jpg}
  \end{center}
  

\end{frame}

\subsection{Description physique}

\begin{frame}
  \frametitle{Présentation physique}


  \begin{center}
    \includegraphics[scale=0.6]{../images/schem_khep.png}
  \end{center}

  Equipement
  \begin{itemize}
  \item Deux roues indépendantes ;
  \item 8 capteurs de présence ;
  \item 8 capteurs de luminosité ;
  \item Possibilité de connecter des extensions.
  \end{itemize}

\end{frame}


\subsection{Présentation logicielle}

\begin{frame}
  \frametitle{Présentation logicielle}
  
  Deux modes de fonctionnement :
  \begin{enumerate}
  \item Autonome
    \begin{itemize}
    \item Logiciel chargé en mémoire
    \item Utilise l'API de l'OS
    \item Nécessité d'uploader le code à chaque modification
    \item Limité aux capacités du robot
    \end{itemize}
    \pause
  \item Contrôle distant
    \begin{itemize}
    \item Via RS232
    \item Via Bluetooth (avec tourelle)
    \item Plus lent
    \item Utilise les capacités de la machine hôte
    \end{itemize}
  \end{enumerate}
  
\end{frame}

\section{Conception}

\subsection{Architecture générale}

\begin{frame}
  \frametitle{Architecture générale}

  \begin{columns}
    \begin{column}{0.5\textwidth}
      \includegraphics[scale=0.5]{../images/arch_debut.png}
    \end{column}

    \begin{column}{0.5\textwidth}

      Buts
      \begin{itemize}
      \item Construction par étapes
      \item Débogage plus aisé
      \item Réutilisation du code
      \item Maintenabilité
      \item Modularité
      \end{itemize}
      
    \end{column}
  \end{columns}

\end{frame}

\section{Développement}

\subsection{La bibliothèque d'accès}


\begin{frame}
  \frametitle{La bibliothèque d'accès}

  Trois rôles
  \begin{itemize}
  \item Ouvrir un canal de communication ;
  \item Envoyer des commandes ;
  \item Recevoir et préparer les réponses.
  \end{itemize}

\pause

  Caractéristiques
  \begin{itemize}
  \item Abstraction totale du protocole
  \item Deux familles de commandes
  \item Temps de latence minimisé
  \end{itemize}
  
\end{frame}

\subsubsection{Aspect technique}

\begin{frame}
  \frametitle{Quelques points techniques}

  \begin{columns}
    \begin{column}{0.5\textwidth}

      \includegraphics[scale=0.35]{../images/autotools.png}

    \end{column}

    \begin{column}{0.5\textwidth}

      \begin{itemize}
      \item Utilise les autotools
      \item Compatible x86, powerpc
      \item Testé seulement sous GNU/Linux
      \item Intègre Doxygen (PDF, HTML, Manpages, ...)
      \end{itemize}

    \end{column}
  \end{columns}

\end{frame}

\subsubsection{Classes de commandes}

\begin{frame}
  \frametitle{Les commandes}

  \emph{Deux familles}
\pause

  Ordres
  \begin{itemize}
  \item Du type ``Avancer de 3 cm'', ``Tourner de 90°'', ...
  \item Pas de réponse du robot
  \end{itemize}

\pause
  Requêtes
  \begin{itemize}
  \item Du type ``valeur des capteurs'', ``vitesse actuelle'', ...
  \item Réponse de diverses formes
  \end{itemize}

\pause
  Nécessité de récupérer et préparer les réponses.

\end{frame}

\subsubsection{Un exemple de commande}

\begin{frame}
  \frametitle{Exemple de commandes}

  \lstinputlisting[basicstyle=\footnotesize,keywordstyle=\color{black}\bfseries\underbar,language=C,numbers=left]{requete.c}

\end{frame}

\subsubsection{Problèmes}

\begin{frame}
  \frametitle{Problèmes rencontrés}

  Résolus
  \begin{itemize}
  \item Configuration du port série
  \item Elimination de la bannière
  \item Problèmes de synchronisation
  \end{itemize}

\pause
  Non résolus
  \begin{itemize}
  \item Montée en charge (tilt !)
  \end{itemize}

\end{frame}

\section{Applications}

\subsection{Centre de tests}

\begin{frame}
  \frametitle{Centre de tests}

  \begin{columns}
    \begin{column}{0.5\textwidth}

      \begin{center}
        \includegraphics[scale=0.35]{../images/khepcc.png}
      \end{center}

    \end{column}

    \begin{column}{0.5\textwidth}

      Objectif initial
      \begin{itemize}
      \item Tester la bibliothèque
      \end{itemize}
      
\pause
      En fait...
      \begin{itemize}
      \item Pratique pour tester/calibrer/stresser le robot
      \end{itemize}

\pause
      Technologies utilisées
      \begin{itemize}
      \item C
      \item SDL
      \item Cairo
      \end{itemize}

    \end{column}
  \end{columns}
 
\end{frame}

\subsection{Interprète}

\begin{frame}
  \frametitle{Interpréteur de commandes}

  L'idée
  \begin{itemize}
  \item Inutile de réinventer un shell
  \item Minimiser la maintenance
  \end{itemize}

\pause
  Python
  \begin{itemize}
  \item Utilisable en script
  \item Utilisable via un shell interactif
  \end{itemize}

\pause
  Bindings python
  \begin{itemize}
  \item ``Glue'' entre du code C et du python
  \item SWIG : Génération ``automatique'' depuis le code C
  \end{itemize}

\pause
  Résultat
  \begin{itemize}
  \item Bibliothèque facile à maintenir
  \item Même API que le C (donc documentation)
  \end{itemize}

\end{frame}

\subsubsection{Exemple python}

\begin{frame}
  \frametitle{Un exemple en python}

  \lstinputlisting[basicstyle=\footnotesize,keywordstyle=\color{black}\bfseries\underbar,language=Python,numbers=left]{python.py}

\end{frame}

\subsection{Serveur réseau}

\subsubsection{Au début}

\begin{frame}
  \frametitle{Serveur réseau}

  Objectif initial
  \begin{itemize}
  \item Accès via sockets ``classiques''
  \end{itemize}

\pause
  Mais...
  \begin{itemize}
  \item Efface l'abstraction apportée par la bibliothèque
  \item Hasardeux à utiliser
  \item N'apporte aucun contrôle sur les commandes
  \end{itemize}

\pause
  Après discussion, une autre solution est envisageable : XML-RPC

\end{frame}

\subsubsection{XML-RPC}

\begin{frame}
  \frametitle{XML-RPC}

  Description
  \begin{itemize}
  \item Messages encodés en XML
  \item Transport par HTTP
  \item Standard (http://www.xmlrpc.com/spec)
  \item Disponible dans de nombreux langages
  \end{itemize}

\pause
\begin{center}
  \includegraphics[scale=0.4]{../images/xmlrpc.jpg}
\end{center}

\end{frame}

\subsubsection{Serveur de robots}

\begin{frame}
  \frametitle{Serveur de robots}

  Première version
  \begin{itemize}
  \item Réalisée en C (embarque un serveur web)
  \item Peu maintenable (introspection difficile)
\pause
  \item Problème des FD (fork/die)
  \end{itemize}

  \begin{center}
    \includegraphics[scale=0.35]{../images/fd_kill.png}
  \end{center}




\end{frame}

\begin{frame}
  \frametitle{Serveur de robots (2)}

  Deuxième version
  \begin{itemize}
  \item Réalisée en python (embarque un mini serveur web)
  \item Python n'utilise que des threads : FD ok
  \item Zéro maintenance (utilisation des mécanismes de langage)
  \end{itemize}
\pause

  Résultat
  \begin{itemize}
  \item Toujours la même API d'un bout à l'autre
  \item Profite des mécanismes d'HTTP (auth)
  \item Extensible (SSL, Réservation, ...)
  \end{itemize}

\end{frame}

\subsubsection{Exemples d'utilisation}

\begin{frame}
  \frametitle{Exemple d'utilisation en XML-RPC (Python)}

  \textbf{Python}
  
  \lstinputlisting[basicstyle=\footnotesize,keywordstyle=\color{black}\bfseries\underbar,language=Python,numbers=left]{client.py}

\end{frame}

\section{Conclusion}

\subsection{Récapitulatif}

\begin{frame}
  \frametitle{Récapitulatif}

  \begin{columns}
    \begin{column}{0.5\textwidth}

      \begin{center}
        \includegraphics[scale=0.5]{../images/arch_debut.png}
      \end{center}

    \end{column}

    \begin{column}{0.5\textwidth}

      \begin{itemize}
      \item Utilisable sur 3 niveaux
        \begin{enumerate}
        \item Bibliothèque
        \item Interprète/Script
        \item Réseau
        \end{enumerate}
      \item API constante
        \begin{itemize}
        \item Même utilisation à tous les niveaux
        \item Documentation
        \end{itemize}
      \item Utilisable avec tous les langages à travers le réseau
      \item \emph{Paquet Debian en cours de préparation...}
      \end{itemize}
    \end{column}
  \end{columns}
  
\end{frame}

\subsection{Pour finir}


\begin{frame}
  \frametitle{Pour finir}

  Apports techniques
  \begin{itemize}
  \item Découverte de nouveaux outils
  \item Gestion de la contrainte de temps
  \item Nécessité de livrer les programmes
  \end{itemize}

\pause

  Apports personnels
  \begin{itemize}
  \item Découverte de l'ambiance d'un laboratoire
  \item Intérêt pour les activités de recherche
  \item Décision pour mon orientation
  \end{itemize}

\pause
\bigskip

Des questions ?


\end{frame}




\end{document}
