<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://peip-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tmaurice</id>
		<title>Wiki de bureau d'études PeiP - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://peip-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tmaurice"/>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Tmaurice"/>
		<updated>2026-04-24T14:12:50Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=936</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=936"/>
				<updated>2012-05-10T11:41:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Idée d'amélioration du guidage par wifi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seconde idée d'amélioration ===&lt;br /&gt;
Affin de s'affranchir totalement de l'utilisation nécessaire du wifi pour la direction du robot, il pourrait être intéressant de faire passer la communication entre le robot qui handle le joystick et la foxboard uniquement via bluetooth, à tester...&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon, le client commence ensuite à envoyer ses commanes.&lt;br /&gt;
Si le mot de passe est faux, le serveur envoi :&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
Et ferme la connexion.&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=935</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=935"/>
				<updated>2012-05-10T11:41:24Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seconde idée d'amélioration ===&lt;br /&gt;
Affin de s'affranchir totalement de l'utilisation nécessaire du wifi pour la direction du robot, il pourrait être intéressant de faire passer la communication entre le robot qui handle le joystick et la foxboard uniquement via bluetooth, à tester...&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon, le client commence ensuite à envoyer ses commanes.&lt;br /&gt;
Si le mot de passe est faux, le serveur envoi :&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
Et ferme la connexion.&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=855</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=855"/>
				<updated>2012-03-25T10:18:04Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Seconde idée d'amélioration ===&lt;br /&gt;
Affin de s'affranchir totalement de l'utilisation nécessaire du wifi pour la direction du robot, il pourrait être intéressant de faire passer la communication entre le robot qui handle le joystick et la foxboard uniquement via bluetooth, à tester...&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon, le client commence ensuite à envoyer ses commanes.&lt;br /&gt;
Si le mot de passe est faux, le serveur envoi :&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
Et ferme la connexion.&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=854</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=854"/>
				<updated>2012-03-25T10:10:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Connexion de mstormjoystick à joystick-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon, le client commence ensuite à envoyer ses commanes.&lt;br /&gt;
Si le mot de passe est faux, le serveur envoi :&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
Et ferme la connexion.&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=853</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=853"/>
				<updated>2012-03-25T10:09:18Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon et&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
sinon.&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=852</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=852"/>
				<updated>2012-03-25T10:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Problèmes rencontrés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon et&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
sinon.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=851</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=851"/>
				<updated>2012-03-25T10:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Page man du programme mstormjoystick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon et&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
sinon.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=850</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=850"/>
				<updated>2012-03-25T10:08:19Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Page man du programme mstormjoystick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon et&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
sinon.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
              Permettent  de  contrôler  le  robot  en  lui indiquant un cap à&lt;br /&gt;
              tenir, en fait, si vous appuyez sur le hat haut/bas il suivra la&lt;br /&gt;
              direction indiquée. Si en revanche vous appuyez sur les côtés le&lt;br /&gt;
              robot tournera bêtement en rond.&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
              Permettent de diriger le robot en continu et non cap à cap comme&lt;br /&gt;
              avec  les  hats. Lors d'un déplacement en avant, il est possible&lt;br /&gt;
              de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
              riger  un  éventuel  défaut  mécanique  ou une inégalité du sol.&lt;br /&gt;
              C'est aussi possible avec l'arrière, on peut ainsi diriger  plus&lt;br /&gt;
              finement lerobot.&lt;br /&gt;
&lt;br /&gt;
           Les boutons&lt;br /&gt;
              Le  bouton  9  est  le bouton d'arrêt du programme, il doit être&lt;br /&gt;
              utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
              bouton  d'arrêt  du programme ET du serveur (hébergé sur la même&lt;br /&gt;
              machine ou sur la  foxboard).  Appuyer  sur  ce  bouton  causera&lt;br /&gt;
              l'arrêt  des  deux  processus.  Le bouton 5 permet de stopper le&lt;br /&gt;
              robot quand il est commandé par les hats,notez qu'une action sur&lt;br /&gt;
              le joystick produira le même effet.  Le bouton 2 est un avertis‐&lt;br /&gt;
              seur sonor, un genre de klaxon si le robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=847</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=847"/>
				<updated>2012-03-22T16:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Programme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
