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

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41945</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41945"/>
				<updated>2017-05-10T11:23:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines parties du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/désactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le ''Manager'', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package ''llsf_msgs'' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de ''setup'' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est ''down'' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de ''setup'', elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons dû chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant, en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons dû implémenter le système de gestion de collisions. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposé la théorie en plusieurs morceaux. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proches entre chaque structure, et enfin une fonction déterminant s'il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercles, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous donne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on teste zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de cela, nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible, soit une collision. Lorsque l'on a la zone, on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe Manager a été transformée en Singleton. C'est un ''pattern'' de programmation permettant de n'instancier une classe qu'en un seul exemplaire unique accessible partout dans le programme. Dans notre cas, cela est particulièrement utile car le Manager permet de gérer les équipes et leurs états. On a seulement besoin d'instancier les équipes du Manager une seule fois au début du Match, et pas à chaque fois qu'on souhaite y accéder.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi débuté la communication avec la RefereeBox. Il y a trois modes de communication avec celle-ci : en tant que &amp;quot;pair&amp;quot; (communication UDP) sur un canal public, idem sur un canal privé ou en tant que &amp;quot;contrôleur&amp;quot; (communication TCP).&lt;br /&gt;
Dans notre cas, c'est le mode &amp;quot;contrôleur&amp;quot; qui nous intéresse : en effet, nous devons avoir accès à toutes les informations de l'arbitre pour pouvoir réaliser une simulation correcte, et seul la communication en TCP le permet. En UDP sur canal public, seul un nombre très limité d'informations est disponible et sur canal privé les informations sont cryptées pour les cacher à l'autre équipe.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc pour cela, après avoir réalisé l'installation de la RefereeBox avec le projet ''llsf-refbox'' dont nous avons parlé semaine 10, créé une classe ''ClientTCP'' d'après un exemple inclus dans le projet installé. Le client s'inscrit comme devant recevoir certains types de messages, par exemple le message de type ''llsf_msgs::MachineInfo'', qui permet d'obtenir les positions des machines et leur état. Ensuite, lorsqu'il reçoit un nouveau message, on vérifie de quel type il s'agit et on agit en conséquence. Dans l'exemple précédent, on appelle ainsi une fonction d'initialisation de la position des machines une unique fois après la réception d'un message de type MachineInfo, lorsque le Manager est initialisé mais que les positions des machines ne le sont pas. Cette fonction prenant en paramètre le message reçu, on n'a plus qu'à changer les différentes valeurs nécessaires.&lt;br /&gt;
&lt;br /&gt;
Pour tester cela, nous avons utilisé la Refbox. Pour la démarrer, il faut se trouver dans le dossier ''llsf-refbox/bin'' et exécuter deux scripts; d'abord &lt;br /&gt;
''llsf-refbox'' pour la démarrer puis ''llsf-refbox-shell'' pour voir une interface graphique de gestion apparaître dans le terminal.&lt;br /&gt;
&lt;br /&gt;
De la façon dont nous avons réalisé le projet, il est nécessaire de créer dans son ''bashrc'' une variable d'environnement ROBOCUP_DIR qui correspond au répertoire ROS qui contient le projet et la Referee Box. Celle-ci permet d'utiliser les messages du package ''llsf_msgs''.&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41943</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41943"/>
				<updated>2017-05-10T11:23:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Liste des tâches à effectuer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/désactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le ''Manager'', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package ''llsf_msgs'' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de ''setup'' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est ''down'' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de ''setup'', elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons dû chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant, en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons dû implémenter le système de gestion de collisions. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposé la théorie en plusieurs morceaux. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proches entre chaque structure, et enfin une fonction déterminant s'il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercles, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous donne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on teste zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de cela, nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible, soit une collision. Lorsque l'on a la zone, on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe Manager a été transformée en Singleton. C'est un ''pattern'' de programmation permettant de n'instancier une classe qu'en un seul exemplaire unique accessible partout dans le programme. Dans notre cas, cela est particulièrement utile car le Manager permet de gérer les équipes et leurs états. On a seulement besoin d'instancier les équipes du Manager une seule fois au début du Match, et pas à chaque fois qu'on souhaite y accéder.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi débuté la communication avec la RefereeBox. Il y a trois modes de communication avec celle-ci : en tant que &amp;quot;pair&amp;quot; (communication UDP) sur un canal public, idem sur un canal privé ou en tant que &amp;quot;contrôleur&amp;quot; (communication TCP).&lt;br /&gt;
Dans notre cas, c'est le mode &amp;quot;contrôleur&amp;quot; qui nous intéresse : en effet, nous devons avoir accès à toutes les informations de l'arbitre pour pouvoir réaliser une simulation correcte, et seul la communication en TCP le permet. En UDP sur canal public, seul un nombre très limité d'informations est disponible et sur canal privé les informations sont cryptées pour les cacher à l'autre équipe.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc pour cela, après avoir réalisé l'installation de la RefereeBox avec le projet ''llsf-refbox'' dont nous avons parlé semaine 10, créé une classe ''ClientTCP'' d'après un exemple inclus dans le projet installé. Le client s'inscrit comme devant recevoir certains types de messages, par exemple le message de type ''llsf_msgs::MachineInfo'', qui permet d'obtenir les positions des machines et leur état. Ensuite, lorsqu'il reçoit un nouveau message, on vérifie de quel type il s'agit et on agit en conséquence. Dans l'exemple précédent, on appelle ainsi une fonction d'initialisation de la position des machines une unique fois après la réception d'un message de type MachineInfo, lorsque le Manager est initialisé mais que les positions des machines ne le sont pas. Cette fonction prenant en paramètre le message reçu, on n'a plus qu'à changer les différentes valeurs nécessaires.&lt;br /&gt;
&lt;br /&gt;
Pour tester cela, nous avons utilisé la Refbox. Pour la démarrer, il faut se trouver dans le dossier ''llsf-refbox/bin'' et exécuter deux scripts; d'abord &lt;br /&gt;
''llsf-refbox'' pour la démarrer puis ''llsf-refbox-shell'' pour voir une interface graphique de gestion apparaître dans le terminal.&lt;br /&gt;
&lt;br /&gt;
De la façon dont nous avons réalisé le projet, il est nécessaire de créer dans son ''bashrc'' une variable d'environnement ROBOCUP_DIR qui correspond au répertoire ROS qui contient le projet et la Referee Box. Celle-ci permet d'utiliser les messages du package ''llsf_msgs''.&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41890</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41890"/>
				<updated>2017-05-09T22:01:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le ''Manager'', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package ''llsf_msgs'' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de ''setup'' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est ''down'' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de ''setup'', elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons dû chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant, en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons dû implémenter le système de gestion de collisions. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposé la théorie en plusieurs morceaux. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proches entre chaque structure, et enfin une fonction déterminant s'il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercles, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous donne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on teste zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de cela, nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible, soit une collision. Lorsque l'on a la zone, on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe Manager a été transformée en Singleton. C'est un ''pattern'' de programmation permettant de n'instancier une classe qu'en un seul exemplaire unique accessible partout dans le programme. Dans notre cas, cela est particulièrement utile car le Manager permet de gérer les équipes et leurs états. On a seulement besoin d'instancier les équipes du Manager une seule fois au début du Match, et pas à chaque fois qu'on souhaite y accéder.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi débuté la communication avec la RefereeBox. Il y a trois modes de communication avec celle-ci : en tant que &amp;quot;pair&amp;quot; (communication UDP) sur un canal public, idem sur un canal privé ou en tant que &amp;quot;contrôleur&amp;quot; (communication TCP).&lt;br /&gt;
Dans notre cas, c'est le mode &amp;quot;contrôleur&amp;quot; qui nous intéresse : en effet, nous devons avoir accès à toutes les informations de l'arbitre pour pouvoir réaliser une simulation correcte, et seul la communication en TCP le permet. En UDP sur canal public, seul un nombre très limité d'informations est disponible et sur canal privé les informations sont cryptées pour les cacher à l'autre équipe.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc pour cela, après avoir réalisé l'installation de la RefereeBox avec le projet ''llsf-refbox'' dont nous avons parlé semaine 10, créé une classe ''ClientTCP'' d'après un exemple inclus dans le projet installé. Le client s'inscrit comme devant recevoir certains types de messages, par exemple le message de type ''llsf_msgs::MachineInfo'', qui permet d'obtenir les positions des machines et leur état. Ensuite, lorsqu'il reçoit un nouveau message, on vérifie de quel type il s'agit et on agit en conséquence. Dans l'exemple précédent, on appelle ainsi une fonction d'initialisation de la position des machines une unique fois après la réception d'un message de type MachineInfo, lorsque le Manager est initialisé mais que les positions des machines ne le sont pas. Cette fonction prenant en paramètre le message reçu, on n'a plus qu'à changer les différentes valeurs nécessaires.&lt;br /&gt;
&lt;br /&gt;
Pour tester cela, nous avons utilisé la Refbox. Pour la démarrer, il faut se trouver dans le dossier ''llsf-refbox/bin'' et exécuter deux scripts; d'abord &lt;br /&gt;
''llsf-refbox'' pour la démarrer puis ''llsf-refbox-shell'' pour voir une interface graphique de gestion apparaître dans le terminal.&lt;br /&gt;
&lt;br /&gt;
De la façon dont nous avons réalisé le projet, il est nécessaire de créer dans son ''bashrc'' une variable d'environnement ROBOCUP_DIR qui correspond au répertoire ROS qui contient le projet et la Referee Box. Celle-ci permet d'utiliser les messages du package ''llsf_msgs''.&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41889</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41889"/>
				<updated>2017-05-09T21:56:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Heures supplémentaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons du chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
