<?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=Shage-ch</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=Shage-ch"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Shage-ch"/>
		<updated>2026-05-13T19:11:23Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25131</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25131"/>
				<updated>2016-01-20T13:53:01Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Séance 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
* Contiki : OS pour les capteurs miniatures en réseau.&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
===Partie 1===&lt;br /&gt;
*Installation de Contiki, RIOT ou tout autre OS sur les OpenMote permettant la communication entre elles.&lt;br /&gt;
&lt;br /&gt;
===Partie 2===&lt;br /&gt;
*Communication Rx/Tx entre la RaspberryPI et un OpenMote.&lt;br /&gt;
*Réception de l'état d'un capteur de présence connecté à un OpenMote et extinction/allumage d'une LED de l'OpenMote (via traitement sur la RaspberryPI) en fonction de l'état du capteur.&lt;br /&gt;
&lt;br /&gt;
===Partie 3===&lt;br /&gt;
*Installation d'un serveur Apache sur la RaspberryPI pour la gestion des lumières via un interface web (sur un smartphone, ordinateur ou autre).&lt;br /&gt;
*Mise en réseau et routage des OpenMote pour permettre la communication relai entre eux. Cela permettra la communication entre la RaspberryPI (connectée à la box) et n'importe quel OpenMote indépendamment de sa distance.&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
Nous avons d'abord réalisé des tests préliminaires sur un OpenMote afin de nous familiariser avec par exemple l'allumage/extinction d'une LED.&amp;lt;br&amp;gt;&lt;br /&gt;
Les OpenMote sont livrées avec un OS pré-installé : [http://www.freertos.org/ FreeRTOS].&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc suivi un [http://www.openmote.com/blog/bootstrapping-the-openmote-platform.html tutoriel de Bootstrapping].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On installe toutes les librairies ARM Cortex nécessaires au bon fonctionnement du chip embarqué sur l'OpenMote :&lt;br /&gt;
 wget http://mirrors.kernel.org/ubuntu/pool/universe/libs/libstdc++-arm-none-eabi/libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb sudo dpkg -i libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb&lt;br /&gt;
&lt;br /&gt;
On copie ensuite le firmware de l'OpenMote :&lt;br /&gt;
 git clone --recursive https://github.com/OpenMote/firmware.git OpenMote/firmware&lt;br /&gt;
&lt;br /&gt;
Avant de passer à la suite, il convient d'effectuer quelques manipulations non explicitées sur le tutoriel, mais pourtant indispensables : (Merci à T. Vantroys pour [http://vantroys.polytech-lille.net/mediawiki/index.php?title=OpenMote ces manipulations])&lt;br /&gt;
 cd OpenMote/firmware/platform/cc2538/libcc2538&lt;br /&gt;
 make&lt;br /&gt;
 cp libcc2538 ..&lt;br /&gt;
 cd ../../../test            // répertoire OpenMote/firmware/test&lt;br /&gt;
 chmod u+x tests-projetcts.sh&lt;br /&gt;
 ./tests-projects.sh&lt;br /&gt;
&lt;br /&gt;
On se place dans le dossier projects :&lt;br /&gt;
 cd ../projects           // répertoire OpenMote/firmware/projects&lt;br /&gt;
&lt;br /&gt;
Ce dossier contient de nombreux projets déjà écrits qu'il suffit de tester. On va dans notre cas tester les LED. Plaçons nous alors dans le dossier correspondant :&lt;br /&gt;
 cd test-leds/src &lt;br /&gt;
&lt;br /&gt;
Puis compilons !&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 all&lt;br /&gt;
&lt;br /&gt;
La compilation faite, il faut maintenant flasher le programme sur l'OpenMote :&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 bsl&lt;br /&gt;
&lt;br /&gt;
On remarque que le programme tourne bien (les LED flashent).&amp;lt;br&amp;gt;&lt;br /&gt;
'''/!\ Attention /!\ :''' Sur les OpenMote (contrairement à un Arduino par exemple) il est impossible de flasher de nouveau un programme si le programme courant tourne ! En pressant le bouton '''USER''' nous pouvons de nouveau flasher un programme.&lt;br /&gt;
&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
====Compilation du premier programme sous Contiki====&lt;br /&gt;
Cette séance est consacrée à l'installation de [http://www.contiki-os.org/ Contiki]. Contiki est un OS Open-Source, consacré à l'Internet des Objets, c'est pourquoi nous souhaitons l'utiliser !&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons souhaité suivre [http://www.openmote.com/blog/getting-started-with-contiki-and-openmote.html ce tutoriel].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Contiki-Setup.jpg|400px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut posséder un [https://github.com/ compte github]. Ensuite, il faut forker [http://www.openmote.com/ftp/wp-content/uploads/2014/05/Fork-Contiki.png ce répertoire] (tout en étant connecté à notre compte).&lt;br /&gt;
[[Fichier:Fork-Contiki.png|700px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite dans le terminal, nous clonons ce répertoire :&lt;br /&gt;
 git clone https://github.com/USERNAME/contiki.git ~/Contiki&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur souhaite contribuer à Contiki, il peut également ajouter le dépôt origine de Contiki comme une branche de suivi dans git. On taperait donc :&lt;br /&gt;
 git remote add upstream https://github.com/contiki-os/contiki.git&lt;br /&gt;
 git fetch origin -v&lt;br /&gt;
 git fetch upstream -v&lt;br /&gt;
 git merge upstream/master&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons le code source Contiki sur l'ordinateur, il est temps de le compiler. Nous commençons avec un projet simple &amp;quot;Hello World&amp;quot;. Nous entrons les commandes suivantes :&lt;br /&gt;
 cd ~/Contiki/examples/hello-world&lt;br /&gt;
 make TARGET=cc2538dk hello-world&lt;br /&gt;
&lt;br /&gt;
La compilation se fait :&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compile-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la compilation terminée, on a l'écran suivant : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compiled-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La suite du tutoriel utilise un J-Tag pour flasher Contiki sur l'OpenMote. Nous n'avons malheureusement pas de J-Tag, donc nous allons flasher l'application exactement comme nous l'avions fait avec les tests préliminaires de la séance 1.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flash de l'application====&lt;br /&gt;
On se place dans '''[Modification en cours]'''&lt;br /&gt;
&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
&lt;br /&gt;
* Nous avons décidé de changer de matériel puisque nous n'avons pas réussi de flasher notre programme sur Contiki de notre OpenMote., nous avons donc décidé d'utilser la RaspberryPI uniquement.&lt;br /&gt;
* Adresse IP de la RaspberryPI lors des séances de projet :&lt;br /&gt;
 172.26.79.239&lt;br /&gt;
* Nous avons installé un serveur Apache sur la RaspberryPI.&lt;br /&gt;
&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
[Notes]&amp;lt;br&amp;gt;&lt;br /&gt;
Connexion ESP en USB (via FTDI)&amp;lt;br&amp;gt;&lt;br /&gt;
Sequence boutons (GPIO &amp;amp; RESET)&amp;lt;br&amp;gt;&lt;br /&gt;
Code test&lt;br /&gt;
 #define ESP8266_LED 2&lt;br /&gt;
 void setup() &lt;br /&gt;
 {&lt;br /&gt;
 pinMode(ESP8266_LED, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop() &lt;br /&gt;
 {&lt;br /&gt;
 digitalWrite(ESP8266_LED, HIGH);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 digitalWrite(ESP8266_LED, LOW);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 }&lt;br /&gt;
Interaction Wi-Fi via un smartphone:&amp;lt;br&amp;gt;&lt;br /&gt;
https://learn.adafruit.com/adafruit-io-basics-digital-input/adafruit-io-setup&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Séance 5 ===&lt;br /&gt;
&lt;br /&gt;
* Pour l'alimentation de notre ESP8266 nous avons utilisé un arduino ( 3,3V ). Alimentation onéreuse mais qui fonctionne.&lt;br /&gt;
* Nous avons décidé de représenter notre &amp;quot;lampe&amp;quot; par une led. Nous l'avons donc connectée au Gpio14 de l'ESP&lt;br /&gt;
( /!\ Remarque : Gpio15 ne peut pas être utiliser pour brancher la led sur l'ESP )&lt;br /&gt;
* Nous avons réussi à connecté la carte au wifi de notre portable.&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25130</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25130"/>
				<updated>2016-01-20T13:49:28Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Séance 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
* Contiki : OS pour les capteurs miniatures en réseau.&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
===Partie 1===&lt;br /&gt;
*Installation de Contiki, RIOT ou tout autre OS sur les OpenMote permettant la communication entre elles.&lt;br /&gt;
&lt;br /&gt;
===Partie 2===&lt;br /&gt;
*Communication Rx/Tx entre la RaspberryPI et un OpenMote.&lt;br /&gt;
*Réception de l'état d'un capteur de présence connecté à un OpenMote et extinction/allumage d'une LED de l'OpenMote (via traitement sur la RaspberryPI) en fonction de l'état du capteur.&lt;br /&gt;
&lt;br /&gt;
===Partie 3===&lt;br /&gt;
*Installation d'un serveur Apache sur la RaspberryPI pour la gestion des lumières via un interface web (sur un smartphone, ordinateur ou autre).&lt;br /&gt;
*Mise en réseau et routage des OpenMote pour permettre la communication relai entre eux. Cela permettra la communication entre la RaspberryPI (connectée à la box) et n'importe quel OpenMote indépendamment de sa distance.&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
Nous avons d'abord réalisé des tests préliminaires sur un OpenMote afin de nous familiariser avec par exemple l'allumage/extinction d'une LED.&amp;lt;br&amp;gt;&lt;br /&gt;
Les OpenMote sont livrées avec un OS pré-installé : [http://www.freertos.org/ FreeRTOS].&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc suivi un [http://www.openmote.com/blog/bootstrapping-the-openmote-platform.html tutoriel de Bootstrapping].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On installe toutes les librairies ARM Cortex nécessaires au bon fonctionnement du chip embarqué sur l'OpenMote :&lt;br /&gt;
 wget http://mirrors.kernel.org/ubuntu/pool/universe/libs/libstdc++-arm-none-eabi/libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb sudo dpkg -i libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb&lt;br /&gt;
&lt;br /&gt;
On copie ensuite le firmware de l'OpenMote :&lt;br /&gt;
 git clone --recursive https://github.com/OpenMote/firmware.git OpenMote/firmware&lt;br /&gt;
&lt;br /&gt;
Avant de passer à la suite, il convient d'effectuer quelques manipulations non explicitées sur le tutoriel, mais pourtant indispensables : (Merci à T. Vantroys pour [http://vantroys.polytech-lille.net/mediawiki/index.php?title=OpenMote ces manipulations])&lt;br /&gt;
 cd OpenMote/firmware/platform/cc2538/libcc2538&lt;br /&gt;
 make&lt;br /&gt;
 cp libcc2538 ..&lt;br /&gt;
 cd ../../../test            // répertoire OpenMote/firmware/test&lt;br /&gt;
 chmod u+x tests-projetcts.sh&lt;br /&gt;
 ./tests-projects.sh&lt;br /&gt;
&lt;br /&gt;
On se place dans le dossier projects :&lt;br /&gt;
 cd ../projects           // répertoire OpenMote/firmware/projects&lt;br /&gt;
&lt;br /&gt;
Ce dossier contient de nombreux projets déjà écrits qu'il suffit de tester. On va dans notre cas tester les LED. Plaçons nous alors dans le dossier correspondant :&lt;br /&gt;
 cd test-leds/src &lt;br /&gt;
&lt;br /&gt;
Puis compilons !&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 all&lt;br /&gt;
&lt;br /&gt;
La compilation faite, il faut maintenant flasher le programme sur l'OpenMote :&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 bsl&lt;br /&gt;
&lt;br /&gt;
On remarque que le programme tourne bien (les LED flashent).&amp;lt;br&amp;gt;&lt;br /&gt;
'''/!\ Attention /!\ :''' Sur les OpenMote (contrairement à un Arduino par exemple) il est impossible de flasher de nouveau un programme si le programme courant tourne ! En pressant le bouton '''USER''' nous pouvons de nouveau flasher un programme.&lt;br /&gt;
&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
====Compilation du premier programme sous Contiki====&lt;br /&gt;
Cette séance est consacrée à l'installation de [http://www.contiki-os.org/ Contiki]. Contiki est un OS Open-Source, consacré à l'Internet des Objets, c'est pourquoi nous souhaitons l'utiliser !&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons souhaité suivre [http://www.openmote.com/blog/getting-started-with-contiki-and-openmote.html ce tutoriel].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Contiki-Setup.jpg|400px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut posséder un [https://github.com/ compte github]. Ensuite, il faut forker [http://www.openmote.com/ftp/wp-content/uploads/2014/05/Fork-Contiki.png ce répertoire] (tout en étant connecté à notre compte).&lt;br /&gt;
[[Fichier:Fork-Contiki.png|700px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite dans le terminal, nous clonons ce répertoire :&lt;br /&gt;
 git clone https://github.com/USERNAME/contiki.git ~/Contiki&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur souhaite contribuer à Contiki, il peut également ajouter le dépôt origine de Contiki comme une branche de suivi dans git. On taperait donc :&lt;br /&gt;
 git remote add upstream https://github.com/contiki-os/contiki.git&lt;br /&gt;
 git fetch origin -v&lt;br /&gt;
 git fetch upstream -v&lt;br /&gt;
 git merge upstream/master&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons le code source Contiki sur l'ordinateur, il est temps de le compiler. Nous commençons avec un projet simple &amp;quot;Hello World&amp;quot;. Nous entrons les commandes suivantes :&lt;br /&gt;
 cd ~/Contiki/examples/hello-world&lt;br /&gt;
 make TARGET=cc2538dk hello-world&lt;br /&gt;
&lt;br /&gt;
La compilation se fait :&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compile-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la compilation terminée, on a l'écran suivant : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compiled-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La suite du tutoriel utilise un J-Tag pour flasher Contiki sur l'OpenMote. Nous n'avons malheureusement pas de J-Tag, donc nous allons flasher l'application exactement comme nous l'avions fait avec les tests préliminaires de la séance 1.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flash de l'application====&lt;br /&gt;
On se place dans '''[Modification en cours]'''&lt;br /&gt;
&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
Adresse IP de la RaspberryPI lors des séances de projet :&lt;br /&gt;
&lt;br /&gt;
 172.26.79.239&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
[Notes]&amp;lt;br&amp;gt;&lt;br /&gt;
Connexion ESP en USB (via FTDI)&amp;lt;br&amp;gt;&lt;br /&gt;
Sequence boutons (GPIO &amp;amp; RESET)&amp;lt;br&amp;gt;&lt;br /&gt;
Code test&lt;br /&gt;
 #define ESP8266_LED 2&lt;br /&gt;
 void setup() &lt;br /&gt;
 {&lt;br /&gt;
 pinMode(ESP8266_LED, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop() &lt;br /&gt;
 {&lt;br /&gt;
 digitalWrite(ESP8266_LED, HIGH);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 digitalWrite(ESP8266_LED, LOW);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 }&lt;br /&gt;
Interaction Wi-Fi via un smartphone:&amp;lt;br&amp;gt;&lt;br /&gt;
https://learn.adafruit.com/adafruit-io-basics-digital-input/adafruit-io-setup&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Séance 5 ===&lt;br /&gt;
&lt;br /&gt;
* Pour l'alimentation de notre ESP8266 nous avons utilisé un arduino ( 3,3V ). Alimentation onéreuse mais qui fonctionne.&lt;br /&gt;
* Nous avons décidé de représenter notre &amp;quot;lampe&amp;quot; par une led. Nous l'avons donc connectée au Gpio14 de l'ESP&lt;br /&gt;
( /!\ Remarque : Gpio15 ne peut pas être utiliser pour brancher la led sur l'ESP )&lt;br /&gt;
* Nous avons réussi à connecté la carte au wifi de notre portable.&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25109</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=25109"/>
				<updated>2016-01-20T10:06:33Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Séance 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
* Contiki : OS pour les capteurs miniatures en réseau.&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
===Partie 1===&lt;br /&gt;
*Installation de Contiki, RIOT ou tout autre OS sur les OpenMote permettant la communication entre elles.&lt;br /&gt;
&lt;br /&gt;
===Partie 2===&lt;br /&gt;
*Communication Rx/Tx entre la RaspberryPI et un OpenMote.&lt;br /&gt;
*Réception de l'état d'un capteur de présence connecté à un OpenMote et extinction/allumage d'une LED de l'OpenMote (via traitement sur la RaspberryPI) en fonction de l'état du capteur.&lt;br /&gt;
&lt;br /&gt;
===Partie 3===&lt;br /&gt;
*Installation d'un serveur Apache sur la RaspberryPI pour la gestion des lumières via un interface web (sur un smartphone, ordinateur ou autre).&lt;br /&gt;
*Mise en réseau et routage des OpenMote pour permettre la communication relai entre eux. Cela permettra la communication entre la RaspberryPI (connectée à la box) et n'importe quel OpenMote indépendamment de sa distance.&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
Nous avons d'abord réalisé des tests préliminaires sur un OpenMote afin de nous familiariser avec par exemple l'allumage/extinction d'une LED.&amp;lt;br&amp;gt;&lt;br /&gt;
Les OpenMote sont livrées avec un OS pré-installé : [http://www.freertos.org/ FreeRTOS].&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc suivi un [http://www.openmote.com/blog/bootstrapping-the-openmote-platform.html tutoriel de Bootstrapping].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On installe toutes les librairies ARM Cortex nécessaires au bon fonctionnement du chip embarqué sur l'OpenMote :&lt;br /&gt;
 wget http://mirrors.kernel.org/ubuntu/pool/universe/libs/libstdc++-arm-none-eabi/libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb sudo dpkg -i libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb&lt;br /&gt;
&lt;br /&gt;
On copie ensuite le firmware de l'OpenMote :&lt;br /&gt;
 git clone --recursive https://github.com/OpenMote/firmware.git OpenMote/firmware&lt;br /&gt;
&lt;br /&gt;
Avant de passer à la suite, il convient d'effectuer quelques manipulations non explicitées sur le tutoriel, mais pourtant indispensables : (Merci à T. Vantroys pour [http://vantroys.polytech-lille.net/mediawiki/index.php?title=OpenMote ces manipulations])&lt;br /&gt;
 cd OpenMote/firmware/platform/cc2538/libcc2538&lt;br /&gt;
 make&lt;br /&gt;
 cp libcc2538 ..&lt;br /&gt;
 cd ../../../test            // répertoire OpenMote/firmware/test&lt;br /&gt;
 chmod u+x tests-projetcts.sh&lt;br /&gt;
 ./tests-projects.sh&lt;br /&gt;
&lt;br /&gt;
On se place dans le dossier projects :&lt;br /&gt;
 cd ../projects           // répertoire OpenMote/firmware/projects&lt;br /&gt;
&lt;br /&gt;
Ce dossier contient de nombreux projets déjà écrits qu'il suffit de tester. On va dans notre cas tester les LED. Plaçons nous alors dans le dossier correspondant :&lt;br /&gt;
 cd test-leds/src &lt;br /&gt;
&lt;br /&gt;
Puis compilons !&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 all&lt;br /&gt;
&lt;br /&gt;
La compilation faite, il faut maintenant flasher le programme sur l'OpenMote :&lt;br /&gt;
 make TARGET=cc2538 all BOARD=openmote-cc2538 bsl&lt;br /&gt;
&lt;br /&gt;
On remarque que le programme tourne bien (les LED flashent).&amp;lt;br&amp;gt;&lt;br /&gt;
'''/!\ Attention /!\ :''' Sur les OpenMote (contrairement à un Arduino par exemple) il est impossible de flasher de nouveau un programme si le programme courant tourne ! En pressant le bouton '''USER''' nous pouvons de nouveau flasher un programme.&lt;br /&gt;
&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
====Compilation du premier programme sous Contiki====&lt;br /&gt;
Cette séance est consacrée à l'installation de [http://www.contiki-os.org/ Contiki]. Contiki est un OS Open-Source, consacré à l'Internet des Objets, c'est pourquoi nous souhaitons l'utiliser !&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons souhaité suivre [http://www.openmote.com/blog/getting-started-with-contiki-and-openmote.html ce tutoriel].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Contiki-Setup.jpg|400px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut posséder un [https://github.com/ compte github]. Ensuite, il faut forker [http://www.openmote.com/ftp/wp-content/uploads/2014/05/Fork-Contiki.png ce répertoire] (tout en étant connecté à notre compte).&lt;br /&gt;
[[Fichier:Fork-Contiki.png|700px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite dans le terminal, nous clonons ce répertoire :&lt;br /&gt;
 git clone https://github.com/USERNAME/contiki.git ~/Contiki&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur souhaite contribuer à Contiki, il peut également ajouter le dépôt origine de Contiki comme une branche de suivi dans git. On taperait donc :&lt;br /&gt;
 git remote add upstream https://github.com/contiki-os/contiki.git&lt;br /&gt;
 git fetch origin -v&lt;br /&gt;
 git fetch upstream -v&lt;br /&gt;
 git merge upstream/master&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons le code source Contiki sur l'ordinateur, il est temps de le compiler. Nous commençons avec un projet simple &amp;quot;Hello World&amp;quot;. Nous entrons les commandes suivantes :&lt;br /&gt;
 cd ~/Contiki/examples/hello-world&lt;br /&gt;
 make TARGET=cc2538dk hello-world&lt;br /&gt;
&lt;br /&gt;
La compilation se fait :&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compile-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la compilation terminée, on a l'écran suivant : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Compiled-Contiki.png|500px|Crédit : http://www.openmote.com/]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La suite du tutoriel utilise un J-Tag pour flasher Contiki sur l'OpenMote. Nous n'avons malheureusement pas de J-Tag, donc nous allons flasher l'application exactement comme nous l'avions fait avec les tests préliminaires de la séance 1.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flash de l'application====&lt;br /&gt;
On se place dans '''[Modification en cours]'''&lt;br /&gt;
&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
Adresse IP de la RaspberryPI lors des séances de projet :&lt;br /&gt;
&lt;br /&gt;
 172.26.79.239&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
[Notes]&amp;lt;br&amp;gt;&lt;br /&gt;
Connexion ESP en USB (via FTDI)&amp;lt;br&amp;gt;&lt;br /&gt;
Sequence boutons (GPIO &amp;amp; RESET)&amp;lt;br&amp;gt;&lt;br /&gt;
Code test&lt;br /&gt;
 #define ESP8266_LED 2&lt;br /&gt;
 void setup() &lt;br /&gt;
 {&lt;br /&gt;
 pinMode(ESP8266_LED, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop() &lt;br /&gt;
 {&lt;br /&gt;
 digitalWrite(ESP8266_LED, HIGH);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 digitalWrite(ESP8266_LED, LOW);&lt;br /&gt;
 delay(500);&lt;br /&gt;
 }&lt;br /&gt;
Interaction Wi-Fi via un smartphone:&amp;lt;br&amp;gt;&lt;br /&gt;
https://learn.adafruit.com/adafruit-io-basics-digital-input/adafruit-io-setup&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Séance 5 ===&lt;br /&gt;
&lt;br /&gt;
Gpio15 ne peut pas être utiliser pour brancher la led sur l'ESP. Nous l'avons donc branché sur le Gpio14&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24849</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24849"/>
				<updated>2016-01-13T10:25:27Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Choix techniques : matériel et logiciel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
* Contiki : OS pour les capteurs miniatures en réseau.&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 1 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 2 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 3 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
===Séance 5 ===&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24848</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24848"/>
				<updated>2016-01-13T10:25:06Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Choix techniques : matériel et logiciel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Une Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
* Contiki : OS pour les capteurs miniatures en réseau.&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 1 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 2 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 3 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
===Séance 5 ===&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24847</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24847"/>
				<updated>2016-01-13T10:22:38Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
* Une Raspberry Pi&lt;br /&gt;
* OpenMote Base / OpenMote Battery / OpenMote cc2538&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 1 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 2 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 3 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
===Séance 5 ===&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24846</id>
		<title>Réseau de lampes</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=R%C3%A9seau_de_lampes&amp;diff=24846"/>
				<updated>2016-01-13T10:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet===&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre du module transversal &amp;quot;Internet des Objets&amp;quot;, nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.  &lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces. &lt;br /&gt;
====Description du projet====&lt;br /&gt;
Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière. &lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
- Une Ras&lt;br /&gt;
&lt;br /&gt;
==Étapes du projet==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 1 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 2 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Partie 3 : &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suivi de l'avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Séance 1 ===&lt;br /&gt;
===Séance 2 ===&lt;br /&gt;
===Séance 3 ===&lt;br /&gt;
===Séance 4 ===&lt;br /&gt;
===Séance 5 ===&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23883</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23883"/>
				<updated>2015-12-03T11:03:41Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Suivi de l'avancement du TP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite modifié le fichier de config /etc/xen/PANACHE.cfg&lt;br /&gt;
 disk = [&lt;br /&gt;
          ...&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidA,xvdd,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidB,xvde,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidC,xvdf,w',&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir créer un RAID5 avec les trois partitions, nous avons d'abord redémarré notre VM, ensuite :&lt;br /&gt;
 mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf&lt;br /&gt;
Pour vérifier la création de notre md0:&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
On obtient :&lt;br /&gt;
&lt;br /&gt;
 Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
 md0 : active raid5 xvdf[2] xvde[1] xvdd[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier qu'on a créé un RAID5 logiciel avec nos trois partitions&lt;br /&gt;
  mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la VM, on remarque que le volume nouvellement créé nommé md0 a été remplacé par md127.&lt;br /&gt;
&lt;br /&gt;
Après suppression d'une partition, on effectue la commande précédente de nouveau :&lt;br /&gt;
  mdadm --detail /dev/md127&lt;br /&gt;
&lt;br /&gt;
Et on obtient :&lt;br /&gt;
        Version : 1.2&lt;br /&gt;
     Raid Level : raid0&lt;br /&gt;
  Total Devices : 2&lt;br /&gt;
    Persistence : Superblock is persistent&lt;br /&gt;
          State : inactive&lt;br /&gt;
           Name : PANACHE:0  (local to host PANACHE)&lt;br /&gt;
           UUID : a5a2ac63:89713b63:57d0149e:da7e1d76&lt;br /&gt;
         Events : 0&lt;br /&gt;
    Number   Major   Minor   RaidDevice&lt;br /&gt;
       -     202       48        -        /dev/xvdd&lt;br /&gt;
       -     202       64        -        /dev/xvde&lt;br /&gt;
&lt;br /&gt;
On vérifie le volume md127 :&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
On a :&lt;br /&gt;
 Personalities : &lt;br /&gt;
 md127 : inactive xvde[1](S) xvdd[0](S)&lt;br /&gt;
       2095104 blocks super 1.2      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 (03/12/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cryptage des données &lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par supprimer les autres partitions sur la carte SD afin d'en avoir qu'une seule en utilisant la commande&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite sécurisé la partition en mettant une clé :&lt;br /&gt;
&lt;br /&gt;
 cryptsetup create key /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut vérifier que dans le répértoire /dev/mapper on a un répértoir /key&lt;br /&gt;
&lt;br /&gt;
Pour formater la carte :&lt;br /&gt;
&lt;br /&gt;
 mkfs /dev/manager/key&lt;br /&gt;
&lt;br /&gt;
* Sécurisation wifi par WPA2-EAP&lt;br /&gt;
&lt;br /&gt;
- Configuration du serveur FreeRadius en PEAP-MSCHAPv2&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23877</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23877"/>
				<updated>2015-12-03T10:54:08Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Suivi de l'avancement du TP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite modifié le fichier de config /etc/xen/PANACHE.cfg&lt;br /&gt;
 disk = [&lt;br /&gt;
          ...&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidA,xvdd,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidB,xvde,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidC,xvdf,w',&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir créer un RAID5 avec les trois partitions, nous avons d'abord redémarré notre VM, ensuite :&lt;br /&gt;
 mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf&lt;br /&gt;
Pour vérifier la création de notre md0:&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
On obtient :&lt;br /&gt;
&lt;br /&gt;
 Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
 md0 : active raid5 xvdf[2] xvde[1] xvdd[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier qu'on a créé un RAID5 logiciel avec nos trois partitions&lt;br /&gt;
  mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la VM, on remarque que le volume nouvellement créé nommé md0 a été remplacé par md127.&lt;br /&gt;
&lt;br /&gt;
Après suppression d'une partition, on effectue la commande précédente de nouveau :&lt;br /&gt;
  mdadm --detail /dev/md127&lt;br /&gt;
&lt;br /&gt;
Et on obtient :&lt;br /&gt;
        Version : 1.2&lt;br /&gt;
     Raid Level : raid0&lt;br /&gt;
  Total Devices : 2&lt;br /&gt;
    Persistence : Superblock is persistent&lt;br /&gt;
          State : inactive&lt;br /&gt;
           Name : PANACHE:0  (local to host PANACHE)&lt;br /&gt;
           UUID : a5a2ac63:89713b63:57d0149e:da7e1d76&lt;br /&gt;
         Events : 0&lt;br /&gt;
    Number   Major   Minor   RaidDevice&lt;br /&gt;
       -     202       48        -        /dev/xvdd&lt;br /&gt;
       -     202       64        -        /dev/xvde&lt;br /&gt;
&lt;br /&gt;
On vérifie le volume md127 :&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
On a :&lt;br /&gt;
 Personalities : &lt;br /&gt;
 md127 : inactive xvde[1](S) xvdd[0](S)&lt;br /&gt;
       2095104 blocks super 1.2      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 (03/12/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cryptage des données &lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par supprimer les autres partitions sur la carte SD afin d'en avoir qu'une seule en utilisant la commande&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite sécurisé la partition en mettant une clé :&lt;br /&gt;
&lt;br /&gt;
 cryptsetup create key /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut vérifier que dans le répértoire /dev/mapper on a un répértoir /key&lt;br /&gt;
&lt;br /&gt;
Pour le montage :&lt;br /&gt;
&lt;br /&gt;
 mkfs /dev/manager/key&lt;br /&gt;
&lt;br /&gt;
* Sécurisation wifi par WPA2-EAP&lt;br /&gt;
&lt;br /&gt;
- Configuration du serveur FreeRadius en PEAP-MSCHAPv2&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23359</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23359"/>
				<updated>2015-11-26T11:22:32Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 7 (26/11/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStlvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
andardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite modifié le fichier de config /etc/xen/PANACHE.cfg&lt;br /&gt;
 disk = [&lt;br /&gt;
          ...&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidA,xvdd,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidB,xvde,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidC,xvdf,w',&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir créer un RAID5 avec les trois partitions, nous avons d'abord redémarré notre VM, ensuite :&lt;br /&gt;
 mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf&lt;br /&gt;
Pour vérifier la création de notre md0:&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
On obtient :&lt;br /&gt;
&lt;br /&gt;
 Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
 md0 : active raid5 xvdf[2] xvde[1] xvdd[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier qu'on a créé un RAID5 logiciel avec nos trois partitions&lt;br /&gt;
  mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la VM, on remarque que le volume nouvellement créé nommé md0 a été remplacé par md127.&lt;br /&gt;
&lt;br /&gt;
Après suppression d'une partition, on effectue la commande précédente de nouveau :&lt;br /&gt;
  mdadm --detail /dev/md127&lt;br /&gt;
&lt;br /&gt;
Et on obtient :&lt;br /&gt;
        Version : 1.2&lt;br /&gt;
     Raid Level : raid0&lt;br /&gt;
  Total Devices : 2&lt;br /&gt;
    Persistence : Superblock is persistent&lt;br /&gt;
          State : inactive&lt;br /&gt;
           Name : PANACHE:0  (local to host PANACHE)&lt;br /&gt;
           UUID : a5a2ac63:89713b63:57d0149e:da7e1d76&lt;br /&gt;
         Events : 0&lt;br /&gt;
    Number   Major   Minor   RaidDevice&lt;br /&gt;
       -     202       48        -        /dev/xvdd&lt;br /&gt;
       -     202       64        -        /dev/xvde&lt;br /&gt;
&lt;br /&gt;
On vérifie le volume md127 :&lt;br /&gt;
 cat /proc/mdstat&lt;br /&gt;
On a :&lt;br /&gt;
 Personalities : &lt;br /&gt;
 md127 : inactive xvde[1](S) xvdd[0](S)&lt;br /&gt;
       2095104 blocks super 1.2      &lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23351</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23351"/>
				<updated>2015-11-26T10:50:19Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 7 (26/11/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStlvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
andardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite modifié le fichier de config /etc/xen/PANACHE.cfg&lt;br /&gt;
 disk = [&lt;br /&gt;
          ...&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidA,xvdd,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidB,xvde,w',&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-raidC,xvdf,w',&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir créer un RAID5 avec les trois partitions, nous avons d'abord redémarré notre VM, ensuite :&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23350</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23350"/>
				<updated>2015-11-26T10:41:38Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 7 (26/11/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStlvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
andardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite modifié le fichier de config /etc/xen/PANACHE.cfg&lt;br /&gt;
     disk      = [&lt;br /&gt;
                  ...&lt;br /&gt;
                 'phy:/dev/virtual/ima5-panache-raidA,xvdd,w',&lt;br /&gt;
                 'phy:/dev/virtual/ima5-panache-raidB,xvde,w',&lt;br /&gt;
                 'phy:/dev/virtual/ima5-panache-raidC,xvdf,w',&lt;br /&gt;
                 ]&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir créer un RAID5 avec les troios partitions, nous avons d'abord redémarré notre VM, ensuite :&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23336</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23336"/>
				<updated>2015-11-26T09:55:50Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 7 (26/11/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStlvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;br /&gt;
andardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sécurisation des données&lt;br /&gt;
Création de 3 partitions de 1G &lt;br /&gt;
&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid1 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid2 -v&lt;br /&gt;
 lvcreate -L 1G -n /dev/virtual/ima5-panache-raid3 -v&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23286</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23286"/>
				<updated>2015-11-25T14:58:38Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 6 (19/11/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
Ensuite, on configure Apache afin d'écouter sur le port 443 :&lt;br /&gt;
 &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
    Listen 443&lt;br /&gt;
    NameVirtualHost 193.48.57.162:443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, on ajoute un VirtualHost /etc/apache2/sites-available/000-tissothage.lol-ssl.conf :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.tissothage.lol&lt;br /&gt;
  ServerAlias tissothage.lol&lt;br /&gt;
  DocumentRoot /var/www/www.tissothage.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.tissothage.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.tissothage.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement, nous nous sommes rendues compte que suite à une erreur de notre part (noms de domaine et de certificat différents), il était évident que ça ne fonctionnerait pas.&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons commencé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
 Nous avons réussi à trouver la clée :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wpa.png]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7 (26/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Rachat d'un nom de domaine &amp;quot;panache.lol&amp;quot; et installation du certificat ssl :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha256 -keyout panache.lol.key -out panache.lol.csr&lt;br /&gt;
&lt;br /&gt;
Après récupération des fichiers .key et .csr, on fournit ce dernier à Gandi et on obtient le fichier .crt.&lt;br /&gt;
&lt;br /&gt;
On place www.panache.lol.key dans /etc/ssl/private et www.panache.lol.crt dans /etc/ssl/certs.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on récupère le certificat intermédiaire que l'on place dans le fichier /etc/ssl/certs/GandiStandardSSLCA2.pem.&lt;br /&gt;
&lt;br /&gt;
Puis, on ajoute le Virtual Host dans le fichier /etc/apache2/sites-available/000-panache.lol-ssl.conf :&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName www.panache.lol&lt;br /&gt;
  ServerAlias panache.lol&lt;br /&gt;
  DocumentRoot /var/www/www.panache.lol/&lt;br /&gt;
  CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile /etc/ssl/certs/www.panache.lol.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/ssl/private/www.panache.lol.key&lt;br /&gt;
  SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
  SSLVerifyClient None&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Wpa.png&amp;diff=23284</id>
		<title>Fichier:Wpa.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Wpa.png&amp;diff=23284"/>
				<updated>2015-11-25T14:57:09Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23036</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=23036"/>
				<updated>2015-11-19T10:44:25Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 6 (19:11:2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5 (12/11/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Cassage de clef WEP d'un point d'accès Wifi&lt;br /&gt;
- Activation du mode monitor de la carte réseau :&lt;br /&gt;
 airmon-ng start wlan0&lt;br /&gt;
- Pour voir tous les points d'accès :&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
- Pour voir seulement les points d'accès sur le canal 7 (canal regroupant les points d'accès &amp;quot;cracotte&amp;quot;) :&lt;br /&gt;
 airodump-ng -w out -c 7 --bssid 00:23:5E:1E:05:41 wlan0&lt;br /&gt;
L'adresse MAC du bssid est celle du point d'accès &amp;quot;cracotte2&amp;quot;.&lt;br /&gt;
- Enfin, pour trouver la clé, on lance :&lt;br /&gt;
 aircrack-ng out-02.cap&lt;br /&gt;
&lt;br /&gt;
* Pour le routeur de la salle E304 : nous avons rajouté le vlan1 qui correspond au réseau privé et qui a pour adresse MAC 10.10.10.253.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Semaine 6 (19:11:2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création des partitions LVM :&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-home -v&lt;br /&gt;
 lvcreate -L 10G -n /dev/virtual/ima5-panache-var -v&lt;br /&gt;
&lt;br /&gt;
Puis on modifie le fichier /etc/xen/PANACHE.cfg afin d'y rajouter les partitions nouvellement créées :&lt;br /&gt;
 disk = [&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-var,xvdb,w'&lt;br /&gt;
          'phy:/dev/virtual/ima5-panache-home,xvdb,w'&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
* Cassage de mot de passe WPA-PSK par force brute&lt;br /&gt;
Nous avons comme,cé par créer un dictionnaire qui est composé de tous les nombres à 8 chiffres. Voici le code en c qui permet de générer ce fichier :&lt;br /&gt;
 #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #define MAX_I 99999999&lt;br /&gt;
 int main(){&lt;br /&gt;
         int i=0;&lt;br /&gt;
         FILE* fp = fopen(&amp;quot;Dictionnaire.txt&amp;quot;,&amp;quot;w&amp;quot;);&lt;br /&gt;
         if( fp == NULL ) printf(&amp;quot;ERROR\n&amp;quot;);&lt;br /&gt;
         else{&lt;br /&gt;
                 for(i=0 ; i &amp;lt;= MAX_I ; i++){&lt;br /&gt;
                         fprintf(fp,&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
         fclose(fp);&lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22878</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22878"/>
				<updated>2015-11-12T09:28:46Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 4 (22/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Intrusion par changement d'adresse MAC : configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22404</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22404"/>
				<updated>2015-10-22T10:27:43Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 4 (22/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Configuration de la connexion sans fil &amp;quot;baguette&amp;quot; de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;br /&gt;
&lt;br /&gt;
* Pour pouvoir se connecter au réseau wifi &amp;quot;troubadour&amp;quot; de la salle E306 : &lt;br /&gt;
Nous avons changé l'adresse MAC du wlan0 par une reconnue par la borne wifi.&lt;br /&gt;
 ifconfig wlan0 hw ether ADRESSE_MAC&lt;br /&gt;
Pour réinitialiser la configuration &lt;br /&gt;
 /etc/init.d/networking restart&lt;br /&gt;
Nous avons modifié le fichier /etc/network/interfaces pour changer le nom &amp;quot;baguette&amp;quot; en &amp;quot;troubadour&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22400</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22400"/>
				<updated>2015-10-22T10:10:11Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 4 (22/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Configuration de la connexion sans fil de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;br /&gt;
&lt;br /&gt;
* Nous avons réussi à se connecter sur le site de TF1 (site en ipv4).&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22397</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22397"/>
				<updated>2015-10-22T10:08:31Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 4 (22/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Configuration de la connexion sans fil de notre eeePC pour la salle E304 (en donnant notre adresse MAC).&lt;br /&gt;
 # dans le fichier /etc/network/interfaces&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
 # dans le fichier /etc/resolv.conf&lt;br /&gt;
 nameserver 193.48.57.48&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22395</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22395"/>
				<updated>2015-10-22T10:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 4 (22/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;br /&gt;
&lt;br /&gt;
* Configuration de la connexion sans fil de notre eeePC. Pour cela, nous avons ajouté dans le fichier /etc/network/interfaces ceci :&lt;br /&gt;
 auto wlan0 inet static&lt;br /&gt;
 wireless-essid baguette&lt;br /&gt;
 address 172.26.79.59&lt;br /&gt;
 netmask 255.255.240.0&lt;br /&gt;
 gateway 172.26.79.254&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22389</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22389"/>
				<updated>2015-10-22T09:09:12Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Suivi de l'avancement du TP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 (22/10/2015) ===&lt;br /&gt;
&lt;br /&gt;
* Création du certificat SSL&lt;br /&gt;
&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -sha256 -nodes -out tissothage.lol.csr -keyout tissothage.lol.key -subj '/C=FR/CN=tissothage.lol'&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22242</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22242"/>
				<updated>2015-10-15T10:20:13Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 3 (15/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;br /&gt;
&lt;br /&gt;
* Installation des paquets suivants sur la machine virtuelle : ssh, apache2, bind9&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22240</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22240"/>
				<updated>2015-10-15T10:07:29Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 3 (15/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;br /&gt;
&lt;br /&gt;
* Modification du fichier de configuration : PANACHE.cfg (ajout du bridge=IMA5sc et taille mémoire à 512)&lt;br /&gt;
&lt;br /&gt;
* Suite aux modifications :&lt;br /&gt;
&lt;br /&gt;
 xl create /etc/xen/PANACHE.cfg&lt;br /&gt;
&lt;br /&gt;
* Lancement de la machine virtuelle :&lt;br /&gt;
&lt;br /&gt;
 xl console PANACHE&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22233</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22233"/>
				<updated>2015-10-15T09:39:14Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 3 (15/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.162&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/xen-tools/PANACHE.log&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22221</id>
		<title>Cahier groupe n°2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_groupe_n%C2%B02&amp;diff=22221"/>
				<updated>2015-10-15T09:16:38Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 3 (15/10/2015) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cahier des charges de la tâche particulière ==&lt;br /&gt;
=== Présentation de la tâche particulière ===&lt;br /&gt;
La tâche particulière que nous devons effectuer lors de ce projet est la configuration d'un des deux routeurs nécessaires à l'établissement d'un réseau redondant.&lt;br /&gt;
&lt;br /&gt;
=== Matériel utilisé pour la tâche particulière ===&lt;br /&gt;
- Routeur 3560E&lt;br /&gt;
&lt;br /&gt;
== Suivi de l'avancement du TP ==&lt;br /&gt;
=== Semaine 1 (01/10/2015) ===&lt;br /&gt;
En collaboration avec le groupe n°1 :&lt;br /&gt;
&lt;br /&gt;
- Établissement d'un tableau regroupant les informations nécessaires au routage.&lt;br /&gt;
&lt;br /&gt;
- Attribution des adresses IPv4 pour chaque VLAN, l'interconnexion des réseaux ainsi que les machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 (08/10/2015) ===&lt;br /&gt;
Configuration du routeur de la salle E304 en IPv4 :&lt;br /&gt;
&lt;br /&gt;
* Configuration des VLAN :&lt;br /&gt;
&lt;br /&gt;
- VLAN 11 à 20 pour chaque binôme IMA5 SC.&lt;br /&gt;
&lt;br /&gt;
- VLAN 110 pour les machines virtuelles des binômes.&lt;br /&gt;
&lt;br /&gt;
- VLAN 130 pour l'interconnexion avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Configuration entre le routeur et le commutateur de la salle E304.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le commutateur de la salle E306.&lt;br /&gt;
&lt;br /&gt;
* Configuration avec le routeur de l'école.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv4.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 (15/10/2015) ===&lt;br /&gt;
* Configuration du routeur de la salle E304 en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Réalisation de la redondance entre les deux routeurs en IPv6.&lt;br /&gt;
&lt;br /&gt;
* Nous avons choisi le nom de domaine : tissothage.lol&lt;br /&gt;
&lt;br /&gt;
* Nous avons créé notre machine virtuelle sur le dom0 cordouan.insecserv.deule.net : &lt;br /&gt;
&lt;br /&gt;
 ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&lt;br /&gt;
 xen-create-image --hostname=PANACHE --dist=jessie --dir=/usr/local/xen --mirror=ftp.polytech-lille.fr --gateway=193.48.57.174 --ip=193.48.57.162&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20836</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20836"/>
				<updated>2015-05-09T16:55:44Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches, en haut à gauche, est en attente de recevoir des ordres du générateurs de taches, à coté de l'exécuteur :&lt;br /&gt;
[[Fichier:before_order.tiff | thumb]]&lt;br /&gt;
&lt;br /&gt;
Ceci est une représentation de la phase d'exploration. En effet, dans cette phase l'exécuteur de taches vas recevoir un ordre du générateur de taches pour explorer une zone de la map. Il va donc demander au noeud navigation de se déplacer vers le point en bas à gauche de la zone. Dès l'arrivée, l'exécuteur de taches va demander au noeud &amp;quot;approche finale&amp;quot; de s'approcher de la machine afin de lire son ArTag. Grace à ce dernier, il pourra savoir de quelle machine s'agit-il et si le Robotino est du coté de l'entrée ou de la sortie. Parce que, en fait, s'il est en entrée l'exécuteur de taches va demander à la navigation puis l'approche finale d'aller au cotée sortie de la machine puisque la colonne de feu se trouve du coté sortie. Une fois arrivée au coté sortie, l'exécuteur de taches va demander au noeud du traitement feu de lire l'état des trois feus de la colonne FESTO. &lt;br /&gt;
L'interprétation des feus se fait grâce à la refereeBox. En effet, la refereeBox, publie sur un topic, un tableau avec tous les états possibles de feux avec une chaine de caractères pour chaque état. L'exécuteur va donc pouvoir récupérer la chaine de caractères correspondante aux états de feus actuels de la machine explorée. L'exécuteur peut donc maintenant identifier une machine en envoyant : la zone explorée, l'id de l'ArTag trouvé, ainsi que la chaine de caractères qui correspond au feus.&lt;br /&gt;
&lt;br /&gt;
Dans la figure précédente, le générateur de taches n'avait pas encore envoyé son ordre, on peut remarquer que l'exécuteur était en attente. Une fois l'ordre envoyé, comme dans la figure suivante, l'exécuteur peut commencer à donner des ordres aux autre noeuds : &lt;br /&gt;
[[Fichier:after_order.tiff]] &amp;lt;br/&amp;gt;&lt;br /&gt;
On remarque que l'exécuteur a communiqué avec tous les faux-noeuds pour enfin reporter une machine avec la refereeBox &amp;quot;fake réception refereeBox &amp;quot;. &lt;br /&gt;
Notons que fait d'utiliser  des  &amp;quot;faux-noeuds&amp;quot; pour tester nos algorithmes nous permet de se placer dans le cas idéale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Cette semaine était consacré à l'amélioration de nos algorithmes et à la correction des bugs ainsi qu'à l'organisation de notre voyage.&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous sommes partis à Magdebourg le mardi 21/4. Le programme de la semaine était le suivant : &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Mercredi, Jeudi &amp;lt;/u&amp;gt;    :  jours de SetUp. &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons profité de ses jours pour finaliser nos programmes en tant qu'équipe. Et de réaliser des tests sur la piste et de modifier nos programmes afin d'améliorer nos résultats. &lt;br /&gt;
Nous avons aussi réalisé un merge de toutes les branches de notre git afin de tester les interactions des noeuds entre eux. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Vendredi,Samedi &amp;lt;/u&amp;gt; :  jours de matchs &amp;lt;br/&amp;gt;&lt;br /&gt;
En fonction des matches, nous modifions nos programmes afin d'améliorer nos programmes. &amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;u&amp;gt;Dimanche &amp;lt;/u&amp;gt;             : Finale &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons finis deuxième.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20804</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20804"/>
				<updated>2015-05-09T08:51:57Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches, en haut à gauche, est en attente de recevoir des ordres du générateurs de taches, à coté de l'exécuteur :&lt;br /&gt;
[[Fichier:before_order.tiff | thumb]]&lt;br /&gt;
&lt;br /&gt;
Ceci est une représentation de la phase d'exploration. En effet, dans cette phase l'exécuteur de taches vas recevoir un ordre du générateur de taches pour explorer une zone de la map. Il va donc demander au noeud localisation de se déplacer vers le point en bas à gauche de la zone. Dès l'arrivée, l'exécuteur de taches va demander au noeud &amp;quot;approche finale&amp;quot; de s'approcher de la machine afin de lire son ArTag. Grace à ce dernier, il pourra savoir de quelle machine s'agit-il et si le Robotino est du coté de l'entrée ou de la sortie. Parce que, en fait, s'il est en entrée l'exécuteur de taches va demander à la navigation puis l'approche finale d'aller au cotée sortie de la machine puisque la colonne de feu se trouve du coté sortie. Une fois arrivée au coté sortie, l'exécuteur de taches va demander au noeud du traitement feu de lire l'état des trois feus de la colonne FESTO. &lt;br /&gt;
L'interprétation des feus se fait grâce à la refereeBox. En effet, la refereeBox, publie sur un topic, un tableau avec tous les états possibles de feux avec une chaine de caractères pour chaque état. L'exécuteur va donc pouvoir récupérer la chaine de caractères correspondante aux états de feus actuels de la machine explorée. L'exécuteur peut donc maintenant identifier une machine en envoyant : la zone explorée, l'id de l'ArTag trouvé, ainsi que la chaine de caractères qui correspond au feus.&lt;br /&gt;
&lt;br /&gt;
Dans la figure précédente, le générateur de taches n'avait pas encore envoyé son ordre, on peut remarquer que l'exécuteur était en attente. Une fois l'ordre envoyé, comme dans la figure suivante, l'exécuteur peut commencer à donner des ordres aux autre noeuds : &lt;br /&gt;
[[Fichier:after_order.tiff]] &amp;lt;br/&amp;gt;&lt;br /&gt;
On remarque que l'exécuteur a communiqué avec tous les faux-noeuds pour enfin reporter une machine avec la refereeBox &amp;quot;fake réception refereeBox &amp;quot;. &lt;br /&gt;
Notons que fait d'utiliser  des  &amp;quot;faux-noeuds&amp;quot; pour tester nos algorithmes nous permet de se placer dans le cas idéale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Cette semaine était consacré à l'amélioration de nos algorithmes et à la correction des bugs ainsi qu'à l'organisation de notre voyage.&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous sommes partis à Magdebourg le mardi 21/4. Le programme de la semaine était le suivant : &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Mercredi, Jeudi &amp;lt;/u&amp;gt;    :  jours de SetUp. &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons profité de ses jours pour finaliser nos programmes en tant qu'équipe. Et de réaliser des tests sur la piste et de modifier nos programmes afin d'améliorer nos résultats. &lt;br /&gt;
Nous avons aussi réalisé un merge de toutes les branches de notre git afin de tester les interactions des noeuds entre eux. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Vendredi,Samedi &amp;lt;/u&amp;gt; :  jours de matchs &amp;lt;br/&amp;gt;&lt;br /&gt;
En fonction des matches, nous modifions nos programmes afin d'améliorer nos programmes. &amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;u&amp;gt;Dimanche &amp;lt;/u&amp;gt;             : Finale &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons finis deuxième.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20676</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20676"/>
				<updated>2015-05-05T16:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches, en haut à gauche, est en attente de recevoir des ordres du générateurs de taches, à coté de l'exécuteur :&lt;br /&gt;
[[Fichier:before_order.tiff]]&lt;br /&gt;
&lt;br /&gt;
Ceci est une représentation de la phase d'exploration. En effet, dans cette phase l'exécuteur de taches vas recevoir un ordre du générateur de taches pour explorer une zone de la map. Il va donc demander au noeud localisation de se déplacer vers le point en bas à gauche de la zone. Dès l'arrivée, l'exécuteur de taches va demander au noeud &amp;quot;approche finale&amp;quot; de s'approcher de la machine afin de lire son ArTag. Grace à ce dernier, il pourra savoir de quelle machine s'agit-il et si le Robotino est du coté de l'entrée ou de la sortie. Parce que, en fait, s'il est en entrée l'exécuteur de taches va demander à la navigation puis l'approche finale d'aller au cotée sortie de la machine puisque la colonne de feu se trouve du coté sortie. Une fois arrivée au coté sortie, l'exécuteur de taches va demander au noeud du traitement feu de lire l'état des trois feus de la colonne FESTO. &lt;br /&gt;
L'interprétation des feus se fait grâce à la refereeBox. En effet, la refereeBox, publie sur un topic, un tableau avec tous les états possibles de feux avec une chaine de caractères pour chaque état. L'exécuteur va donc pouvoir récupérer la chaine de caractères correspondante aux états de feus actuels de la machine explorée. L'exécuteur peut donc maintenant identifier une machine en envoyant : la zone explorée, l'id de l'ArTag trouvé, ainsi que la chaine de caractères qui correspond au feus.&lt;br /&gt;
&lt;br /&gt;
Dans la figure précédente, le générateur de taches n'avait pas encore envoyé son ordre, on peut remarquer que l'exécuteur était en attente. Une fois l'ordre envoyé, comme dans la figure suivante, l'exécuteur peut commencer à donner des ordres aux autre noeuds : &lt;br /&gt;
[[Fichier:after_order.tiff]] &amp;lt;br/&amp;gt;&lt;br /&gt;
On remarque que l'exécuteur a communiqué avec tous les faux-noeuds pour enfin reporter une machine avec la refereeBox &amp;quot;fake réception refereeBox &amp;quot;. &lt;br /&gt;
Notons que fait d'utiliser  des  &amp;quot;faux-noeuds&amp;quot; pour tester nos algorithmes nous permet de se placer dans le cas idéale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Cette semaine était consacré à l'amélioration de nos algorithmes et à la correction des bugs ainsi qu'à l'organisation de notre voyage.&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous sommes partis à Magdebourg le mardi 21/4. Le programme de la semaine était le suivant : &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Mercredi, Jeudi &amp;lt;/u&amp;gt;    :  jours de SetUp. &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons profité de ses jours pour finaliser nos programmes en tant qu'équipe. Et de réaliser des tests sur la piste et de modifier nos programmes afin d'améliorer nos résultats. &lt;br /&gt;
Nous avons aussi réalisé un merge de toutes les branches de notre git afin de tester les interactions des noeuds entre eux. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Vendredi,Samedi &amp;lt;/u&amp;gt; :  jours de matchs &amp;lt;br/&amp;gt;&lt;br /&gt;
En fonction des matches, nous modifions nos programmes afin d'améliorer nos programmes. &amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;u&amp;gt;Dimanche &amp;lt;/u&amp;gt;             : Finale &amp;lt;br/&amp;gt;&lt;br /&gt;
Nous avons finis deuxième.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20629</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20629"/>
				<updated>2015-05-05T14:19:15Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches, en haut à gauche, est en attente de recevoir des ordres du générateurs de taches, à coté de l'exécuteur :&lt;br /&gt;
[[Fichier:before_order.tiff]]&lt;br /&gt;
&lt;br /&gt;
Ceci est une représentation de la phase d'exploration. En effet, dans cette phase l'exécuteur de taches vas recevoir un ordre du générateur de taches pour explorer une zone de la map. Il va donc demander au noeud localisation de se déplacer vers le point en bas à gauche de la zone. Dès l'arrivée, l'exécuteur de taches va demander au noeud &amp;quot;approche finale&amp;quot; de s'approcher de la machine afin de lire son ArTag. Grace à ce dernier, il pourra savoir de quelle machine s'agit-il et si le Robotino est du coté de l'entrée ou de la sortie. Parce que, en fait, s'il est en entrée l'exécuteur de taches va demander à la navigation puis l'approche finale d'aller au cotée sortie de la machine puisque la colonne de feu se trouve du coté sortie. Une fois arrivée au coté sortie, l'exécuteur de taches va demander au noeud du traitement feu de lire l'état des trois feus de la colonne FESTO. &lt;br /&gt;
L'interprétation des feus se fait grâce à la refereeBox. En effet, la refereeBox, publie sur un topic, un tableau avec tous les états possibles de feux avec une chaine de caractères pour chaque état. L'exécuteur va donc pouvoir récupérer la chaine de caractères correspondante aux états de feus actuels de la machine explorée. L'exécuteur peut donc maintenant identifier une machine en envoyant : la zone explorée, l'id de l'ArTag trouvé, ainsi que la chaine de caractères qui correspond au feus.&lt;br /&gt;
&lt;br /&gt;
Dans la figure précédente, le générateur de taches n'avait pas encore envoyé son ordre, on peut remarquer que l'exécuteur était en attente. Une fois l'ordre envoyé, comme dans la figure suivante, l'exécuteur peut commencer à donner des ordres aux autre noeuds : &lt;br /&gt;
[[Fichier:after_order.tiff]] &amp;lt;br/&amp;gt;&lt;br /&gt;
On remarque que l'exécuteur a communiqué avec tous les faux-noeuds pour enfin reporter une machine avec la refereeBox &amp;quot;fake réception refereeBox &amp;quot;. &lt;br /&gt;
Notons que fait d'utiliser  des  &amp;quot;faux-noeuds&amp;quot; pour tester nos algorithmes nous permet de se placer dans le cas idéale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20616</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20616"/>
				<updated>2015-05-04T20:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches, en haut à gauche, est en attente de recevoir des ordres du générateurs de taches, à coté de l'exécuteur :&lt;br /&gt;
[[Fichier:before_order.tiff]]&lt;br /&gt;
&lt;br /&gt;
Ceci est une représentation de la phase d'exploration. En effet, dans cette phase l'exécuteur de taches vas recevoir un ordre du générateur de taches pour explorer une zone de la map. Il va donc demander au noeud localisation de se déplacer vers le point en bas à gauche de la zone. Dès l'arrivée, l'exécuteur de taches va demander au noeud &amp;quot;approche finale&amp;quot; de s'approcher de la machine afin de lire son ArTag. Grace à ce dernier, il pourra savoir de quelle machine s'agit-il et si le Robotino est du coté de l'entrée ou de la sortie. Parce que, en fait, s'il est en entrée l'exécuteur de taches va demander à la navigation puis l'approche finale d'aller au cotée sortie de la machine puisque la colonne de feu se trouve du coté sortie. Une fois arrivée au coté sortie, l'exécuteur de taches va demander au noeud du traitement feu de lire l'état des trois feus de la colonne FESTO. &lt;br /&gt;
L'interprétation des feus se fait grâce à la refereeBox. En effet, la refereeBox, publie sur un topic, un tableau avec tous les états possibles de feux avec une chaine de caractères pour chaque état. L'exécuteur va donc pouvoir récupérer la chaine de caractères correspondante aux états de feus actuels de la machine explorée. L'exécuteur peut donc maintenant identifier une machine en envoyant : la zone explorée, l'id de l'ArTag trouvé, ainsi que la chaine de caractères qui correspond au feus.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20596</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20596"/>
				<updated>2015-05-04T14:03:18Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
&lt;br /&gt;
Voici une figure qui montre que l'exécuteur de taches est en attente de recevoir des ordres du générateurs de taches :&lt;br /&gt;
[[Fichier:before_order.tiff]]&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20594</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20594"/>
				<updated>2015-05-04T12:53:33Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Afin de pouvoir tester l'interaction de l'exécuteur de taches avec les autres noeuds, nous avons du faire des &amp;quot;faux noeuds&amp;quot; étant donné que les &amp;quot;vrais noeuds&amp;quot; n'étaient pas encore terminés.  &lt;br /&gt;
[[Fichier:Before_order.jpg]]&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Before_order.tiff&amp;diff=20592</id>
		<title>Fichier:Before order.tiff</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Before_order.tiff&amp;diff=20592"/>
				<updated>2015-05-04T10:47:53Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20064</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20064"/>
				<updated>2015-04-15T21:36:57Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication :&lt;br /&gt;
[[Fichier:Schema.001.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20063</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=20063"/>
				<updated>2015-04-15T21:18:56Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création de la classe action qui range les informations contenues dans le topic envoyé par l'exécuteur de tâches&amp;lt;br /&amp;gt;&lt;br /&gt;
Utilisation de la classe action dans la fonction principale pour la phase de production&amp;lt;br /&amp;gt;&lt;br /&gt;
Test OK cependant le traitement des informations ne se fait pas suffisamment rapidement pour une utilisation pratique&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
Après avoir discuter avec les autres membres de l'équipe, nous avons réalisé quelques modification au niveau des communications entre l'exécuteur de taches et les autres noeuds. En fait, &amp;lt;I&amp;gt; les services &amp;lt;/I&amp;gt; permettent d'envoyer une requête au serveur correspondant et ensuite le client reçoit une réponse de bonne réception de la requête. Alors que &amp;lt;I&amp;gt; les topics &amp;lt;/I&amp;gt; permettent d'envoyer, à une certaine fréquence, les valeurs de variables qui correspondent à ce topic. Ainsi, on remarque qu'on aurait besoin d'utiliser un &amp;quot;mélange&amp;quot; de ces deux moyens de communication. En Ros, cela existe : &amp;lt;B&amp;gt; les actions &amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Voici donc à nouveau le schéma de communication : &lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema.001.jpg&amp;diff=20062</id>
		<title>Fichier:Schema.001.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema.001.jpg&amp;diff=20062"/>
				<updated>2015-04-15T21:16:53Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19024</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19024"/>
				<updated>2015-03-19T13:31:30Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Avec ROS, on peut communiquer entre les différents noeuds de plusieurs façons. En voici deux qui sont principalement utilisés :&lt;br /&gt;
* Les Topics : qui sont souvent utilisés pour publier des valeurs de données en continues &lt;br /&gt;
* Les services : qui permettent d'envoyer un ordre à un noeud (REQUEST) et qui permettent de recevoir de bonne réception de l'ordre (RESPONSE)&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds, en rouge on a les services et en bleu les topics : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19023</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19023"/>
				<updated>2015-03-19T13:11:24Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'éxécuteur de taches va recevoir des ordres de la part du &amp;lt;b&amp;gt; générateur de taches &amp;lt;/b&amp;gt;. En fonction de ces ordres, il enverra des demandes d'exécution/d'informations aux autres noeuds. Il y a donc un seul générateur de taches et trois exécuteurs de taches ( on a trois robotinos ). &lt;br /&gt;
Voici les classes qui correspondent à chaque exécuteur de taches : &lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
*'''Machine''' est une classe abstraite qui servira à la création des quatre classes filles qui représenteront les quatre machines de la compétition. &lt;br /&gt;
** ''string type'' sera donc BaseStation, RingStation, CapStation ou DeliveryStation.&lt;br /&gt;
** ''Pose2D centreMachine'' est un point(x,y,theta) qui va correspondre au retour du noeud de localisation (Projet 36)&lt;br /&gt;
** ''Pose2D entreeMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour déposer un produit&lt;br /&gt;
** ''Pose2D sortieMachine'' est un point(x,y,theta) qui sera calculé afin de pouvoir déterminer l'emplacement exacte du convoyeur pour prendre un produit&lt;br /&gt;
*'''BaseStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int baseRouge'', ''int baseNoir'' et  ''int baseArgent'' vont correspondre aux nombres de bases rouges, bases noires, base argentes respectivement.&lt;br /&gt;
*'''RingStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int ringVert'', ''int ringJaune'', ''int ringBleu'' et ''ringOrange'' vont correspondre aux nombres de rings verts, rings jaunes, rings bleus et rings oranges respectivement.&lt;br /&gt;
*'''CapStation''' est une classe fille de la classe &amp;quot;Machine&amp;quot;.&lt;br /&gt;
** ''int capNoir'' et  ''int capGris'' vont correspondre aux nombres de caps noirs et caps gris respectivement.&lt;br /&gt;
** ''int stock[3]'' est un tableau qui va correspondre aux trois emplacements stockage de la capStation.&lt;br /&gt;
** 'Pose2D stockage'' est un point(x,y,theta) qui correspond à l'emplacement de la première zone de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19016</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19016"/>
				<updated>2015-03-19T12:42:48Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
[[Fichier:shema1.png]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Shema1.png&amp;diff=19015</id>
		<title>Fichier:Shema1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Shema1.png&amp;diff=19015"/>
				<updated>2015-03-19T12:38:04Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19014</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19014"/>
				<updated>2015-03-19T11:29:47Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Générateur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
[[Fichier:shema1.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19012</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19012"/>
				<updated>2015-03-19T11:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Exécuteur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema2.jpg&amp;diff=19011</id>
		<title>Fichier:Schema2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Schema2.jpg&amp;diff=19011"/>
				<updated>2015-03-19T11:23:02Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19010</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19010"/>
				<updated>2015-03-19T11:20:51Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19009</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=19009"/>
				<updated>2015-03-19T10:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Générateur de 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, outre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous les produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Une '''Priorité''' sera calculée pour chaque produit avec les paramètres suivants : &lt;br /&gt;
*** Nombre de points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** Une estimation du temps de production d'un produit.&lt;br /&gt;
***La date limite de livraison du produit demandé&lt;br /&gt;
** Une tâche est élue si sa priorité est supérieure ou égale à celle des autres tâches.&lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit. Une tâche contient différents champs :&lt;br /&gt;
***Intitulé de la tâche (par exemple ajouter une base)&lt;br /&gt;
***Produit concernée (par exemple P3)&lt;br /&gt;
***Priorité de la tâche (par exemple 20)&lt;br /&gt;
***Temps restant estimé de production (par exemple 180s)&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau la priorité de chaque tâche de la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être élue. Par exemple, on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exemple suivant simule le cas où la RefBox a demandé deux fois le produit P3 et deux fois le produit P2.&lt;br /&gt;
*Le produit P3 est réalisable en cinq tâches.Ce produit mettra plus de temps à être fabriqué mais rapportera plus de points.&lt;br /&gt;
*Le produit P2 est réalisable en quatre tâches.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:listedelistes.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Structure utilisée pour ranger les tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Différentes remarques utiles :&lt;br /&gt;
*Avant de commencer à réaliser n'importe quel produit, il faudra au préalable vérifier si on a libérer un espace de stockage pour plusieurs raisons :&lt;br /&gt;
**Les Cap Stations ayant initialement aucun cap en stock, il faut les ramener de l'étagère qui en contient initialement car un produit est dit fini lorsqu'il a à son sommet un cap.&lt;br /&gt;
**L'étagère ayant été débarrassée d'un cap, cela permet d'avoir un espace de stockage afin de déposer des produits finis en attente de livraison ou des produits non finis dont on voudrait mettre en pause la production.&lt;br /&gt;
*Il sera peut être des fois plus avantageux d'abandonner temporairement la production d'un produit :&lt;br /&gt;
**Il vaut mieux faire en sorte de terminer un seul produit sur deux dans les temps plutôt qu'aucun car du fait de la parallélisation de la fabrication des produits, on peut être surchargé de travail.&lt;br /&gt;
**Un produit livré durant le laps de temps demandé rapportera plus de points non négligeables.&lt;br /&gt;
*Un tableau sera nécessaire afin de savoir ce qu'il y a les espaces de stockage avec les champs suivants :&lt;br /&gt;
**Type de produit&lt;br /&gt;
**Liste de tâches restantes pour la fabrication du produit (pour un produit fini cette liste est donc nulle)&lt;br /&gt;
**Date de début de livraison&lt;br /&gt;
**Date de fin de livraison&lt;br /&gt;
**Emplacement de l'espace de stockage&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Différentes fonctions et actions en pseudo code pour le générateur de tâches&lt;br /&gt;
**Fonction qui retourne un booléen suivant si un produit est en stock ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on doit livrer le produit à présent ou non&lt;br /&gt;
**Fonction qui retourne un booléen suivant si on a déjà ou non mis le travail à faire dans la structure contenant les tâches à réaliser&lt;br /&gt;
**Fonction qui retourne le nombre de points que rapporte un produit passé en paramètre&lt;br /&gt;
**Action qui rajoute les nouveaux ordres de production dans la liste de listes de tâches&lt;br /&gt;
**Action qui calcule le ratio pour chaque tâche &lt;br /&gt;
**Action qui supprime les tâches vides (ie celles qui sont terminées)&lt;br /&gt;
*Début de l'écriture en pseudo code de la fonction principale&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Discussion avec M. Vincent Coelen concernant l'avancement du projet :&lt;br /&gt;
**Validation par M. Coelen Vincent des portions de pseudo code déjà écrites&lt;br /&gt;
**Discussion autour de la mise en place d'un arrêt immédiat des robots à tout moment du jeu&lt;br /&gt;
**Amélioration concernant la robustesse de l'algorithme si un robot n'est plus en état de fonctionnement &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Différentes remarques utiles :&lt;br /&gt;
**Branche concernant le manager créée sur le [https://github.com/PyroTeam/robocup-pkg/ git] de l'équipe &lt;br /&gt;
**Discussion avec d'autres membres de l'équipe sur les services et les topics à envoyer et à recevoir aux nœuds du manager&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
====Générateur de tâches====&lt;br /&gt;
Début du codage C++ :&lt;br /&gt;
*Création de différentes classes :&lt;br /&gt;
**La classe Tache (tache.h et tache.cpp)&lt;br /&gt;
**La classe Stockage (stockage.h et stockage.cpp)&lt;br /&gt;
**La classe RefBoxComm (refboxcomm.h)&lt;br /&gt;
*Création de différentes fonctions :&lt;br /&gt;
**Dans tache.h et tache.cpp :&lt;br /&gt;
***point_par_produit : retourne le nombre de points que vaut un produit&lt;br /&gt;
***dans_les_temps : retourne un booléen indiquant s'il est temps de ramener le produit&lt;br /&gt;
**Dans listetaches.h et listetaches.cpp :&lt;br /&gt;
***creation_liste_taches_prod : retourne une liste de taches à partir d'un produit passé en paramètre&lt;br /&gt;
***creation_liste_taches_act  : retourne une liste de taches à partir d'un produit et d'une action passés en paramètres&lt;br /&gt;
**Dans tableaustockage.h :&lt;br /&gt;
***produit_en_stock : retourne un booléen indiquant si au moins un produit est en stock&lt;br /&gt;
**Dans travail.h et travail.cpp :&lt;br /&gt;
***deja_dans_travail : retourne un booléen indiquant si un ordre de la RefBox a déjà été pris en compte dans la structure contenant les tâches à réaliser&lt;br /&gt;
***max_ratio : retourne l'objet Tache qui a le plus grand ratio dans la structure contenant les tâches à réaliser&lt;br /&gt;
***rajout_dans_travail : rajoute un nouvel ordre de la RefBox dans la structure contenant les tâches à réaliser &lt;br /&gt;
***calcul_ratio : calcule le ratio de chaque premier de liste de la structure contenant les tâches à réaliser&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Les codes sont disponibles sur le [https://github.com/PyroTeam/robocup-pkg/tree/feature/manager/generateur_taches git]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Des tests ont été réalisés afin de valider les fonctions crées en particulier les fonctions contenues dans travail.h et travail.cpp&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Voici un petit aperçu de la console :&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Capture terminal gen taches 3.png|800px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, les quatres fonctions fonctionnent parfaitement :&lt;br /&gt;
*deja_dans_travail indique bien que l'ordre de la RefBox n'a pas encore pris en compte&lt;br /&gt;
*max_ratio retourne bien la tâche dont le ratio est maximum&lt;br /&gt;
*rajout_dans_travail rajoute en fin de liste la liste de tâches pour la première création d'un produit P0 car un cap est disponible , puis il concatène une liste contenant en tête la tâche &amp;quot;Decapsuler&amp;quot; avec la liste de tâches pour la seconde création d'un produit P0. En effet, la RefBox a demandé deux fois le produit P0 et on ne peut créer un produit tant qu'un cap n'est pas disponible.&lt;br /&gt;
*calcul_ratio calcule le ratio de chaque première tâche en fonction du nombre de points et du temps, de plus, si c'est le bon moment pour déstocker un produit il passe cette tâche &amp;quot;Destocker&amp;quot; en priorité (liste 6), en outre, la création d'un produit (liste 1 et liste 7) est prioritaire à l'unique tâche &amp;quot;Decapsuler&amp;quot; (listes 2, 3, 4 et 5) . &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Nous avons enfin reçu le sujet 2015 pour la compétition 2015, il est disponible [https://drive.google.com/file/d/0B39jN82rDE6qSk11YXFuQVljTlE/view?usp=sharing ici]'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Modification à réaliser :&lt;br /&gt;
**la fonction de création de liste de tâches&lt;br /&gt;
**l'ordonnancement (en partie)&lt;br /&gt;
**calcul de ratio de chaque tâche&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
[[Fichier:[[Fichier:Exemple.jpg]]]]====Générateur de tâches====&lt;br /&gt;
*Création du service pour l'envoi des ordres pour l’exécuteur de tâches avec pour contenu:&lt;br /&gt;
**Numéro du robot&lt;br /&gt;
***1, 2 ou 3&lt;br /&gt;
**Ordre&lt;br /&gt;
***ChercherBase&lt;br /&gt;
***MettreCap&lt;br /&gt;
***ChercherCap&lt;br /&gt;
***MettreRing&lt;br /&gt;
***ChercherRing&lt;br /&gt;
***RamenerBaseRS&lt;br /&gt;
***Livrer&lt;br /&gt;
***Decapsuler&lt;br /&gt;
***Destocker&lt;br /&gt;
**Paramètre&lt;br /&gt;
***noir&lt;br /&gt;
***argent&lt;br /&gt;
***rouge&lt;br /&gt;
***orange&lt;br /&gt;
***jaune&lt;br /&gt;
***bleu&lt;br /&gt;
***vert&lt;br /&gt;
***gris&lt;br /&gt;
***DS&lt;br /&gt;
***stock&lt;br /&gt;
***aucun&lt;br /&gt;
**Id&lt;br /&gt;
***0, 1, 2, 3, 4, 5 ou 6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L'exécuteur de tâches du robot concerné doit envoyer en retour :&lt;br /&gt;
*un booléen qui indique si l'ordre est accepté ou non&lt;br /&gt;
*l'ordre pris en compte&lt;br /&gt;
*l'Id de retour&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour le débogage à l'aide de ddd&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Création d'un nœud ROS pour similer l'envoi et la réception des ordres&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Exécuteur de tâches====&lt;br /&gt;
L'exécuteur de taches est un noeud qui recevra des ordres de la part du &amp;lt;b&amp;gt;générateur de taches&amp;lt;/b&amp;gt; et qui, à son tour, va envoyer des ordres aux autres noeuds.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma de communication entre les différents noeuds : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=17813</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=17813"/>
				<updated>2015-02-25T16:31:33Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* 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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, autre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Écriture des sous-tâches à réaliser&lt;br /&gt;
**Pseudo-codes de certaines sous-tâches réalisées &lt;br /&gt;
*Recherche d'ordonnancement optimisé pour la fabrication du produit&lt;br /&gt;
**Recherche d'algorithmes&lt;br /&gt;
**Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:80%;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Tâches&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Ressources utilisées&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Contraintes de précédence&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T0&lt;br /&gt;
 | Ramener à CS base avec cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T1&lt;br /&gt;
 | Décapsuler&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T2&lt;br /&gt;
 | Ramener base supplémentaires à RS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T3&lt;br /&gt;
 | Chercher base bleue&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | Aucune&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T4&lt;br /&gt;
 | Ramener à RS pour ring vert&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T7&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T5&lt;br /&gt;
 | Ramener à RS pour ring rouge&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T8&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T6&lt;br /&gt;
 | Ramener à CS pour cap&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T9&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T7&lt;br /&gt;
 | Ramener Base&lt;br /&gt;
 | Base Station&lt;br /&gt;
 | T3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T8&lt;br /&gt;
 | Ajouter ring vert&lt;br /&gt;
 | Ring Station 1&lt;br /&gt;
 | T4&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T9&lt;br /&gt;
 | Ajouter ring rouge&lt;br /&gt;
 | Ring Station 1 ou 2&lt;br /&gt;
 | T5 et T2&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T10&lt;br /&gt;
 | Ajouter cap&lt;br /&gt;
 | Cap Station 1 ou 2&lt;br /&gt;
 | T6 et T1&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T11&lt;br /&gt;
 | Traiter le produit fini&lt;br /&gt;
 | Delivery Station&lt;br /&gt;
 | T12&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | T12&lt;br /&gt;
 | Ramener à DS&lt;br /&gt;
 | Robot 1, 2 ou 3&lt;br /&gt;
 | T10&lt;br /&gt;
 |}&lt;br /&gt;
[[Fichier:TachesProduitExemple.png|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Graphe montrant l'ordre des tâches à réaliser&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données : &lt;br /&gt;
* Une '''liste principale''' de tous la produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :&lt;br /&gt;
** Un '''Ratio''' sera calculé pour chaque produit de la manière suivante :  &amp;lt;math&amp;gt;ratio = Points Totals / Temps Estime De Production &amp;lt;/math&amp;gt; avec : &lt;br /&gt;
*** PointsTotals : Points que peut apporter la production d'un produit de A à Z.&lt;br /&gt;
*** TempsEstimeDeProduction : Une estimation de la production d'un produit de A à Z.&lt;br /&gt;
** On trie cette liste en fonction du Ratio. En effet, plus le Ratio sera grand plus le produit aura une priorité à être produit immédiatement. &lt;br /&gt;
** Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.&lt;br /&gt;
* Chaque produit de la liste principale va contenir une '''liste de tâches''' correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :&lt;br /&gt;
** Chaque cellule correspond à une tâche de la production d'un produit ( Par exemple, ajouter une base ).&lt;br /&gt;
** A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau le Ratio de la liste principale, donc de trier à nouveau la liste principale.&lt;br /&gt;
** Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être exécutée seulement. C'est à dire, par exemple, qu'on ne peut pas ajouter un Ring si on n'a pas de base.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16828</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16828"/>
				<updated>2015-02-12T08:47:51Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : /* Semaine 3 */&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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, autre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : [https://drive.google.com/file/d/0B39jN82rDE6qMG45cDN5Z0xiSVE/view?usp=sharing Sujet]&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :&lt;br /&gt;
**Ce que le robotino fait&lt;br /&gt;
**Quelle machine le robotino est en train d'utiliser&lt;br /&gt;
[[Fichier:DataSWithRobotComm.jpg|center]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de production&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
***Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la Base Station&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une Ring Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Ring Station quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une Cap Station&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la Cap Station quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la Delivery Station&lt;br /&gt;
    générateur de trajectoire (vers la Delivery Station)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
*Organisation générale :&lt;br /&gt;
**Création de la page Facebook de l'équipe PYRO Team&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16741</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16741"/>
				<updated>2015-02-11T15:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, autre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de prodution&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la BS&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   dire à la BS quelle base est souhaitée et à quelle banc le robotino est &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une RS&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une RS&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la RS quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une CS&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la CS quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la DS&lt;br /&gt;
    générateur de trajectoire (vers la DS)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16740</id>
		<title>RoboCup 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=RoboCup_2015&amp;diff=16740"/>
				<updated>2015-02-11T15:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;Shage-ch : &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;
[[Fichier:logoPyro_icone.png |center ]]&lt;br /&gt;
&amp;lt;I&amp;gt; Polytech RoboCup Team &amp;lt;/I&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points.&lt;br /&gt;
C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
&lt;br /&gt;
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.  &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
*Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)&lt;br /&gt;
*Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Pour le projet, autre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes : &lt;br /&gt;
*Communication avec le nœud de la RefereeBox à tout moment du jeu&lt;br /&gt;
*Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)&lt;br /&gt;
*Coopération entre les trois robots&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Interactions.png|vignette|left|upright=2|Interactions des nœuds avec le manager]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :&lt;br /&gt;
*RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du  jeu à la RefereeBox&lt;br /&gt;
*Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font&lt;br /&gt;
*Traitement des TAGs : lire les TAG &lt;br /&gt;
*Traitement des feux : lire l'état des colonnes de feu&lt;br /&gt;
*Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince&lt;br /&gt;
*Approche finale : s'adapter au banc de charge ou de décharge de produits&lt;br /&gt;
*Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)&lt;br /&gt;
*Réalisation trajectoire : parcourir la trajectoire &lt;br /&gt;
*Localisation : savoir périodiquement (faible période) où se situe le robot&lt;br /&gt;
*Détection d'obstacle : détecter les obstacles fixes et mobiles&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
*Utilisation de trois robotinos&lt;br /&gt;
*Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).&lt;br /&gt;
*Utilisation de différents langages : C++ ou Python (nœuds)&lt;br /&gt;
*Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etapes du projet===&lt;br /&gt;
*Prise en main de ROS et du C++&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase d'exploration&lt;br /&gt;
*Élaboration de l'algorithme du manager pour la phase de production&lt;br /&gt;
**Coopération entre robots&lt;br /&gt;
**Répartition des tâches&lt;br /&gt;
*Codage du manager&lt;br /&gt;
*Tests et corrections&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*Prise en main de ROS &lt;br /&gt;
*Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials&lt;br /&gt;
*Réalisation de différents tutoriels C++&lt;br /&gt;
*Connaissance plus aiguë du sujet de l'Open German 2015&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Réflexions autour de la structure du manager : deux nœuds&lt;br /&gt;
**Un nœud exécuteur de tâches&lt;br /&gt;
**Un nœud générateur de tâches&lt;br /&gt;
*Réflexions sur l'algorithme général du manager concernant la phase d'exploration&lt;br /&gt;
**Fonctionnement par zoning pour la répartition des tâches des trois robots&lt;br /&gt;
**Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines&lt;br /&gt;
*Recherche de solutions pour la phase de production&lt;br /&gt;
**Documentation autour de la planification de tâches et la génération de tâche pour une équipe&lt;br /&gt;
**Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches&lt;br /&gt;
*Organisation générale&lt;br /&gt;
**Structuration d'un échéancier numérique sous Asana&lt;br /&gt;
**Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*Réflexions au niveau de l'algorithme de la phase de prodution&lt;br /&gt;
**Proposition de le faire sous le principe de &amp;quot;Diviser pour mieux régner&amp;quot; (validé par M. Vincent Coelen)&lt;br /&gt;
**Détermination des tâches à réaliser pour un exemple particulier&lt;br /&gt;
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :&lt;br /&gt;
[[Fichier:ExempleProduitDemande.jpg|center]]&lt;br /&gt;
''Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.''&lt;br /&gt;
&lt;br /&gt;
'''Obtenir Base Bleue''' &lt;br /&gt;
 -&amp;gt;Aller à la BS&lt;br /&gt;
   générateur trajectoire&lt;br /&gt;
   exécuteur trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit&lt;br /&gt;
   dire à la BS quelle base est souhaitée et à quelle banc le robotino est &lt;br /&gt;
   approche finale &lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring rouge'''&lt;br /&gt;
 -&amp;gt;Aller à une RS&lt;br /&gt;
   Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
   générateur de trajectoire&lt;br /&gt;
   exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
   approche finale&lt;br /&gt;
   traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
   RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
   approche finale&lt;br /&gt;
   pince (déposer)&lt;br /&gt;
   pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Obtenir ring vert'''&lt;br /&gt;
 -&amp;gt;Aller à une RS&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    (Du coup la plus proche sera celle où on vient de faire le ring précédent)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la RS quelle base est souhaitée ( ici, la verte )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel produit et quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
&lt;br /&gt;
'''Finaliser produit'''&lt;br /&gt;
 -&amp;gt;Aller à une CS&lt;br /&gt;
    Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm)&lt;br /&gt;
    générateur de trajectoire&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
 -&amp;gt;Vérifier si machine OK&lt;br /&gt;
    dire à la CS quelle cap est souhaité ( ici, le noir )&lt;br /&gt;
    approche finale&lt;br /&gt;
    traitement feux&lt;br /&gt;
 -&amp;gt;Prendre produit &lt;br /&gt;
    RefBoxComm (pour dire quel banc de livraison)&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (prendre)&lt;br /&gt;
 -&amp;gt;Déposer à la DS&lt;br /&gt;
    générateur de trajectoire (vers la DS)&lt;br /&gt;
    exécuteur de trajectoire&lt;br /&gt;
    approche finale&lt;br /&gt;
    pince (déposer)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;/div&gt;</summary>
		<author><name>Shage-ch</name></author>	</entry>

	</feed>