=== Le programme mstormjoystick ===&lt;br /&gt;
Codé en C++ en utilisant la SDL et la libtsocket, le programme permet de récupérer les événements du joystick (inclinaison des axes, boutons, appui sur les hats (flèches directionnelles situées en haut a gauche sur une manette type PS2)) et les converti en ordres numériques (en fait une chaîne de nombres qui du type &amp;quot;05 456 -123&amp;quot; par exemple qui contient les informations de mouvement pour le robot). Ces informations sont envoyées via le réseau à un autre programme, le programme joystick-server.&lt;br /&gt;
&lt;br /&gt;
=== Le programme joystick-server ===&lt;br /&gt;
Codé en C++ également, il utilise la libtsocket. Le programme reçoit les chaines du mstormjoystick via un protocole textuel (&amp;quot;protocole&amp;quot; est un bien grand mot, en fait mstormjoystick se contente de balancer les lignes d'ordres séparées par un retour à la ligne). Le serveur analyse la chaine :&lt;br /&gt;
* Si l'ordre est entre 0 et 6, alors c'est un ordre avancer/reculer/stop/droite/gauche et il est posté dans la boite 3&lt;br /&gt;
* Si c'est un ordre 5 on récupère les valeurs des moteurs et on les place dans les boites 5 et 6&lt;br /&gt;
&lt;br /&gt;
=== Connexion de mstormjoystick à joystick-server ===&lt;br /&gt;
Pour diminuer les risques de détournement du robot par une force extraterrestre, le serveur va demander un mot de passe de connexion au client, via la commande IDENT. Le mot de passe est connu a l'avance et est passé comme paramètre aux deux programmes via l'option --key. L'échange se fait comme il suit (&amp;quot;&amp;gt;&amp;quot; est une commande du client et &amp;quot;&amp;lt;&amp;quot; une du serveur.&lt;br /&gt;
 &amp;gt; IDENT mot_de_passe&lt;br /&gt;
 &amp;lt; IDENT_OK&lt;br /&gt;
Si le mot de passe est bon et&lt;br /&gt;
 &amp;lt; IDENT_FAIL&lt;br /&gt;
sinon.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=843</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=843"/>
				<updated>2012-03-22T15:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Programme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice, elle est sous licence GNU/GPL. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=842</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=842"/>
				<updated>2012-03-22T15:53:50Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Programme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
==== Client_socket ====&lt;br /&gt;
Cette classe représente une socket client. Elle se déclare simplement :&lt;br /&gt;
 Client_socket::Client_socket(std::string p_host, int p_port, bool use_ssl = false)&lt;br /&gt;
On la connecte ainsi :&lt;br /&gt;
 Client_socket::connect_socket()&lt;br /&gt;
Et la ferme ainsi :&lt;br /&gt;
 Client_socket::close_socket()&lt;br /&gt;
&lt;br /&gt;
Les fonctions de lecture, écriture, accesseurs et mutateurs sont les mêmes que pour la classe Connected_socket()&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=840</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=840"/>
				<updated>2012-03-22T15:51:09Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Connected_socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
Enfin, on ferme la socket en appelant la méthode :&lt;br /&gt;
 Connected_socket::close_socket() // tadadaaaaaaaaam&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=839</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=839"/>
				<updated>2012-03-22T15:50:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Connected_socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour la lecture :&lt;br /&gt;
 std::string getline(); // Récupère la dernière ligne (en ancienneté) su buffer et l'efface&lt;br /&gt;
 std::vector&amp;lt;char&amp;gt; getchars(); // Récupère les octets du buffer et les efface&lt;br /&gt;
 std::string getchars_as_string(); // Récupère les octets du buffer en tant que chaine&lt;br /&gt;
 char getchar(); // Récupère le plus vieux caractère du buffer et l'efface&lt;br /&gt;
&lt;br /&gt;
Puis pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Enfin quelques accesseurs :&lt;br /&gt;
 std::string Connected_socket::get_host() // Renvoi l'IP&lt;br /&gt;
 int Connected_socket::get_port() // Renvoi le port&lt;br /&gt;
 bool Connected_socket::is_connected() // Renvoi si la socket est connectée, en cas d'erreur&lt;br /&gt;
                                       // de lecture ou d'écriture la socket sera considérée comme&lt;br /&gt;
                                       // fermée.&lt;br /&gt;
&lt;br /&gt;
Et les classiques opérateurs de comparaison == et != (qui portent sur l'host et le port de la socket)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=837</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=837"/>
				<updated>2012-03-22T15:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Connected_socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour la préparation à la lecture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protocoles en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protocole binaires).&lt;br /&gt;
&lt;br /&gt;
Ensuite pour l'écriture :&lt;br /&gt;
 int Connected_socket::write(std::string data) // Écrit une chaîne&lt;br /&gt;
 int Connected_socket::write(char c) // Écrit un octet&lt;br /&gt;
 int Connected_socket::write_line(std::string data) // Écrit une chaîne plus un retour chariot \n&lt;br /&gt;
&lt;br /&gt;
Puis pour l&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=835</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=835"/>
				<updated>2012-03-22T15:40:05Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* La libtsocket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
==== Connected_socket ====&lt;br /&gt;
Cette classe permet de gérer les connexions entrant sur une Server_socket. Le constructeur&lt;br /&gt;
n'a pas besoin d'être explicité (on construit la socket en lui passant le file descriptor&lt;br /&gt;
qui va bien et les éventuels paramètres de contexte SSL) car géré par le Server_socket.&lt;br /&gt;
Les fonctions intéressantes de cette classe sont les suivantes pour l'écriture :&lt;br /&gt;
 bool Connected_socket::can_getline() // Si une ligne a été reçue (pour les protos en mode texte&lt;br /&gt;
                                      // à la IRC, HTTP, ou juste Telnet.&lt;br /&gt;
 bool Connected_socket::can_getchar() // Pareil mais avec un char.&lt;br /&gt;
 bool Connected_socket::can_getchars() // Pareil mais avec plusieurs chars (octets pour les protos binaires).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=833</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=833"/>
				<updated>2012-03-22T15:35:50Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Server_socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 int Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
On peut ensuite récupérer les éventuelles connexions entrantes avec :&lt;br /&gt;
 std::vector&amp;lt;Connected_socket&amp;gt; Server_socket::get_pending();&lt;br /&gt;
Le vector étant de longueur nulle si personne ne tente de se connecter.&lt;br /&gt;
&lt;br /&gt;
On peut ensuite asser à la manipulation des sockets récupérées par le&lt;br /&gt;
biais de la classe Connected_socket.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=832</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=832"/>
				<updated>2012-03-22T15:33:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Server_socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
On bind la socket au port choisi avec :&lt;br /&gt;
 Server_socket::connect_socket(); // qui renvoie 0 si tout est glop, -1 si pas glop&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=831</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=831"/>
				<updated>2012-03-22T15:31:25Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Programme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de permettre de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ standard et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
==== Server_socket ====&lt;br /&gt;
Cette classe définit une socket serveur. Elle se déclare simplement :&lt;br /&gt;
 Server_socket(int port); // Pour une utilisation simple&lt;br /&gt;
 Server_socket(int port, int type, bool use_ssl, std::string cfile, std::string kfile); // Pour SSL&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=828</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=828"/>
				<updated>2012-03-22T15:27:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Programme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
* Server_socket qui définit une socket serveur&lt;br /&gt;
* Client_socket qui définit une socket client&lt;br /&gt;
* Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=827</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=827"/>
				<updated>2012-03-22T15:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Idée d'amélioration du guidage par wifi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
=== La libtsocket ===&lt;br /&gt;
La libtsocket est une petite bibliothèque réseau orientée objet développée par Thomas Maurice. C'est en fait une surcouche orientée objet des sockets de la STL. Elle a pour but de développer rapidement des petites applications réseau en ne se préoccupant pas de la partie manipulation des sockets qui est assez lourde à l'usage. La libtsocket inclue aussi la possibilité de se connecter en SSL (sans toutefois pouvoir effectuer de vérifications sur les certificats, versions de protocoles etc...) de manière assez simple. La bibliothèque est codée en C++ et est portable sous Linux et Windows (OSX non testé), elle se compose de 3 classes simples :&lt;br /&gt;
 * Server_socket qui définit une socket serveur&lt;br /&gt;
 * Client_socket qui définit une socket client&lt;br /&gt;
 * Connected_socket qui définit une socket connectée (récupérée par) une socket serveur. Elle s'utilise exactement comme une Client_socket (elles héritent toute deux de la classe mère Abstract_socket)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=820</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=820"/>
				<updated>2012-03-22T15:22:04Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Idée d'amélioration du guidage par wifi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Page man du programme mstormjoystick ===&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
=== Page man du programme joystick-server ===&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu tester et afficher les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=698</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=698"/>
				<updated>2012-03-12T09:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : l&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
==== Page man du programme mstormjoystick ====&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;br /&gt;
&lt;br /&gt;
== Problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
=== Mécaniques ===&lt;br /&gt;
Pour des raisons mécaniques, il arrive que la trajectoire du robot soit parfois biaisée. Ce défaut peut cependant être corrigé en adaptant un peu la direction du joystick. Nous avons du également amélioré la structure du robot, en la renforçant, pour éviter le flambage.&lt;br /&gt;
Une amélioration serait possible, en utilisant la boussole du robot, et en gardant le cap pour aller tout droit.&lt;br /&gt;
=== Réseaux ===&lt;br /&gt;
Nous avons eu quelques problèmes mineurs de connexions, notamment par rapport au bluetooth. Rien d'insurmontable, les solutions sont abordées plus haut, dans le man du programme joystick-server.&lt;br /&gt;
=== Programmation ===&lt;br /&gt;
Une des tâches les plus prenantes consiste à programmer le robot en nxc. Les difficultés ont été rencontrées à l'interface entre les senseurs, moteurs et le programme, parfois. Il a notamment fallu testé, affiché les valeurs recueillies par le robot, afin d'adapter les algorithmes. Les documentations disponibles permettent de s'en sortir, et même parfois de faire jouer la marche turque à tony.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=696</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=696"/>
				<updated>2012-03-12T08:53:42Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur envoi des ordres dans la &amp;quot;mailbox&amp;quot; du robot via bluetooth, en lui indiquant quelles actions effectuer (tourner un moteur,bipper...) et combien de temps.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros Tony ne demande plus qu'à être programmé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
==== Page man du programme mstormjoystick ====&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=693</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=693"/>
				<updated>2012-03-11T14:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Page man du programme joystick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros tony ne demande plus qu'à être ptogrammé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
==== Page man du programme mstormjoystick ====&lt;br /&gt;
&lt;br /&gt;
    mstormjoystick(1)          Joystick Mindstorm controller     mstormjoystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
           mstormjoystick - Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           mstormjoystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012          mstormjoystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=692</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=692"/>
				<updated>2012-03-11T13:52:18Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard, partie réseau réalisée avec une petite lib réseau en C++ la libtsocket)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros tony ne demande plus qu'à être ptogrammé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