Nous avons du implémenter le système de gestion de collision. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposer la théorie en plusieurs. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proche entre chaque structure. Et enfin une fonction déterminant si il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercle, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles. Puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous odnne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on test zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de ça nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible soit une collision. Lorsque l'on à la zone on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe Manager a été transformée en Singleton. C'est un ''pattern'' de programmation permettant de n'instancier une classe qu'en un seul exemplaire unique accessible partout dans le programme. Dans notre cas, cela est particulièrement utile car le Manager permet de gérer les équipes et leurs états. On a seulement besoin d'instancier les équipes du Manager une seule fois au début du Match, et pas à chaque fois qu'on souhaite y accéder.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi débuté la communication avec la RefereeBox. Il y a trois modes de communication avec celle-ci : en tant que &amp;quot;pair&amp;quot; (communication UDP) sur un canal public, idem sur un canal privé ou en tant que &amp;quot;contrôleur&amp;quot; (communication TCP).&lt;br /&gt;
Dans notre cas, c'est le mode &amp;quot;contrôleur&amp;quot; qui nous intéresse : en effet, nous devons avoir accès à toutes les informations de l'arbitre pour pouvoir réaliser une simulation correcte, et seul la communication en TCP le permet. En UDP sur canal public, seul un nombre très limité d'informations est disponible et sur canal privé les informations sont cryptées pour les cacher à l'autre équipe.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc pour cela, après avoir réalisé l'installation de la RefereeBox avec le projet ''llsf-refbox'' dont nous avons parlé semaine 10, créé une classe ''ClientTCP'' d'après un exemple inclus dans le projet installé. Le client s'inscrit comme devant recevoir certains types de messages, par exemple le message de type ''llsf_msgs::MachineInfo'', qui permet d'obtenir les positions des machines et leur état. Ensuite, lorsqu'il reçoit un nouveau message, on vérifie de quel type il s'agit et on agit en conséquence. Dans l'exemple précédent, on appelle ainsi une fonction d'initialisation de la position des machines une unique fois après la réception d'un message de type MachineInfo, lorsque le Manager est initialisé mais que les positions des machines ne le sont pas. Cette fonction prenant en paramètre le message reçu, on n'a plus qu'à changer les différentes valeurs nécessaires.&lt;br /&gt;
&lt;br /&gt;
Pour tester cela, nous avons utilisé la Refbox. Pour la démarrer, il faut se trouver dans le dossier ''llsf-refbox/bin'' et exécuter deux scripts; d'abord &lt;br /&gt;
''llsf-refbox'' pour la démarrer puis ''llsf-refbox-shell'' pour voir une interface graphique de gestion apparaître dans le terminal.&lt;br /&gt;
&lt;br /&gt;
De la façon dont nous avons réalisé le projet, il est nécessaire de créer dans son ''bashrc'' une variable d'environnement ROBOCUP_DIR qui correspond au répertoire ROS qui contient le projet et la Referee Box. Celle-ci permet d'utiliser les messages du package ''llsf_msgs''.&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41888</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41888"/>
				<updated>2017-05-09T21:34:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons du chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
Nous avons du implémenter le système de gestion de collision. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposer la théorie en plusieurs. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proche entre chaque structure. Et enfin une fonction déterminant si il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercle, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles. Puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous odnne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on test zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de ça nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible soit une collision. Lorsque l'on à la zone on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41887</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41887"/>
				<updated>2017-05-09T21:34:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication en place pour l'affichage des machines à leur position de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons du chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
Nous avons du implémenter le système de gestion de collision. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposer la théorie en plusieurs. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proche entre chaque structure. Et enfin une fonction déterminant si il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercle, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles. Puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous odnne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on test zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de ça nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible soit une collision. Lorsque l'on à la zone on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41886</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41886"/>
				<updated>2017-05-09T21:33:04Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|18&lt;br /&gt;
|101&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|25&lt;br /&gt;
|206&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Implémentation de la fonction de regroupement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°3, on observe le même comportement qu'avec la zone n°2 mais cette fois-ci à l'horizontal, les équations sont donc les mêmes avec une inversion des x en y et inversement.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
Lié à la Referee Box, nous avons du chercher à synchroniser le temps de celle-ci avec le simulateur. Cependant en observant le code du simulateur Gazebo (actuellement non fonctionnel) et la manière de communiquer avec l'arbitre, nous avons conclu que nous n'avions pas le temps de le faire.&lt;br /&gt;
&lt;br /&gt;
Nous avons du implémenter le système de gestion de collision. Graphiquement et avec les équations, il est simple pour un être humain de comprendre le fonctionnement. Cependant le code impose plus de restriction. Nous avons donc décomposer la théorie en plusieurs. Une fonction pour obtenir la distance entre deux points, plusieurs fonctions permettant de déterminer les points les plus proche entre chaque structure. Et enfin une fonction déterminant si il y a collision.&lt;br /&gt;
&lt;br /&gt;
Pour les cercle, il faut déterminer l'équation de la droite qui passe par le centre des deux cercles. Puis résoudre le système correspondant à l'intersection de la droite et du cercle qui nous odnne une équation du second degré. On choisit alors le point le plus proche de l'autre cercle.&lt;br /&gt;
&lt;br /&gt;
Pour un cercle et un rectangle, on test zone par zone. Nous ne sommes pas obligés de nous placer dans le référentiel du rectangle. Au lieu de ça nous allons vérifier zone par zone l'appartenance du cercle à celles-ci grâce aux systèmes composés de trois droites (les cotés du rectangles) pour les zones latérales et de deux pour les zones d'angles. Ces systèmes s'excluent les uns les autres. Si le cercle n'est dans aucune zone alors il est à l'intérieur du rectangle. Ce qui est soit une situation impossible soit une collision. Lorsque l'on à la zone on résout le système correspondant (décrit lors de la semaine 9). Cette implémentation n'a pas été faite entièrement durant cette semaine. Nous l'avons continué lors du temps supplémentaire.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41490</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41490"/>
				<updated>2017-04-27T07:29:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|7&lt;br /&gt;
|90&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|14&lt;br /&gt;
|195&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41489</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41489"/>
				<updated>2017-04-27T07:29:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|7&lt;br /&gt;
|90&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|12,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|14&lt;br /&gt;
|193&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41488</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41488"/>
				<updated>2017-04-27T07:28:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|7&lt;br /&gt;
|90&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|10,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|12&lt;br /&gt;
|193&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons avancé sur la simulation en permettant à une 'Equipe' d'afficher ses six machines et ses trois robots. Le 'Manager', lui, affiche les deux équipes; nous avons ainsi tous les acteurs d'un match sur le même terrain.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé la Referee Box, dans la prévision du travail sur la communication entre simulation et celle-ci, mais aussi pour pouvoir utiliser des types de messages particuliers du package 'llsf_msgs' inclus avec la Referee Box.&lt;br /&gt;
&lt;br /&gt;
En effet, les machines changent d'état en fonction des commandes qu'elles reçoivent. En effet, les équipes doivent remplir des commandes tout au long du match, et les robots ordonnent ainsi aux machines de produire des types de pièces particuliers. &lt;br /&gt;
Ils commencent par envoyer un message de 'setup' qui va indiquer à la machine quel type de pièce préparer. À ce moment là la machine change d'état (état occupé) et ceci est reflété dans la couleur de son feu.&lt;br /&gt;
Lorsque la pièce est disponible, la machine rechange d'état pour être de nouveau disponible. &lt;br /&gt;
&lt;br /&gt;
Il existe également d'autres types d'états, comme lorsque la machine est 'down' lors d'une maintenance programmée décidée par la Referee Box au début du match, lorsque la machine vient de recevoir un ordre ou encore lorsqu'un robot tente de l'utiliser sans lui envoyer de message de 'setup, elle est alors hors-service pendant un certain moment.&lt;br /&gt;
&lt;br /&gt;
===Heures supplémentaires===&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par ajouter l'affichage des feux (composés d'un rectangle et de trois cercles rouge, jaune, vert). &lt;br /&gt;
En fonction de l'état de la machine  à laquelle ils appartiennent, les couleurs affichés changent. D'après le règlement, si tout va bien le feu sera vert fixe, si la machine est occupée il sera jaune fixe et si la machine est en maintenance programmée il sera rouge fixe. Si la machine vient de recevoir un ordre, il sera vert clignotant et si elle est hors-service il sera clignotant jaune et rouge. &lt;br /&gt;
&lt;br /&gt;
C'est pourquoi nous avons aussi implémenté le clignotement de celui-ci qu'il est possible de voir dans la vidéo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Enfin, les machines seront positionnées de différentes manières au début d'un match, il est donc nécessaire que le feu associé ait la même rotation que sa machine. &lt;br /&gt;
Nous avons ainsi commencé par permettre aux cercles du haut et du bas d'effectuer un rotation autour du cercle central. Une fois la chose faite, nous avons modifié la rotation d'une machine. En effet, jusque là elle était implémentée de la même manière que pour les robots, or ceux-ci se déplacent et pas notre machine. Il n'est donc pas nécessaire que la flèche soit en rotation mais plutôt qu'elle soit positionnée de manière fixe (mais cela reste modifiable dans le code) et que ce soit le rectangle de la machine qui effectue une rotation sur lui-même. Il en va de même pour le rectangle du feu.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons dû gérer le positionnement du feu par rapport au rectangle : il faut, lorsque la machine effectue une rotation, calculer la position de son coin inférieur gauche et positionner le feu par rapport à celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_feu_45_degres.png|Feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_135_degres.png|Machine et son feu en rotation&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_down.png|Machine en état de maintenance programmée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_busy.png|Machine occupée&lt;br /&gt;
Fichier:Rviz_screenshot_machine_state_ok.png|Machine disponible&lt;br /&gt;
Fichier:Feu_clignotant.mp4|Vidéo du feu qui clignote&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_135_degres.png&amp;diff=41487</id>
		<title>Fichier:Rviz screenshot machine 135 degres.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_135_degres.png&amp;diff=41487"/>
				<updated>2017-04-27T06:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Affichage d'un feu de machine sur une machine en rotation dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage d'un feu de machine sur une machine en rotation dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_feu_45_degres.png&amp;diff=41486</id>
		<title>Fichier:Rviz screenshot feu 45 degres.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_feu_45_degres.png&amp;diff=41486"/>
				<updated>2017-04-27T06:47:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Affichage d'un feu de machine en rotation dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage d'un feu de machine en rotation dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_down.png&amp;diff=41485</id>
		<title>Fichier:Rviz screenshot machine state down.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_down.png&amp;diff=41485"/>
				<updated>2017-04-27T06:45:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Affichage d'un feu de machine dans l'état 'Down' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage d'un feu de machine dans l'état 'Down' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_ok.png&amp;diff=41484</id>
		<title>Fichier:Rviz screenshot machine state ok.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_ok.png&amp;diff=41484"/>
				<updated>2017-04-27T06:45:05Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Affichage d'un feu de machine dans l'état 'Ok' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage d'un feu de machine dans l'état 'Ok' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_busy.png&amp;diff=41483</id>
		<title>Fichier:Rviz screenshot machine state busy.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine_state_busy.png&amp;diff=41483"/>
				<updated>2017-04-27T06:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Affichage d'un feu de machine dans l'état 'Busy' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage d'un feu de machine dans l'état 'Busy' dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Feu_clignotant.mp4&amp;diff=41482</id>
		<title>Fichier:Feu clignotant.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Feu_clignotant.mp4&amp;diff=41482"/>
				<updated>2017-04-27T06:41:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Vidéo de l'affichage d'un feu de machine clignotant dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vidéo de l'affichage d'un feu de machine clignotant dans RViz (heures supplémentaires) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41481</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41481"/>
				<updated>2017-04-27T06:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures supplémentaires !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|33.5&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|7&lt;br /&gt;
|90&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|37&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|10,5&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|Total&lt;br /&gt;
|4&lt;br /&gt;
|18&lt;br /&gt;
|15,5&lt;br /&gt;
|20,5&lt;br /&gt;
|21,5&lt;br /&gt;
|12,5&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|19&lt;br /&gt;
|19,5&lt;br /&gt;
|12,5&lt;br /&gt;
|12&lt;br /&gt;
|193&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
 (x−xc)²+(y−yc)²==R²&lt;br /&gt;
 y= ax+b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41171</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41171"/>
				<updated>2017-04-05T15:39:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons dû concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots, soit deux cercles, est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient très grand. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine nous avons aussi travaillé sur la production elle-même en complétant les classes du package ''machine''. Nous avons ainsi ajouté à chaque sous-classe une fonction ''setup'' qui permet d'initialiser la machine, la plupart du temps avec une couleur d'anneau ou de base, et pour la ''DeliveryStation'' avec un numéro de porte.&lt;br /&gt;
&lt;br /&gt;
Ces fonctions seront ensuite appelées dans un nœud ''machines_node'' du package ''management''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41157</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41157"/>
				<updated>2017-04-05T14:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons du concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots soit deux cercles est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient rapidement très grands. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la Zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41156</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41156"/>
				<updated>2017-04-05T14:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons du concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots soit deux cercles est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient rapidement très grands. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la Zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41155</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=41155"/>
				<updated>2017-04-05T14:11:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons du concevoir une fonction de récupération de distance entre deux entités.&lt;br /&gt;