==== Page man du programme joystick ====&lt;br /&gt;
&lt;br /&gt;
    joystick(1)              Joystick Mindstorm controller             joystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick  -  Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012               joystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=691</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=691"/>
				<updated>2012-03-11T13:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros tony ne demande plus qu'à être ptogrammé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
==== Page man du programme joystick ====&lt;br /&gt;
&lt;br /&gt;
    joystick(1)              Joystick Mindstorm controller             joystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick  -  Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012               joystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=690</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=690"/>
				<updated>2012-03-11T13:48:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros tony ne demande plus qu'à être ptogrammé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick ====&lt;br /&gt;
&lt;br /&gt;
    joystick(1)              Joystick Mindstorm controller             joystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick  -  Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012               joystick(1)&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick-server ====&lt;br /&gt;
    joystick-server(1)   Joystick-server Mindstorm controller   joystick-server(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick-server  -  Intermédiaire entre le robot Lego Mindstorm et&lt;br /&gt;
           la manette de jeu qui sert à le contrôler.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick-server --port port --key key --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de faire le lien entre le programme joystick et  le&lt;br /&gt;
           robot Lego Mindstorm équipé du programme guidage.nxc. Il transforme les&lt;br /&gt;
           commandes reçues par  le  logiciel  joystick  en  ordres  plus  simples&lt;br /&gt;
           (chaines  d'entiers) compréhensibles plus simplement par le robot. Pour&lt;br /&gt;
           communiquer avec le robot le programme utilise libbluetooth et une sur‐&lt;br /&gt;
           couche  fournie par les développeurs du NXC. Pour communiquer à travers&lt;br /&gt;
           le réseau, il utilise la libtsocket une petite bibliothèque réseau ori‐&lt;br /&gt;
           entée objet développée en C++.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port d'écoute&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
           --target XX:XX:XX:XX:XX:XX&lt;br /&gt;
                  Adresse MAC de la brique Lego Mindstorm&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le  programme se lance sur un ordinateur équipé d'une clef bluetooth ou&lt;br /&gt;
           bien de la foxboard qui est montée sur le robot. Le lancement n'est pas&lt;br /&gt;
           bien  compliqué,  il  suffit  de fournir les paramètres du programme au&lt;br /&gt;
           moment de taper la commande et c'est tout.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           La vitesse de transmission peut être lente si le  programme  est  lancé&lt;br /&gt;
           depuis une foxboard, dû à la lenteur de son tout petit processeur. Pour&lt;br /&gt;
           obtenir un résultat optimal, sans aucun lag, il faut le  lancer  depuis&lt;br /&gt;
           une 'vraie' machine.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    MESSAGES D'ERREUR&lt;br /&gt;
           Endpoint not connected&lt;br /&gt;
                  Le  programme  n'a  pas  réussi à s'appairer avec le robot, pour&lt;br /&gt;
                  pallier à cela vous devez lancer     'bluetooth-agent  1234'  et&lt;br /&gt;
                  répondre  positivement  à  la demande d'apairage qui s'affichera&lt;br /&gt;
                  sur la brique.&lt;br /&gt;
    &lt;br /&gt;
           No route to host&lt;br /&gt;
                  Le programme n'a pas pu initialiser le bluetooth.  Soit  la  clé&lt;br /&gt;
                  bluetooth  du  serveur  n'est  pas reconnue par le serveur, soit&lt;br /&gt;
                  elle n'est pas connectée soit le robot n'est pas dans  les  par‐&lt;br /&gt;
                  ages avec son bluetooth activé.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012        joystick-server(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=689</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=689"/>
				<updated>2012-03-11T13:45:45Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants: Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus, comme par exemple la non utilisation d'un moteur et l'espace insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidé de développer notre propre châssis plus large que celui de base, pour éviter de trop élever le robot par la suite en ajoutant des composants, afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice2.JPG|la construction du robot|200px|thumb|left]]&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo...).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les informations d'une manette de jeu (état des axes, hats et boutons) et les convertit en ordres simples (avancer/tourner à telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple à un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard)&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMaurice4.JPG|le prototype est bien avancé...|200px|thumb]]&lt;br /&gt;