Les robots étant les seules entités mobiles, nous ne calculons que la distance entre un robot et une autre entité.&lt;br /&gt;
La distance entre deux robots soit deux cercles est facile à déterminer. Nous récupérons les points des deux cercles étant sur la droite passant par les centres des dits cercles. Puis nous appliquons le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il s'agit de calculer la distance la plus courte avec un rectangle, c'est un peu plus compliqué et très rapidement le nombre de calculs devient rapidement très grands. Nous avons choisi une stratégie calculatoire réduisant le nombre de calculs avec les conseils de Mme Nathalie Delfosse.&lt;br /&gt;
&lt;br /&gt;
Le problème est de trouver la distance la plus courte entre les deux formes ainsi que les points concernés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_1.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Nous pouvons facilement tracer la Zone de collision, soit la zone qui permet de dire qu'il y a une collision si le centre du robot est dessus.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GD_2.png|500px|center|texte descriptif]] &lt;br /&gt;
&lt;br /&gt;
Ensuite on découpe l'espace en 8 zones en prolongeant les cotés du rectangle pour en faire des droites.&lt;br /&gt;
[[Fichier:GD_3.png|500px|center|texte descriptif]]&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un robot se situe en zone n°1 alors la distance la plus proche est celle qui sépare le cercle de l'angle le plus proche du rectangle. Donc (S2) est cette distance avec la résolution du système composé de la droite par le centre du cercle et l'angle, et le cercle. Nous obtenons alors le point du cercle le plus proche du rectangle. &lt;br /&gt;
&lt;br /&gt;
 (S2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la zone n°2, la distance la plus courte est une droite verticale, ce qui nous donne facilement le point du cercle et le point du rectangle.&lt;br /&gt;
&lt;br /&gt;
 (S1)&lt;br /&gt;
 xpc = xpr= xc&lt;br /&gt;
 ypc = yc +/- r&lt;br /&gt;
 ypr = yr +/- (l/2)&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=41153</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=41153"/>
				<updated>2017-04-05T14:05:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de vidéo&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Vidéo conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt conseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Vidéo plutôt déconseillée&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303/E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Alexis : fabricarium - Lutecia : E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A&amp;lt;br /&amp;gt; &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40924</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40924"/>
				<updated>2017-03-29T12:21:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D, l'un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot, c'est-à-dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel, que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires, donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle, ce qui donne :&lt;br /&gt;
&lt;br /&gt;
 v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
  &lt;br /&gt;
 v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
 &lt;br /&gt;
 x_new = v_x *delta_t + x&lt;br /&gt;
 &lt;br /&gt;
 y_new = v_y *delta_t + y&lt;br /&gt;
 &lt;br /&gt;
 orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également apporté des modifications aux flèches et textes; en effet, maintenant que le déplacement des robots est possible, nous pouvons effectuer des tests.&lt;br /&gt;
Il s'avère que nous ne modifions pas la position des flèches et textes, le robot s'éloignait alors d'eux lorsqu'il se déplaçait.&lt;br /&gt;
Nous avons donc ajouté les quelques modifications nécessaires pour que ces formes suivent l'entité en déplacement.&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi commencé à compléter le package ''machine'' pour lui ajouter les sous-classes de Machine représentant les différentes machines (MPS) du jeu (BaseStation, CapStation, RingStation, DeliveryStation).&lt;br /&gt;
La BaseStation permettra au robot de récupérer un objet de type base, la RingStation d'y empiler des anneaux de couleurs différentes en fonction des commandes reçues, la CapStation de déposer un chapeau au sommet de l'objet et enfin on l'apporte à la DeliveryStation.&lt;br /&gt;
&lt;br /&gt;
Nous avons complété ci-dessous les schémas UML du projet dans son état actuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40916</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40916"/>
				<updated>2017-03-29T12:04:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303/E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| ABS&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 C205&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201/E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40797</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40797"/>
				<updated>2017-03-27T14:38:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à déterminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 22/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Vitesse et déplacement au point; Besoin d'interfaçage sur le code ARPL&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|-&lt;br /&gt;
| Communication RefBox&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|-&lt;br /&gt;
| Gestion Collision&lt;br /&gt;
| 01/04/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Débuté&amp;lt;/font&amp;gt;&lt;br /&gt;
| Prise d'information sur le système&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Nous avons complété la fonction de gestion de la vitesse. Il n'y a plus de nœud pour gérer les déplacements au profit d'un nœud gérant chaque robot.&lt;br /&gt;
Les robots envoient un vecteur &amp;quot;twist&amp;quot; pour donner leur commande vitesse, soit deux vecteurs vitesse 3D avec un pour la vitesse linéaire et l'autre pour la vitesse angulaire.&lt;br /&gt;
Cependant ce vecteur vitesse est paramétré dans le repère du robot c'est à dire avec le vecteur x dirigé dans la direction de l'orientation du robot. &lt;br /&gt;
Pour nos calculs nous nous servons du repère originel. Que ce soit pour placer les entités ou les déplacer. Cela facilite les calculs dans la simulation.&lt;br /&gt;
Ainsi nous devons transposer les vecteurs vitesse reçus pour les appliquer à notre repère.&lt;br /&gt;
&lt;br /&gt;
La simulation fonctionnant en 2D nous simplifions les données en utilisant un seul vecteur 3D (x et y pour le déplacement linéaire et z pour le changement d'orientation soit la vitesse angulaire autour de l'axe z).&lt;br /&gt;
La transposition n'est nécessaire que pour les déplacements linéaires donc nous utilisons de la trigonométrie simple et nous ajoutons le déplacement ainsi obtenu à la position actuelle ce qui donne:&lt;br /&gt;
&lt;br /&gt;
v_x = v_x1*cos(orientation_radian) - v_y1*sin(orientation_radian)&lt;br /&gt;
&lt;br /&gt;
v_y = v_x1*sin(orientation_radian) + v_y1*sin(orientation_radian)&lt;br /&gt;
&lt;br /&gt;
x_new = v_x *delta_t + x&lt;br /&gt;
&lt;br /&gt;
y_new = v_y *delta_t + y&lt;br /&gt;
&lt;br /&gt;
orientation_new = (v_angulaire*delta_t + orientation) [360]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v3.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v3.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v2.png|Schéma UML du package ''management''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v2.png|Schéma UML du package ''robot''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Robot_package_Class_diagram_v2.png&amp;diff=40796</id>
		<title>Fichier:Robot package Class diagram v2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Robot_package_Class_diagram_v2.png&amp;diff=40796"/>
				<updated>2017-03-27T14:37:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : 2eme version (semaine 8) du package Robot pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2eme version (semaine 8) du package Robot pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Management_package_Class_diagram_v2.png&amp;diff=40795</id>
		<title>Fichier:Management package Class diagram v2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Management_package_Class_diagram_v2.png&amp;diff=40795"/>
				<updated>2017-03-27T14:37:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : 2eme version (semaine 8) du package Management pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2eme version (semaine 8) du package Management pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Machine_package_Class_diagram_v3.png&amp;diff=40794</id>
		<title>Fichier:Machine package Class diagram v3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Machine_package_Class_diagram_v3.png&amp;diff=40794"/>
				<updated>2017-03-27T14:36:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : 3eme version (semaine 8) du package Machine pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3eme version (semaine 8) du package Machine pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Formes_package_Class_diagram_v3.png&amp;diff=40793</id>
		<title>Fichier:Formes package Class diagram v3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Formes_package_Class_diagram_v3.png&amp;diff=40793"/>
				<updated>2017-03-27T14:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : 3eme version (semaine 8) du package Formes pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3eme version (semaine 8) du package Formes pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40643</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40643"/>
				<updated>2017-03-22T13:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Utilisation de la feuille d'heure.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Un Wiki trop synthétique, des illustrations à venir ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la fichier d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Excellent Wiki mais non mis à jour ; il s'arrête à la semaine 4.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Bon Wiki, correctement illustré. Par contre faudrait arriver à présenter une réalisation, vous prenez du retard.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Le Wiki n'est pas à jour, il s'arrête à la semaine 4. Bien illustré. Le travail se concentre sur la partie logicielle, en particulier avec un traitement d'image non demandé mais intéressant. Il faudrait se pencher très vite sur le contrôle des lasers.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki tout simplement parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki très détaillé, correctement illustré, le travail effectué est présenté correctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Feuille d'heures utilisée. Un Wiki mis à jour. Il est très difficile de se faire une idée de votre travail. Il semble que vous soyez actuellement plutôt en TP qu'en projet ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Feuille d'heures correctement remplie. Wiki plutôt vide. Il est difficile de se faire une idée du travail réalisé, vous semblez bloqué à l'étape bibliographie.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/C205&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40572</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40572"/>
				<updated>2017-03-20T16:42:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes attaqués à l'affichage du terrain dans rviz.&lt;br /&gt;
 &lt;br /&gt;
Pour cela, nous pouvions nous inspirer de code écrit par l'ARPL permettant de charger une carte depuis un fichier ''.yaml''. Certains de leurs packages nous ont été utiles, mais d'autres se sont avérés inutilisables tels quels à cause d'erreurs tantôt de &amp;quot;référence indéfinie&amp;quot; à un fichier, tantôt de &amp;quot;redéfinition&amp;quot; du même fichier (la cause de ces erreurs reste pour le moment toujours un mystère).&lt;br /&gt;
Nous avons donc opté, pour pouvoir avancer rapidement sur le projet, d'utiliser tel quel ce qu'il était possible d'utiliser, et sinon de recopier les fonctions nécessaires dans notre package. Certaines fonctions nécessitaient d'ailleurs de toute façon des modifications, car dans notre simulateur nous gérons aussi l'affichage de la carte alors qu'eux ne faisaient que la charger.&lt;br /&gt;
&lt;br /&gt;
Un fichier ''.yaml'' a la syntaxe suivante : &lt;br /&gt;
 field:&lt;br /&gt;
    name: robocup_simulator&lt;br /&gt;
    size: [14, 9, 0.0]&lt;br /&gt;
    gradient:&lt;br /&gt;
        distance: 0.35&lt;br /&gt;
        minValue: 0&lt;br /&gt;
    walls:&lt;br /&gt;
        bottom1:&lt;br /&gt;
            start: [-6, 0, 0.0]&lt;br /&gt;
            end: [-4, 0, 0.0]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par charger le fichier en mémoire en le passant en paramètre à un ''launchfile'' lançant le nœud chargé de lire et d'afficher la carte. Ensuite, en faisant appel à des ''param'' (paramètres) du nœud actuel et en leur donnant le nom du champs (''name'' par exemple), on peut récupérer les valeurs du fichiers voulues.&lt;br /&gt;
&lt;br /&gt;
Nous avons ainsi créé une classe ''Carte'' pour gérer le chargement des données depuis le fichier et toutes les fonctions utilitaires associées, mais permettant aussi d'afficher la carte grâce à une fonction ''display'' de même fonctionnement que celles créées précédemment pour les entités.&lt;br /&gt;
&lt;br /&gt;
Pour l'affichage sur rviz, nous nous sommes servis du type d'objet ''Map'' pour visualiser le sol du terrain (en blanc ci-dessous). Nous avons également créé un vecteur de Rectangles pour afficher les murs (en bleu foncé ci-dessous) et un vecteur de Rectangles pour les zones interdites au robot (en noir).&lt;br /&gt;
&lt;br /&gt;
Nous aurions aimé mettre à jour la taille de la grille affichée en fonction de la taille de la carte, mais il s'avère que c'est impossible, la grille ne provenant pas d'un message publié.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_map.png|Affichage du terrain de jeu dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_map.png&amp;diff=40569</id>
		<title>Fichier:Rviz screenshot map.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_map.png&amp;diff=40569"/>
				<updated>2017-03-20T16:22:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Screenshot de l'affichage de la carte dans RViz (semaine 7) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot de l'affichage de la carte dans RViz (semaine 7) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40566</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40566"/>
				<updated>2017-03-20T16:09:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture et affichage de la map&lt;br /&gt;
| 19/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage de la map, des murs et des zones interdites.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40565</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40565"/>
				<updated>2017-03-20T16:08:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture de la map&lt;br /&gt;
| 20/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40564</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40564"/>
				<updated>2017-03-20T16:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture de la map&lt;br /&gt;
| 20/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40318</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40318"/>
				<updated>2017-03-15T13:22:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture de la map&lt;br /&gt;
| 20/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
Un de nos objectifs était aussi de gérer l'affichage de l'orientation de nos entités. En effet, cela semble essentiel pour les robots par exemple, représentés par des ronds et pouvant se déplacer. Nous avons ainsi créé un nouveau marker ''Fleche''; il était également possible de changer le type de marker en ''interactive marker'' ce qui aurait permis l'affichage de flèches de direction, mais celles-ci permettaient de modifier la position de l'objet et n'étaient disponibles qu'en multiple de 2 (déplacement sur un axe). Le choix s'est donc porté sur l'utilisation d'un marker classique dont on change l'orientation en même temps que celle de l'entité.&lt;br /&gt;
Nous avons rencontré quelques soucis quant à la gestion de l'orientation du marker, celle-ci étant un ''quaternion'' (x, y, z, w) alors que nous souhaitons donner l'angle en degrés (ou en radians éventuellement); la documentation n'est pas forcément facile à trouver pour ROS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_fleche.png|Affichage de l'entité ''Robot'' avec une forme ''Fleche'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_fleche.png&amp;diff=40317</id>
		<title>Fichier:Rviz screenshot fleche.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_fleche.png&amp;diff=40317"/>
				<updated>2017-03-15T13:22:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Screenshot de l'affichage de l'entité Robot avec une flèche pour l'orientation dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot de l'affichage de l'entité Robot avec une flèche pour l'orientation dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40300</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40300"/>
				<updated>2017-03-15T13:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la simulation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture de la map&lt;br /&gt;
| 20/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40294</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40294"/>
				<updated>2017-03-15T12:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abandon constaté&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros problèmes de rédaction en français bien compréhensibles.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki très bien tenu et très bien illustré, une avancée du travail parfaitement expliquée, continuez ainsi !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Feuille d'heures non utilisée, Wiki non mis à jour.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pour les 4 premières semaine, des paragraphes correctement rédigés et bien illustré, il était possible de se faire une idée de l'avancée du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent Wiki, très complet, très bien illustré, le travail est parfaitement décrit !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures très bien exploitée.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très bien rédigé mais absolument pas illustré, un peu court peut être.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Quelques coquilles, le Wiki est un peu vide, pas totalement à jour, dommage que le cahier des charges joint ne soit pas intégré directement au Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Wiki très synthétique dans un français très correct, à jour, travail sur l'imprimante bien décrit, pas beaucoup d'information sur l'analyse du fichier MIDI.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Feuille d'heures bien exploitée, Wiki très bien rédigé, illustré, l'avancé du travail est bien présenté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki bien rédigé et très bien illustré, le travail effectué est présenté. Il serait bien d'avoir une carte rapidement.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le Wiki est principalement constitué des schématiques et des PCB des différentes cartes. Après tout c'est un point important de votre travail mais le soin apporté à ces productions, s'il s'améliore était initialement assez faible. La rédaction est presque absente ou d'un niveau faible. Vous devriez déjà avoir des cartes en production.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki assez vide, le seul élément probant est la présentation de la nouvelle version de la carte des robots suiveurs. Des coquilles, ce que l'on peut difficilement vous reprocher. Il faudrait maintenant avoir un code pour le protocole RC5, utilisez deux Arduinos pour avoir un prototype de démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pratiquement pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Wiki un peu rapide, illustré, quelques coquilles. Peu de résultats à ce jour, vous devriez avoir votre carte et avoir conduit un test de communication avec les capteurs et les modules LoRa.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki à l'abandon, impossible de savoir où vous en êtes dans le travail. Réagissez immédiatement !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Partie travail du Wiki presque vide, pas d'illustration, il est à craindre que le travail ne soit pas plus avancé que le Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas d'utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki, bien illustré, travail bien décrit.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki vide, rien de concret semble avoir été réalisé, aucune illustration. Il va falloir mettre les bouchées quadruples ...&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Tentative d'utilisation de la feuille d'heures, definissez au préalable les lignes dans ce tableau.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Un Wiki trop rapidement rédigé en style télégraphique avec des coquilles, à la lecture du Wiki il est difficile de croire que vous avez passé le nombre d'heures annoncées pour si peu de résultats.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Mauvaise utilisation de la feuille d'heures.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki pratiquement vide, l'image n'apporte rien, le Wiki ne reflète que peu de travail.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 (08/02) !! Séance 4 (15/02) !! Séance 5 (01/03) !! Séance 6 (08/03) !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40239</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40239"/>
				<updated>2017-03-13T22:43:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Affichage d'une forme Flèche dont l'orientation change avec celle de l'entité. Grise. Orientation en degrés.&lt;br /&gt;
|-&lt;br /&gt;
| Lecture de la map&lt;br /&gt;
| 20/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40089</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40089"/>
				<updated>2017-03-09T06:47:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe ''Robot'' (qui possède une forme, étant une Entité) pour pouvoir visualiser le robot avec rviz. Nous avons donc ajouté une fonction ''display'' à ''Entite'', faisant elle-même appel à la fonction ''display'' de sa forme; ce qui permettra un affichage plus facile de l'objet. &lt;br /&gt;
&lt;br /&gt;
Nous avons également ajouté une forme ''Texte'' pour afficher du texte informatif sur les formes (par exemple, une lettre et un id pour une entité, &amp;quot;R1&amp;quot; dans le cas du premier robot de chaque équipe). Ce texte est affiché en cyan ou en magenta, en fonction de la couleur de l'équipe. Les noms des ''markers'' de la forme et du texte eux aussi dépendent du type de l'entité.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons permis au entités de type Machine de gérer leur affichage. Pour cela, nous avons dû créer une classe fille de cette entité pour pouvoir tester son affichage. Le choix s'est porté sur les machines de type BS (Base Station).&lt;br /&gt;
&lt;br /&gt;
En cours de route, nous avons été confrontés à un problème au niveau de l'affichage en 2D. Il semblait logique que la hauteur des objets (en z) soit égale à 0 pour un affichage 2D, mais il s'est avéré que la couleur de l'objet était alors imprévisible (plus souvent noir que de la bonne couleur). Il en fait fallu laisser une légère épaisseur (0.001 mètres dans notre cas) pour que la couleur s'affiche correctement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_robot.png|Affichage de l'entité ''Robot'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_machine.png|Affichage de l'entité ''BaseStation'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons dû corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. &lt;br /&gt;
Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. &lt;br /&gt;
&lt;br /&gt;
Il existe un topic ''clock'' qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation, nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. &lt;br /&gt;
&lt;br /&gt;
Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine.png&amp;diff=40088</id>
		<title>Fichier:Rviz screenshot machine.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_machine.png&amp;diff=40088"/>
				<updated>2017-03-09T06:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Screenshot de l'affichage de l'entité ''BaseStation'' dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot de l'affichage de l'entité ''BaseStation'' dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_robot.png&amp;diff=40087</id>
		<title>Fichier:Rviz screenshot robot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rviz_screenshot_robot.png&amp;diff=40087"/>
				<updated>2017-03-09T06:42:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : Screenshot de l'affichage de l'entité ''Robot'' dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot de l'affichage de l'entité ''Robot'' dans RViz (semaine 6) pour le projet P20 de 2016/17.&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40086</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40086"/>
				<updated>2017-03-09T06:30:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bornes de facteurs possibles à détérminer&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
| 17/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
| Commencement par l'ajout de la gestion de la vitesse&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: purple;&amp;quot;&amp;gt;Démarrage&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe Robot (qui possède une forme, étant une Entité) pour pouvoir l'afficher.&lt;br /&gt;
Nous avons du corriger nos constructeurs pour être le plus efficace possible et remplir au maximum les besoins des futurs fonctions.&lt;br /&gt;
La problématique rendant nécessaire une gestion du temps vient du besoin de l'ARPL de pouvoir contrôler  la vitesse de simulation et donc de pouvoir jouer un match très rapidement afin d'observer le comportement de leur code.&lt;br /&gt;
Nous avons commencé et fini la gestion du temps. ROS intègre une interface de temps qui se cale sur la machine qui lance ROS. Pour que plusieurs machines suivent le même temps il faut opérer une synchronisation des temps. Cependant lors de la simulation tous les robots auront leur référentiel temporel sur la même machine ce qui rend une synchronisation inutile. Il existe un topic clock qui sert pour les simulations. En forçant nos nœuds à utiliser le temps de simulation nous avons une échelle temporelle utilisable et synchronisée. Nous avons donc un nœud qui va publier sur ce topic le temps qui sera initialisé à 0 en début de match. Un paramètre d'environnement ROS sert à régler le facteur d'accélération de la simulation par rapport au temps réel. Il est modifiable à tout instant et est initialisé en premier dans le launchfile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40069</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40069"/>
				<updated>2017-03-08T15:09:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Planning des tâches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 08/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Avec &amp;quot;R&amp;quot; + id en affichage texte de la couleur de l'équipe&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
| 09/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;En cours&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Affichage de l'orientation de l'entité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe Robot (qui possède une forme, étant une Entité) pour pouvoir l'afficher.&lt;br /&gt;
&lt;br /&gt;
Nous nous attelons également à la gestion du temps.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40055</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2016/2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2016/2017&amp;diff=40055"/>
				<updated>2017-03-08T13:13:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Mini-cahier des charges || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges conforme à la discussion avec l'encadrant. Présentation propre avec un effort d'illustration. Pas de liste des tâches ou de calendrier prévisionnel. Quelques coquilles corrigées.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges succinct. Attention à la rédaction en français. Un effort d'illustration avec un schéma global. Une liste des tâches, sans chiffrage pour l'instant..&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges assez précis. Pas trop de coquilles. Une liste des tâches un peu succincte. Réfléchissez bien à la structure du programme pour la mise à jour simplifiée des fiches sur l'application.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges précis. Forme très correcte. Une liste des tâches réfléchie. Il y a même un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis. De même pour la liste des tâches. L'utilisation de bioloïds ne semble pas justifiée. Pourquoi ne parlez-vous de capteurs que dans le cadre d'un seul des deux appareils ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Pas mal de coquilles corrigées. Une certaine imprécision (confusion Arduino Mega et ATMEGA, flou dans la liste des tâches). Cela dit un cahier des charges et une liste des tâches sont présentés. Pensez aux problèmes de calibration du système et à la transmission des données vers un smartphone par exemple.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Synthèse correcte de l'entretien avec l'encadrant. Le cahier des charges est correct mais moins précis que le sujet. Le découpage en tâche est un peu rapide : l'analyse des fichiers MIDI devrait être sous-découpée. Presque pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne prise en main du sujet. Cahier des charges très précis. Liste des tâches bien détaillée. Orthographe irréprochable.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une grande partie du cahier des charges est une copie du sujet. Définissez ce qu'est une Referee Box. D'un autre coté, le cahier des charges est précis. La liste des tâches est correcte. Cependant elle semble omettre la partie mécanique de la MPS ? Pas de coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Des imprécisions dans la transcription de la réunion avec l'encadrant. Voire des contre-sens. Le cahier des charges est assez complet. Pas de liste des tâches. Vous avez vraiment passé 3h sur la rédaction du cahier des charges ? (edit d'Alex : certainement pas)&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Une liste des tâches ajoutée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le texte a été modifié pour être compréhensible mais le problème n'est pas là. Vous n'avez pas du tout transcrit les demandes de l'encadrant mais donné le sujet du projet de l'an passé. Cette année vous devez améliorer l'aspect esthétique des robots, construire le quatrième robot et améliorer la détection infra-rouge en utilisant le protocole utilisé par les télécommandes infra-rouges classiques. Vous n'avez pas, non plus, donné une liste précise des tâches à réaliser.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisé avec l'encadrant. La listes des tâches à réaliser est à préciser.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;La restitution de la discussion avec l'encadrant est très correcte et le cahier des charge est précisément décrit. Par contre la liste des tâches à effectuer n'est pas dressée en commençant par l'étude des conditions à respecter pour lancer un tel ballon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Assimilation très correcte des demandes faites par les encadrants. Un cahier des charges précis. De même pour la liste des tâches. Un effort de présentation sans trop de coquilles. Cependant quelques erreurs relevées par M. Dhaussy, merci de corriger le CdC au vu des remarques transmises.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une recopie du sujet, avec des passages soulignés, certes. Une liste des tâches très précise mais uniquement orientée développement Web. Il manque toute la partie étude et utilisation des éco-systèmes d'isolation.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges plus précis, vous pouvez vous lancer.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Cahier des charges très précis avec déjà des idées pour la réalisation. Liste des tâches à effectuer très détaillée.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Très peu d'apport par rapport au sujet qui est lui même assez bref. Il ne semble pas y avoir eu de rencontre avec l'encadrant dans les temps impartis ? Pas de liste des tâches.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges révisés sous la direction de deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le cahier des charges est une paraphrase du sujet. Dans la liste des tâches il semble curieux de ne pas commencer par l'étude des brouilleurs. Avez-vous échangé avec vos encadrants ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen&amp;quot;&amp;gt;Cahier des charges plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Une simple paraphrase du sujet. Pas de liste des tâches à réaliser. Il semble que vous n'avez pas réussi à échanger avec vos encadrants dans les temps impartis. Des coquilles (corrigées).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une rencontre avec les encadrants. Un cahier des charges assez précis. Pas de section &amp;quot;tâches à réaliser&amp;quot; mais une section &amp;quot;notre travail&amp;quot; qui pourrait en tenir lieu avec un effort de structuration.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Présentez les objectifs généraux pour commencer. Un cahier des charges très précis mais il manque la liste des tâches à effectuer. Débutez la par l'état de l'art sur les produits déjà commercialisés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow;&amp;quot;&amp;gt;Le sujet du projet à été recopié. Les deux sections personnelles sont assez mal rédigées. Un contre-sens sur le mode de connexion du prototype actuel : la veilleuse est configurée en point d'accès. Parlez plutôt de &amp;quot;Précisions sur le cahier des charges&amp;quot; plutôt que de &amp;quot;Problèmes rencontrés sur l'étude du projet&amp;quot;. Renommez aussi &amp;quot;Nouveau cahier des charges&amp;quot; en &amp;quot;Tâches à réaliser&amp;quot; et ajouter les autres tâches demandées dans le sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;Cahier des charges et listes des tâches finalement validés par deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: firebrick;&amp;quot;&amp;gt;Uniquement une recopie du sujet.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un cahier des charges et une liste de tâches corrects après discussion avec deux encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un très bon cahier des charges. Le sujet semble être bien assimilé. Une liste des tâches correcte (il faudrait peut-être détailler la programmation du proxy).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un excellent cahier des charges. Liste des tâches très détaillée. Parfait.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vous n'avez pas su vous adapter à la syntaxe mediawiki. Correction pour obtenir un CdC lisible. Une recopie intégrale du sujet. Un cahier des charges qui ressemble plus à une liste des tâches à effectuer.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Vous utilisez bien la syntaxe mediawiki maintenant. Par contre il n'y a toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un cahier des charges en 4 lignes, c'est trop court. En particulier rien sur le contexte du projet à savoir le matériel ou le simulateur sur lequel les tests seront effectués. Une liste des tâches, cette liste est-elle avalisé par l'encadrant ?&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Toujours pas de cahier des charges.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (25/01) !! Séance 2 (01/02) !! Séance 3 !! Séance 4 !! Séance 5 !! Séance 6 !! Séance 7 !! Séance 8 !! Séance 9 !! Séance 10&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2016/2017 P1|Climatisation du pauvre]]&lt;br /&gt;