[[Image:LancieriMaurice5.JPG|Le gros tony ne demande plus qu'à être ptogrammé...|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Page man du programme joystick ====&lt;br /&gt;
&lt;br /&gt;
    joystick(1)              Joystick Mindstorm controller             joystick(1)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    NAME&lt;br /&gt;
                joystick  -  Logiciel  de  contrôle du robot Lego Mindstorm via le&lt;br /&gt;
           réseau.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    SYNOPSIS&lt;br /&gt;
           joystick --host host --port port --key key&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DESCRIPTION&lt;br /&gt;
           Ce programme permet de communiquer avec le serveur  joystick-server  et&lt;br /&gt;
           de  ce fait de contrôler le robot Lego Mindstorm qui est equipé du pro‐&lt;br /&gt;
           gramme guidage.nxc. Ce programme est développé pour la manette  de  jeu&lt;br /&gt;
           Logitech  RumblePad  2,  il  est  donc  possible  qu'une  autre manette&lt;br /&gt;
           provoque des comportements inattendus si elle est utilisée avec ce pro‐&lt;br /&gt;
           gramme.  Pour capter les évènements de la manette, le programme utilise&lt;br /&gt;
           la bibliothèque SDL, et  pour  communiquer  à  travers  le  réseau,  il&lt;br /&gt;
           utilise  la  libtsocket  une  petite bibliothèque réseau orientée objet&lt;br /&gt;
           développée en C++.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    OPTIONS&lt;br /&gt;
           --host host&lt;br /&gt;
                  Spécifie l'host de connexion&lt;br /&gt;
    &lt;br /&gt;
           --port port&lt;br /&gt;
                  Spécifie le port de connexion&lt;br /&gt;
    &lt;br /&gt;
           --key pass&lt;br /&gt;
                  Spécifie le pass de connexion&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    UTILISATION&lt;br /&gt;
           Le programme se lance après avoir une manette configurée branchée à  la&lt;br /&gt;
           machine,  la  manette  sera automatiquement détectée (en théorie) et la&lt;br /&gt;
           connexion au serveur se fera automatiquement après la détection  de  la&lt;br /&gt;
           manette.  Les contrôles sont simples :&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les hats&lt;br /&gt;
                  Permettent  de contrôler le robot pas à pas, en fait ils permet‐&lt;br /&gt;
                  tent de résaliser le  plus  petit  déplacement  possible  dl  de&lt;br /&gt;
                  manière à diriger le robot en précision.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les axes&lt;br /&gt;
                  Permettent de diriger le robot en continu et non pas à pas comme&lt;br /&gt;
                  avec les hats. Lors d'un déplacement en avant, il  est  possible&lt;br /&gt;
                  de faire tirer le robot plus à droite ou plus à gauche pour cor‐&lt;br /&gt;
                  riger un éventuel défaut mécanique  ou  une  inégalité  du  sol.&lt;br /&gt;
                  C'est  en  revanche  impossible  si le robot recule, il reculera&lt;br /&gt;
                  bêtement en ligne droite. Notez que si le robot tourne, par gain&lt;br /&gt;
                  de  place,  il tournera sur place ce qui permet d'affiner encore&lt;br /&gt;
                  la direction.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
           Les boutons&lt;br /&gt;
                  Le bouton 9 est le bouton d'arrêt du  programme,  il  doit  être&lt;br /&gt;
                  utilisé pour quitter le programme joystick.  Le bouton 10 est le&lt;br /&gt;
                  bouton d'arrêt du programme ET du serveur (hébergé sur  la  même&lt;br /&gt;
                  machine  ou  sur  la  foxboard).  Appuyer  sur ce bouton causera&lt;br /&gt;
                  l'arrêt des deux processus.  Les boutons 3 et 1 permettent quand&lt;br /&gt;
                  à  eux  de  pivoter légèrement sur place sur la droite ou sur la&lt;br /&gt;
                  gauche.  Le bouton 5 permet au  robot  de  jouer  les  permières&lt;br /&gt;
                  mesures  de la marche impériale de Star Wars, du plus bel effet.&lt;br /&gt;
                  Le bouton 2 est un avertisseur sonor, un genre de klaxon  si  le&lt;br /&gt;
                  robot en a besoin.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    PROBLEMES CONNUS&lt;br /&gt;
           Parfois  les contôles semblent inversés, c'est parce que la manette est&lt;br /&gt;
           passée pour une raison X ou Y en mode axes  inversés,  appuyez  sur  le&lt;br /&gt;
           bouton mode et tout devrait rentrer dans l'ordre.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    AUTEURS&lt;br /&gt;
           Thomas Maurice &amp;lt;thomas.maurice@polytech-lille.net&amp;gt;&lt;br /&gt;
           Jean-Dominique Lancieri &amp;lt;jean-dominique.lancieri@polytech-lille.net&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    Version 1.0               Thomas MAURICE - Mars 2012               joystick(1)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=624</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=624"/>
				<updated>2012-02-10T12:21:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les information d'une manette de jeu (état des axes, hats et boutons) et les convertis en ordres simples (avancer/tourner a telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple a un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
(Programme client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard)&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=623</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=623"/>
				<updated>2012-02-10T12:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
* Un programme client récupère les information d'une manette de jeu (état des axes, hats et boutons) et les convertis en ordres simples (avancer/tourner a telle vitesse).&lt;br /&gt;
* Le programme client envoie les ordres via un protocole textuel simple a un programme serveur tournant sur la foxboard.&lt;br /&gt;
* Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
Programmes client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=622</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=622"/>
				<updated>2012-02-10T12:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Idée d'amélioration du guidage par wifi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo).&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
 * Un programme client récupère les information d'une manette de jeu (état des axes, hats et boutons) et les convertis en ordres simples (avancer/tourner a telle vitesse).&lt;br /&gt;
 * Le programme client envoie les ordres via un protocole textuel simple a un programme serveur tournant sur la foxboard.&lt;br /&gt;
 * Le programme serveur actionne /usr/bin/commande avec les paramètres fournis par le client pour piloter le robot.&lt;br /&gt;
&lt;br /&gt;
Programmes client en C++ avec la SDL pour la gestion du joystick et programme serveur en C++ standard.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=621</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=621"/>
				<updated>2012-02-10T12:12:54Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Idée d'amélioration du guidage par wifi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif (et plus rigolo).&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=620</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=620"/>
				<updated>2012-02-10T12:12:23Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Robot téléguidé 1, le Gros Tony */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=619</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=619"/>
				<updated>2012-02-10T12:11:45Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Robot téléguidé 1, le Gros Tony */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|left|thumb]]&lt;br /&gt;