| Haroun Abdelali&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D317 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D309 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA4 2016/2017 P2|Réseau de capteurs sur smartphone]]&lt;br /&gt;
| Wenyu sun / Xinyue xu&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Presentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;amp;C201&lt;br /&gt;
| E304&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2016/2017 P10|Application de suivi de prise de médicaments]]&lt;br /&gt;
| Martin Rohmer / Kévin Godesence&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA4 2016/2017 P11|Amélioration de l'accueil d'enfants hospitalisés]]&lt;br /&gt;
| Robin Cavalieri / Edmur Lopes&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2016/2017 P14|Sex toy connecté]]&lt;br /&gt;
| Cedric Roussel / Thomas Stievenard&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2016/2017 P18|Education de la position de tête]]&lt;br /&gt;
| Mame Arame Diop / Amina Fahem&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2016/2017 P19|Orchestre électronique]]&lt;br /&gt;
| Antoine Arnaudet / Vivian Senaffe&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Arnaudet présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Senaffe absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2016/2017 P20|Création d’un environnement virtuel de test]]&lt;br /&gt;
| Butaye Marianne / François Duport&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P21 [[IMA4 2016/2017 P21|Conception d’une MPS Polyvalente]]&lt;br /&gt;
| Samy Belhouachi / François Xavier Cockenpot&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 et E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2016/2017 P25|Robot mobile Polytech'Lille]]&lt;br /&gt;
| Cheikh Said Ahmed / Khadija El Messnaoui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Said-Ahmed présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red&amp;quot;&amp;gt;El Messnaoui absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2016/2017 P26|Train de véhicules]]&lt;br /&gt;
| Manlu Luo / Xinyi Wang&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P27 [[IMA4 2016/2017 P27|Sonde atmosphérique]]&lt;br /&gt;
| Olivier Mahieux / Grillère Baptiste&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2016/2017 P28|Adaptation d'un émulateur de calculatrices TI]]&lt;br /&gt;
| Rodolphe Toin&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P29 [[IMA4 2016/2017 P29|Conteneurs pour site Web]]&lt;br /&gt;
| | E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rattrapage DS&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Abs (malade, mail)&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| Malade&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2016/2017 P30|Voiture radiocommandée controlée par gant]]&lt;br /&gt;
| Thomas Gosse / Bacem Hagui&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Gosse présent&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Hagui absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2016/2017 P31|Accueil personnalisé par drone]]&lt;br /&gt;
| Tristan Hart / Etienne Profit&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2016/2017 P32|Sécurité: brouilleur d'ondes]]&lt;br /&gt;
| Nicky Ung / Alexis Macherez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304/301 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E305&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2016/2017 P33|Sécurité: ingénierie inverse de protocole réseau]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Absente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P34 [[IMA4 2016/2017 P34|Interface Haptique, simulateur de formes et de textures]]&lt;br /&gt;
| Alice Coffin / Diana Marrucho&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| IRCICA labo&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2016/2017 P37|Gamelle connectée]]&lt;br /&gt;
| Lutecia Damiens / Alexis Dorian&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2016/2017 P38|Veilleuse enfant connectée]]&lt;br /&gt;
| Hugo Delatte&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2016/2017 P39|Projecteur laser]]&lt;br /&gt;
| Loïc Tombazzi / Marius Trimbur&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2016/2017 P44|3615 Facebook]]&lt;br /&gt;
| Marouan Mcharfi / Tristan lopez&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2016/2017 P46|Aide anti-gaspillage alimentaire ]]&lt;br /&gt;
| Alexandre Huet / François Lefevre&lt;br /&gt;
| E306&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P47 [[IMA4 2016/2017 P47|Modélisation d’un robot mobile]]&lt;br /&gt;
| Djamil Mohamed / Hamza Kerroum&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P48 [[IMA4 2016/2017 P48|Surveillance d'un robot mobile]]&lt;br /&gt;
| Jean-Baptiste Saison&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| C305/D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/C305 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| D306A/D322 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40033</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40033"/>
				<updated>2017-03-07T06:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&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;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous continuons d'améliorer l'affichage en programmant cette fois-ci la classe Robot (qui possède une forme, étant une Entité) pour pouvoir l'afficher.&lt;br /&gt;
&lt;br /&gt;
Nous nous attelons également à la gestion du temps.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40032</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40032"/>
				<updated>2017-03-07T06:26:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&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;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'aurons pas besoin de tous les nœuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancés dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres) ou en 2D en lui donnant un z de 0.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40031</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=40031"/>
				<updated>2017-03-07T06:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Programmation de l'affichage avec rviz&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&lt;br /&gt;
|0,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&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;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'auront pas besoin de tous les noeuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancé dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres).&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=39909</id>
		<title>IMA4 2016/2017 P20</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P20&amp;diff=39909"/>
				<updated>2017-03-02T09:45:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mbutaye : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
Ce cahier des charges a pour objectif de définir le projet, ce qui est attendu ainsi que les contraintes de conception qui lui sont associées.&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet consiste à concevoir et développer un environnement virtuel de test pour l'Association de Robotique de Polytech Lille (ARPL). Ce simulateur doit reproduire les conditions de participation à la Logistic League de manière à pouvoir obtenir rapidement des données et tester le code ainsi que les stratégies de jeu utilisés par les robots.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Ce simulateur est un outil développé dans le cadre de la RoboCup et plus particulièrement de la Logistic League. La RoboCup est une compétition internationale de robotique dans laquelle on voit beaucoup d'entreprises et de robots connus tel que NAO. Cette compétition a pour but de mettre en avant les évolutions en matière de robotique ainsi que les qualités des organismes participants.&lt;br /&gt;
&lt;br /&gt;
La Logistic League est une des différentes épreuves proposées. L'objectif est de repérer le terrain puis de produire des objets avec différents éléments fournis par des machines et à livrer dans des plages de temps données. Une RefereeBox ou boîte arbitre sert à la coordination ainsi qu'à l'arbitrage. C'est cette boite qui va informer le robots des différents objets à construire avec la date de livraison demandée. Elle va également donner leur rôles aux machines présentes sur le terrain. L'arbitre va enregistrer les horaires de dépôt des objets et la position de chacune des machines lors de la compétition.&lt;br /&gt;
&lt;br /&gt;
Celle-ci se déroule sur une piste  de la taille d'une salle moyenne. Chaque équipe peut utiliser jusqu'à trois robots Robotino 3 pour réaliser les tâches demandées. Sur la piste, à part les robots, se trouvent seulement des machines dites de production ou de livraison. Elles vont servir soit à se procurer un élément nécessaire à la production de l'objet final soit à livrer celui-ci lorsqu'il est terminé.&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
Ce projet va permettre de fournir à l'équipe de l'ARPL un simulateur léger et complet, leur permettant de simuler en un court laps de temps un match entier ou partiel et de tester leur code et leur stratégie. Cela leur permettra de développer plus rapidement et efficacement.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le simulateur devra répondre à un certain nombre de critères. Tout d'abord il lui faudra pouvoir simuler toutes les entités présentes sur la piste lors d'un match. Nous parlons des robots et des machines mais également des capteurs et des conditions de jeu.&lt;br /&gt;
&lt;br /&gt;
Nous devrons faire en sorte que le simulateur puisse facilement intégrer le code de contrôle des robots afin de le tester. De plus il faut permettre à l'utilisateur de gérer les parties du code à tester ainsi que de changer les conditions et paramètres de simulation afin de ne tester que certaines partie du code (par exemple en excluant la gestion des collisions). Nous inclurons une gestion des phases de jeu (Découverte et Production) dans ce but. De ce point de vue l'idéal serait de générer un launchfile et de permettre à l'utilisateur de gérer l'utilisation des nœuds un par un.&lt;br /&gt;
&lt;br /&gt;
En sus, le simulateur gérant les robots de l'équipe adverse, il aura une fonctionnalité de sauvegarde des configurations que ce soit pour le code ou les stratégies afin de comparer l'évolution des performances.&lt;br /&gt;
&lt;br /&gt;
Le simulateur a certaines contraintes afin d'être utilisable et utile. Il doit opérer une compression du temps c'est à dire réaliser la simulation d'un match en moins de temps qu'une durée normale de match. Il s'agit d'obtenir des données représentant la réalité en un cours laps de temps. La communication avec la RefereeBox est indispensable. Celle-ci étant fourni par les organisateurs de la compétition nous n'avons pas à la simuler mais nous devons communiquer avec elle pour rendre la simulation plus réaliste.&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas besoin de matériel hormis d'ordinateurs afin de programmer.&lt;br /&gt;
&lt;br /&gt;
Dû à la compétition et aux choix de développement de l'équipe de l'ARPL, nous allons programmer en C++ avec les bibliothèques QT ainsi que le middleware ROS, une surcouche de programmation destinée à la programmation de robots. &lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
&lt;br /&gt;
*Simuler les différentes entités&lt;br /&gt;
** les Robotinos ;&lt;br /&gt;
** les machines ;&lt;br /&gt;
** l'environnement.&lt;br /&gt;
&lt;br /&gt;
*Gérer l'interfaçage entre le simulateur et le code des Robots&lt;br /&gt;
** lire et lancer le méta-paquet ;&lt;br /&gt;
** identifier les différents parties du code ;&lt;br /&gt;
** proposer l'activation/désactivation de ces parties et créer un launchfile en conséquence ;&lt;br /&gt;
** créer un système de sauvegarde de tout code interfacé permettant sa réutilisation.&lt;br /&gt;
&lt;br /&gt;
*Simuler un match&lt;br /&gt;
** communiquer avec la RefereeBox et recevoir les différents ordres de celle-ci ;&lt;br /&gt;
** gérer les machines et la communication avec la RefereeBox ;&lt;br /&gt;
** gérer l'équipe de l'utilisateur et son interaction avec le reste de la simulation ;&lt;br /&gt;
** gérer l'équipe adverse et son interaction avec le reste de la simulation.&lt;br /&gt;
&lt;br /&gt;
*Paramétrage avancé de la simulation&lt;br /&gt;
** proposer différents modes de simulations ;&lt;br /&gt;
** activation/déssactivation des paramètres de la simulation ;&lt;br /&gt;
** gestion des phases.&lt;br /&gt;
&lt;br /&gt;
*Interface utilisateur&lt;br /&gt;
** fournir des données utilisables et intéressantes sur la simulation ;&lt;br /&gt;
** créer une GUI ergonomique ;&lt;br /&gt;
** importer les données de la simulation sur la GUI pour une meilleure analyse de celle-ci.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
Répartition du temps consacré au projet (120h/personne) :&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2&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;
|Mise à niveau matérielle et intellectuelle&lt;br /&gt;
|&lt;br /&gt;
|13&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;
|Conception théorique&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|2&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;
|Programmation de la phase d'exploration&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|15&lt;br /&gt;
|16&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;
|Wiki&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0,5&lt;br /&gt;
|1,5&lt;br /&gt;
|1,5&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;
|Réunions tuteurs&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&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;
==Planning des tâches==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Date prévue !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| Affichage des formes avec Rviz &lt;br /&gt;
| 01/03/2017&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Cercle &amp;amp; Rectangle&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'un robot&lt;br /&gt;
| 13/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Affichage d'une machine&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Gestion du temps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Déplacement d'un robot&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;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
Nous avons commencé par installer ROS et tout ce dont nous avons besoin pour travailler correctement. Nous avons également suivi des [http://wiki.ros.org/ROS/Tutorials tutoriels] pour apprendre à utiliser ROS. &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir travailler en binôme sans problèmes et pour que nos encadrants puissent suivre notre avancement et tester le logiciel, nous avons utilisé le logiciel de gestion de versions Git, sur lequel on publie notre code au fur et à mesure.&lt;br /&gt;
&lt;br /&gt;
Nous n'avions pas encore de dépôt sur celui-ci, donc nous avons commencé par réfléchir à la structure de notre projet.&lt;br /&gt;
Nous commencerons par implémenter la phase d'exploration, ce qui comprend aussi le déplacement du robot, la détection de machines et de feux ainsi qu'une interface utilisateur basique.&lt;br /&gt;
&lt;br /&gt;
En effet, le match oppose deux équipes ayant jusque trois robotinos qui s'affrontent lors de deux phases. La première est la phase d'exploration, durant laquelle les robots doivent trouver les machines de leur équipe en explorant le terrain. Ils doivent annoncer la position des machines et les signaux des feux de celles-ci : chaque machine, peu importe son type, possède un feu tricolore (rouge, jaune, vert) qui durant la phase d'exploration aura une combinaison de lumières allumées aléatoirement (au moins une doit l'être).&lt;br /&gt;
&lt;br /&gt;
La création d'un simulateur passe par la réflexion sur les besoins en conception du simulateur (décris en partie ci-dessus). Nous avons donc passé un certain temps à schématiser la structure de notre simulateur et à en assimiler les besoins et l'ordre de création.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
Nous avons récupéré un dépôt Git (nommé ''logistic-sim'') sur lequel travailler auprès de nos encadrants, nous pouvons donc commencer la programmation cette semaine.&lt;br /&gt;
&lt;br /&gt;
Ceci étant notre premier projet mêlant ROS et Git, nous avons tenté de créer la structure du projet mais avons vite rencontré quelques difficultés. &lt;br /&gt;
Nous avons ensuite compris qu'il était nécessaire de d'abord créer un environnement de travail ROS pour le projet, dans lequel on clône ensuite le dépôt Git localement.&lt;br /&gt;
&lt;br /&gt;
Nous obtenons ainsi la structure de projet suivante :&lt;br /&gt;
* Workspace ROS&lt;br /&gt;
** build&lt;br /&gt;
** devel&lt;br /&gt;
** src&lt;br /&gt;
*** CMakeLists.txt&lt;br /&gt;
*** logistic-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dossiers build, devel, src et CMakeList.txt sont des fichiers et dossiers générés par ''Catkin'', un outil permettant de créer des paquets ROS facilement. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite décidé de séparer le code du projet en différents dossiers en fonction des tâches à effectuer :&lt;br /&gt;
* '''Entites''' pour simuler les différentes entités (Robotinos, machines, environnement...)&lt;br /&gt;
* '''Gestion_Code''' pour gérer l'interfaçage entre le simulateur et le code des robots&lt;br /&gt;
* '''Match''' pour simuler le déroulement d'un match&lt;br /&gt;
* '''GUI''' pour l'interface utilisateur avec le framework Qt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans chacun de ces dossiers, nous créerons des ''packages'' contenant les différentes fonctionnalités du projet.&lt;br /&gt;
&lt;br /&gt;
Chaque ''package'' a la structure suivante :&lt;br /&gt;
* CMakeLists.txt&lt;br /&gt;
* include pour les fichiers .h&lt;br /&gt;
* package.xml&lt;br /&gt;
* README.md&lt;br /&gt;
* src pour les classes et nodes .cpp&lt;br /&gt;
* launch pour les launchfiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on commence par la gestion de la position du robot et la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Nous avons avancé sur la programmation de la gestion de la position du robot et de la reconnaissance des feux.&lt;br /&gt;
&lt;br /&gt;
Nous avons décrit nos classes par des schémas UML avec l'outil gratuit ''Modélio'' pour créer une documentation facilement accessible. Les commentaires des fonctions, classes et fichiers au format ''Doxygen'' nous permettront également de générer une documentation du projet sous format HTML notamment.&lt;br /&gt;
&lt;br /&gt;
Nous suivons aussi la normalisation du code donnée par l'ARPL pour avoir les mêmes conventions de nommage partout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons décidé de créer un nouveau package ''match'' qui contiendra les nœuds correspondants aux différentes phases de jeu, et avons donc par conséquent commencé par créer un nœud pour la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé à réfléchir à la façon dont les informations sont communiquées dans le match : il y a un arbitre, la ''Referee Box'' qui permet de faire communiquer le simulateur et les robots jouant le match. En effet, l'arbitre prend les décisions importantes (placement des machines au début du jeu etc.) et c'est à lui que les robots s'adressent. Nous devons donc aussi communiquer avec lui pour recevoir certaines informations (par exemple les informations de base de la phase d'exploration) et les retransmettre dans le simulateur aux nœuds qui en auront besoin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v1.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v1.png|Schéma UML du package ''formes''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Cette semaine, nous avons créé plusieurs nouveaux packages et modifié ceux qui avaient déjà été créés.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé la classe Cercle dans le package ''formes'', nous pouvons donc maintenant utiliser deux formes différentes, le rectangle et le cercle.&lt;br /&gt;
La classe Entite a elle aussi été rajoutée. En effet, certains attributs des machines sont communs avec ceux des robots; cette classe nous permet de les rassembler et les classes Machine et Robot hériteront ainsi de Entite.&lt;br /&gt;
&lt;br /&gt;
Un nouveau package ''management'' a également fait son apparition. Il contiendra les classes Equipe et Manager. Le Manager sera chargé de créer les équipes et permettra d'y accéder partout dans le code, mais aussi de procéder aux différentes initialisations lors du démarrage d'une nouvelle phase.&lt;br /&gt;
&lt;br /&gt;
Au package ''management'' s'ajoute le nouveau package ''robot'' dont le rôle est de simuler les robotinos lors du match.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Machine_package_Class_diagram_v2.png|Schéma UML du package ''machine''&lt;br /&gt;
Fichier:Robot_package_Class_diagram_v1.png|Schéma UML du package ''robot''&lt;br /&gt;
Fichier:Formes_package_Class_diagram_v2.png|Schéma UML du package ''formes''&lt;br /&gt;
Fichier:Management_package_Class_diagram_v1.png|Schéma UML du package ''management''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons également rendu visite à l'un de nos tuteurs de stage pendant la semaine dans le but d'obtenir un premier retour sur notre travail et l'avancement du projet. &lt;br /&gt;
&lt;br /&gt;
Nous avons pu effectuer immédiatement quelques modifications nécessaires suite aux commentaires de notre tuteur. Nous avons dû, par exemple, clôner leur projet dans le même espace de travail que le notre pour pouvoir réutiliser certains paquets de messages déjà créés. Cela permettra une meilleure compatibilité. D'autres modifications concernaient entre autres les conventions de nommage de certaines classes et l'ajout d'un dossier supplémentaire dans le dossier include de chaque package portant le nom de celui-ci, pour ne pas avoir de conflits quant au nommage des fichiers.&lt;br /&gt;
&lt;br /&gt;
Une réunion avec toute l'équipe des tuteurs a été prévue pour la semaine 5.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
La semaine a commencé par une réunion avec l'équipe de l'ARPL se chargeant d'encadrer notre projet, c'est-à-dire Vincent et Thomas. Nous avons discuté ensemble de l'avancement du simulateur et de l'ordre dans lequel effectuer les tâches. Ils nous également demandé de créer un planning de nos tâches avec la date prévue pour chacune; ils auront en effet besoin de modifier leur code à certains endroits pour pouvoir utiliser le simulateur (nous n'auront pas besoin de tous les noeuds, certains comme la détection Laser nous étant inutiles) et souhaiteraient savoir lorsque nous seront prêt à tester de nouvelles fonctionnalités. &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes lancé dans l'affichage des formes avec l'outil ''rviz'', qui permet de visualiser en 3D les messages de type ''visualisation_msgs'' qui lui sont envoyés sur le topic associé. Ces messages sont disponibles en différents types. Pour afficher les formes nous utiliseront le format ''Marker'' qui permet d'afficher un objet en 3D (cubes, sphères, flèches, cylindres).&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé par faire les tutoriels sur l'utilisation de rviz puis par ajouter le code nécessaire à l'affichage des formes. Nous avons ainsi décidé d'ajouter la variable du message de type ''Marker'' dans la classe Forme; celle-ci sera accessible par toutes les classes filles de Forme, notamment Cercle et Rectangle. Nous avons également créé une méthode ''display'' qui sera chargée de mettre à jour la position de la forme et de publier le message. Les différents ''setters'' des classes filles modifieront également le message pour qu'il soit à jour lors de l'envoi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Rviz_screenshot_rectangle.png|Affichage de la forme ''Rectangle'' dans Rviz&lt;br /&gt;
Fichier:Rviz_screenshot_cercle.png|Affichage de la forme ''Cercle'' dans Rviz&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Mbutaye</name></author>	</entry>

	</feed>