Le robot au début de sa fabrication.&lt;br /&gt;
&lt;br /&gt;
== Idée d'amélioration du guidage par wifi ==&lt;br /&gt;
Plutôt que de récupérer les ordres de direction lorsque l'on clique sur la page web du robot, on peut les récupérer via un joystick raccordé à une machine qui enverra les ordres a la foxboard par wifi. Le guidage sera ainsi plus intuitif.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=618</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=618"/>
				<updated>2012-02-10T12:08:14Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* 1ère étape, construction du robot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|Châssis du robot au début|200px|left|thumb]]&lt;br /&gt;
Le robot au début de sa fabrication.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=617</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=617"/>
				<updated>2012-02-10T12:07:59Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Robot téléguidé 1, le Gros Tony */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;br /&gt;
&lt;br /&gt;
[[Image:LancieriMauriceBase1.jpg|&amp;quot;Châssis du robot au début&amp;quot;|200px|left|thumb]]&lt;br /&gt;
Le robot au début de sa fabrication.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=616</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=616"/>
				<updated>2012-02-10T12:00:52Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Robot téléguidé 1, le Gros Tony */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice. [[Fichier:http://3.bp.blogspot.com/_8VHUV0cso6I/SCQasNgoguI/AAAAAAAAAA0/BiA9MV1rWG8/s320/grostony.gif]]&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:LancieriMauriceBase1.jpg&amp;diff=615</id>
		<title>Fichier:LancieriMauriceBase1.jpg</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:LancieriMauriceBase1.jpg&amp;diff=615"/>
				<updated>2012-02-10T11:56:27Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : début de la construction du robot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;début de la construction du robot&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=614</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=614"/>
				<updated>2012-02-10T11:53:35Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Robot téléguidé 1, le Gros Tony=&lt;br /&gt;
Étudiants Jean-Dominique Lancieri et Thomas Maurice.&lt;br /&gt;
&lt;br /&gt;
== 1ère étape, construction du robot ==&lt;br /&gt;
&lt;br /&gt;
Pour construire le robot, nous avons d'abord essayé de suivre les instructions du manuel Lego fourni, mais plusieurs problèmes d'érgonomie sont assez vite apparus comme par exemple la non utilisation qui était faite d'un moteur et l'espacement insuffisant entre les moteurs restants pour intercaler les capteurs de luminosité et de puces RFID.&lt;br /&gt;
Nous avons donc décidés de développer notre propre chassis plus large que celui de base pour éviter de trop élever le robot par la suite en ajoutant des composants afin de conserver un assez bon équilibre.&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=574</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=574"/>
				<updated>2012-01-30T09:00:44Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Error 418 - [http://fr.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol I'm a teapot !]&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=572</id>
		<title>Teleguide2011-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Teleguide2011-1&amp;diff=572"/>
				<updated>2012-01-30T09:00:02Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : Page créée avec « Error 418 - http://fr.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Error 418 - [[I'm a teapot|http://fr.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol]]&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2011-2012&amp;diff=556</id>
		<title>BE 2011-2012</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2011-2012&amp;diff=556"/>
				<updated>2012-01-30T07:47:35Z</updated>
		
		<summary type="html">&lt;p&gt;Tmaurice : /* Robot téléguidé avec système embarqué */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= But à atteindre =&lt;br /&gt;
&lt;br /&gt;
Ce bureau d'étude a comme finalité la construction de robots patrouilleurs. Ces robots doivent parcourir de façon semi-autonome un espace en accumulant des données. Ces données peuvent être, par exemple, des images de leur environnement ou le résultat d'écoutes WiFi. Un robot semi-autonome est un robot capable de se déplacer dans son espace sans intervention humaine en suivant un balisage quelconque (marquage au sol, tags RFID, sons particuliers, etc). Un humain doit cependant pouvoir prendre le contrôle partiel ou total d'un robot. Le contrôle partiel consiste à faire varier la vitesse du robot, le sens du parcours du robot, etc. Le contrôle total consiste à gérer complétement le déplacement du robot, même si ce dernier évite encore les collisions (que le contrôleur pourrait ne pas avoir pu prévoir). Les robots doivent aussi pouvoir communiquer entre eux pour s'échanger des informations de positionnement, pour pouvoir s'éviter ou pour pouvoir se regrouper (par exemple pour pouvoir explorer en détail un lieu particulier). A ce propos il est fondamental que les robots sachent se positionner pour pouvoir annoter les informations envoyées ou stockées (images ou données).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Matériel à votre disposition =&lt;br /&gt;
&lt;br /&gt;
[[Image:boite_mindstorm.jpg|150px|right]]&lt;br /&gt;
[[Image:foxboard.jpg|150px|left]]&lt;br /&gt;
Les couches basses du robot seront réalisées à l'aide de Lego MindStorm. Le Lego va permettre de réaliser le chassis avec sa motorisation et d'y installer divers capteurs. Il est même possible d'assurer une certaine communication entre robots grâce à la technologie &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt; intégrée au micro-contrôleur MindStorm. Pour aller plus loin, il est nécessaire d'embarquer un micro-PC de type FoxBoard sur le robot. C'est ce micro-PC qui fera faire les acquisitions d'images ou les analyses WiFi et c'est à lui que le micro-contrôleur du MindStorm pourra envoyer ses données de localisation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Chaque binôme va se voir affecter une des problématiques décrites dans les sous-sections suivantes. Par la suite les résultats devront être incorporés dans chaque robot pour obtenir un robot tel que décrit plus haut. Notez que tous les robots doivent savoir s'arrêter quand un obstacle se présente devant eux (utilisation du sonar MindStorm).&lt;br /&gt;
&lt;br /&gt;
== Robot suiveur de ligne ==&lt;br /&gt;
Vous devez créer un robot capable de suivre une courbe discontinue au sol. Le robot doit être capable de réaliser les actions ci-dessous.&lt;br /&gt;
* en cas de perte du marquage, tourner dans un sens puis dans l'autre pour tenter de le retrouver avec des angles de plus en plus grands ;&lt;br /&gt;
* si le marquage ne peut pas être retrouvé, se remettre dans la position de la perte initiale et partir tout droit ;&lt;br /&gt;
* se remettre dans l'axe du marquage lorsque ce marquage est retrouvé ;&lt;br /&gt;
* s'arrêter quand un obstacle se présente devant lui et repartir si l'obstacle disparait ;&lt;br /&gt;
* changer de parcours sur commande, c'est à dire emprunter un parcours d'une couleur différente dès qu'il est rencontré ;&lt;br /&gt;
* inverser son sens de parcours.&lt;br /&gt;
&lt;br /&gt;
Voici des exemples de parcours discontinus pouvant être suivis dans les deux sens.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Parcours-carre.png|Parcours carré&lt;br /&gt;
File:Parcours-cercle.png‎|Parcours avec arcs&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prenom Nom, Prenom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Scotch de couleur&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[SuiveurLigne2011-1|Robot suiveur de ligne 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robots synchronisés ==&lt;br /&gt;
Cette étude sera menée par deux binômes. Vos deux robots doivent être capables de se synchroniser. Il vous est demandé de réaliser le comportement suivant :&lt;br /&gt;
&lt;br /&gt;
* séparés, les robots avancent tout droit et s'arrêtent dès qu'ils détectent un obstacle avec leur sonar ;&lt;br /&gt;
* les deux robots doivent pouvoir être couplés côte à côte ;&lt;br /&gt;
* dans le mode couplé, les robots avancent quand aucun obstacle n'est détecté par leurs sonars ;&lt;br /&gt;
* dans le mode couplé, si un robot détecte un obstacle et l'autre non le couple tourne dans la direction où aucun obstacle n'est détecté.&lt;br /&gt;
&lt;br /&gt;
La communication entre les deux robots se fait par &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prenom Nom, Prenom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Synchronize2011-1|Robot communicant 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prenom Nom, Prenom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Synchronize2011-2|Robot communicant 2]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot suiveur RFID ==&lt;br /&gt;
Vous doterez votre robot d'un lecteur RFID et d'une boussole. Votre robot doit être capable de réaliser les opérations ci-après :&lt;br /&gt;
&lt;br /&gt;
* trouver sous une marque de couleur précise (feuille A4, disque, ...) une carte RFID ;&lt;br /&gt;
* partir dans une direction donnée ; le robot s'oriente avec la boussole puis se lance avec ses deux moteurs sans tenter de corriger la trajectoire ;&lt;br /&gt;
* mémoriser des caps en fonction des identifiants des cartes RFID.&lt;br /&gt;
&lt;br /&gt;
Par la suite vous intégrez ces trois fonctionnalités pour obtenir un robot capable de suivre une trajectoire matérialisée par des marques sous lesquelles une carte RFID est dissimulée.&lt;br /&gt;
Quand le robot détecte une marque via son capteur de couleur, il se met à chercher l'emplacement exact de la carte RFID. Une fois la carte localisée, le robot trouve le prochain cap à suivre en fonction de l'identifiant de la carte RFID. Le robot s'oriente sur ce cap avec sa boussole puis se lance vers la marque suivante. Et ainsi de suite.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de parcours en suivant des marques RFID.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Parcours-marques.png|Parcours RFID&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prenom Nom, Prenom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Module RFID&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Cartes RFID&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;module boussole&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Marques de couleur&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[SuiveurRFID2011-1|Robot suiveur RFID 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot naviguant aux instruments ==&lt;br /&gt;
Vous doterez votre robot d'une boussole pour lui permettre de connaitre précisement sa direction. Vous devez réaliser les actions décrites dans la suite.&lt;br /&gt;
&lt;br /&gt;
* Vous commencerez par faire en sorte que votre robot sache avancer en ligne droite, pour cela vous utiliserez le contrôle PID décrit sur la page [http://wikipedia.org/wiki/PID_controller WikiPedia]. Pour simplifier ce qui est dit sur cette page, sachez le principe appliqué à votre robot va être d'effectuer des corrections sur la trajectoire en utilisant des rotations. L'angle de ces rotations va être calculé en fonction de l'erreur de trajectoire indiqué par la boussole. Plus exactement par la somme d'une constante multipliée par l'erreur instantanée, d'une autre constante multipliée par l'intégrale de l'erreur et enfin d'une dernière constante multipliée par la dérivée de l'erreur. A vous de trouver les valeurs adaptées des trois constantes.&lt;br /&gt;
&lt;br /&gt;
* Par la suite faites en sorte que votre robot sache contourner les obstacles au plus juste. Au plus juste signifiant qu'il tournera vers la droite ou vers la gauche en jugeant d'où se trouve le chemin le plus libre. L'algorithme a appliquer consiste à tourner le robot d'un angle faible dans un sens puis dans l'autre et de lire les resultats du sonar. Si les deux mesures indiquent un obstacle trop proche, l'angle est augmenté et le procédé répété. Dès qu'une trajectoire indique un chemin libre ou du moins un obstacle à distance suffisante, le robot avance en ligne droite suivant cette trajectoire. La boussole doit être utilisée ici pour vérifier que le robot effectue précisement des rotations des angles souhaités et qu'il sache revenir en position initiale pour éventuellement recommencer avec un angle plus grand.&lt;br /&gt;
&lt;br /&gt;
* Pour permettre de suivre le comportement du robot, faites afficher sur la brique de contrôle MindStorm l'angle de rotation pour le dernier contournement et la distance parcourue le long de la dernière ligne droite.&lt;br /&gt;
&lt;br /&gt;
Intégrez les comportements pour obtenir un robot capable de contourner les obstacles avec un minimum d'intelligence.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de contournement d'obstacle avec l'algorithme décrit.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Parcours-boussole.png|Contournement d'obstacle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prenom Nom, Prenom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Module boussole&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Boussole2011-1|Robot boussole 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot téléguidé avec système embarqué ==&lt;br /&gt;
Votre robot doit pouvoir être radio-guidé par un contrôleur. Le dit contrôleur peut diriger le robot au vu de l'image de la webcam embarquée. L'acquisition de la webcam et sa diffusion par WiFi est assuré par un système embarqué FoxBoard. La FoxBoard vous sera livrée configurée mais il faudra l'embarquer dans votre robot avec tous ses accessoires (webcam, module &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;, boitier de piles). Un calcul du temps d'autonomie doit être effectué. Dans un premier temps le radio-guidage peut se faire à l'aide du logiciel MindStorm par &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;. Dans un second temps il faut étudier la possibilité d'un radio-guidage par WiFi, les ordres étant transmis par un navigateur Web au serveur Web de la FoxBoard puis transmis au micro-contrôleur MindStorm par &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;. Vous aurez le choix de programmer votre robot avec le logiciel MindStorm ou avec un langage de bas niveau proche du langage C (voir la page web [http://www.eggwall.com/2011/08/lego-nxt-mindstorm-with-linux.html]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jean-Dominique Lancieri - Thomas Maurice &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;  &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Téléphone Android&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;FoxBoard avec webcam, interface WiFi, convertisseur &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Boitier piles&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Teleguide2011-1|Robot téléguidé 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Intégration des fonctionnalités =&lt;br /&gt;
Une fois toutes les études terminées et les solutions implantées (sous forme de briques personnalisées par exemple), vous doterez votre robot des fonctionnalités nécessaires à la réalisation de la démonstration finale. Votre robot doit être capable de suivre des marquages discontinus au sol, être capable de communiquer avec les autres robots, être capable de se repérer dans l'espace en repérant des cartes RFID et enfin doit embarquer une FoxBoard avec une connexion WiFi et une webcam.&lt;br /&gt;
&lt;br /&gt;
Les robots peuvent se trouver soit dans un mode autonome soit dans un mode téléguidé. Dans le mode téléguidé, le robot est contrôlé à l'aide d'un téléphone Android connecté sur le réseau WiFi de l'école. Il doit être possible de le faire avancer, reculer ou tourner. Il doit être possible aussi d'obtenir une image de la webcam.&lt;br /&gt;
&lt;br /&gt;
Le comportement en mode autonome est plus complexe :&lt;br /&gt;
* le robot tente de suivre un marquage de couleur au sol, ce marquage peut être discontinu, la boussole est utilisée pour passer en ligne droite d'un marquage à l'autre et pour suivre les marquages ;&lt;br /&gt;
* le contrôleur peut demander à un robot de changer de sens de parcours ou de changer de couleur de parcours ;&lt;br /&gt;
* dès qu'il trouve une carte RFID sur ce marquage, la FoxBoard est prévenue et stocke une image correspondant à l'identifiant de la carte RFID ;&lt;br /&gt;
* les robots communiquent en &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt; à leur FoxBoard la couleur du parcours suivi, les FoxBoard diffusent cette information entre elles ;&lt;br /&gt;
* quand une FoxBoard s'aperçoit qu'un parcours est utilisé par moins de robots qu'un autre parcours, elle peut demander à son robot de changer de couleur de parcours pour équilibrer le nombre de robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Boite lego MindStorm&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Module RFID&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Module boussole&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Téléphone Android&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;FoxBoard&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;WebCam&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Adaptateur USB/WiFi&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Adaptateur BlueTooth&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Hub USB&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Boitier piles&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Nombre&amp;lt;/th&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;7/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;7/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;7/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;8/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;8/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;8/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;8/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;?/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;?/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;?/8&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Démonstration finale =&lt;br /&gt;
Pour la démonstration finale vous tracerez une grande piste comprenant au moins deux parcours (voir schéma ci-dessous). Des cartes RFID doivent être disposées en des points précis de chaque parcours. Vous placerez vos robots sur l'un des parcours, tous orientés dans le même sens. Les robots vont cheminer un certain temps sur ce parcours (l'occasion de vérifier le bon suivi du marquage au sol et que les robots savent tenir leurs distances). Ils doivent ensuite se répartir automatiquement sur les deux parcours disponibles. Un contrôleur ordonne à son robot de changer de sens de parcours. Les robots devraient se bloquer. Le contrôleur téléguide le robot pour le sortir du parcours, les autres robots devraient se débloquer.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de double parcours.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Parcours-double.png|Parcours double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tmaurice</name></author>	</entry>

	</feed>