﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://bacasable.arpitania.eu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Axel+lebreton</id>
	<title>Learning Lab Environnements Connectés - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://bacasable.arpitania.eu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Axel+lebreton"/>
	<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Sp%C3%A9cial:Contributions/Axel_lebreton"/>
	<updated>2026-04-05T21:17:04Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1574</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1574"/>
		<updated>2015-06-10T10:32:41Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]]&amp;lt;br&amp;gt; qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;br /&gt;
&lt;br /&gt;
==Améliorations possibles== &lt;br /&gt;
===Partie Software===&lt;br /&gt;
Nous avons pensé à gérer l'ensemble du projet grâce au processeur Linux beaucoup plus performant (ce qui nous permettrait de gagner en temps de calculs).&lt;br /&gt;
&lt;br /&gt;
===Idées de fonctionnalités futures==&lt;br /&gt;
* Nous aurions aimer pouvoir, avec un peu plus de temps, réaliser le cahier des charges de départ.&lt;br /&gt;
* Pouvoir effectuer la même chose sur plusieurs robots à la fois (chorégraphie &amp;quot;géante&amp;quot;).&lt;br /&gt;
* Pouvoir améliorer la détection grâce à nos capteurs (ou changer de modèle). &lt;br /&gt;
* Ajouter des capteurs sur les robots esclaves, ce qui entrainerait le fait qu'aucun robot ne puisse rentrer en collision avec des obstacles.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1573</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1573"/>
		<updated>2015-06-10T10:32:25Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]]&amp;lt;br&amp;gt; qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;br /&gt;
&lt;br /&gt;
==Améliorations possibles== &lt;br /&gt;
===Partie Software===&lt;br /&gt;
Nous avons pensé à gérer l'ensemble du projet grâce au processeur Linux beaucoup plus performant (ce qui nous permettrait de gagner en temps de calculs).&lt;br /&gt;
&lt;br /&gt;
===Idées de fonctionnalités futures==&lt;br /&gt;
* Nous aurions aimer pouvoir, avec un peu plus de temps, réaliser le cahier des charges de départ.&lt;br /&gt;
* Pouvoir effectuer la même chose sur plusieurs robots à la fois (chorégraphie &amp;quot;géante&amp;quot;).&lt;br /&gt;
* Pouvoir améliorer la détection grâce à nos capteurs (ou changer de modèle). &lt;br /&gt;
* Ajouter des capteurs sur les robots esclaves, ce qui entrainerait le fait qu'aucun robot ne puisse rentrer en collision avec des obstacles.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1572</id>
		<title>Télémètres</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1572"/>
		<updated>2015-06-10T10:31:37Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
[[Robots connectés]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
&lt;br /&gt;
= Configuration des télémètres SHARP 2D120X=&lt;br /&gt;
&lt;br /&gt;
D'après la datasheet, les télémètres peuvent être utilisés entre 4 et 30cm. Or, nous avons remarqué au cours de nos tests que les télémètres captés des valeurs qui semblaient aléatoires.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc retracé les courbes de chaque télémètres pour comprendre ce qu'il se passait. Pour cela, on plaçait devant le télémètre un objet et on relevait la valeur analogique retournée. Nous avons ainsi pu tracer le type de courbe suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma1.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma2.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que si aucun objet n'était présent devant le télémètre, il nous renvoyait une valeur correspondante à 12/13cm. Nous avons nommé cette valeur &amp;quot;valeur à infinie&amp;quot;. Celle peut variée en fonction de l'environnement et était une contrainte pour nous. En effet la détection d'obstacle ne devient effective quand dessous de cette valeur. Nous avons donc choisis de limiter notre détection à 10cm. Cette valeur permet de s'affranchir de la contrainte de la &amp;quot;valeur à l'infinie&amp;quot; et nous laisse une distance suffisante pour permettre au robot d'éviter les objets sur son chemin.&lt;br /&gt;
&lt;br /&gt;
En fait, ces capteurs sont sensibles aux variations de l'environnement. C'est pourquoi pour une utilisation optimale nous conseillons que l'environnement soit le plus foncé possible (création d'une &amp;quot;arène&amp;quot; noir pour que les capteurs détectent les distances &amp;gt;40cm comme une distance infinie &amp;lt;=&amp;gt; valeur analogique récupérée très faible.&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que nos faisceaux sur nos télémètres ne s'élargissent pas, ils sont très directifs. En effet, en essayant de détecter à quel moment les capteurs détectait un obstacle si on le passait devant lui, nous avons pu dessiner un couloir de détection qui est en fait assez mince (environ 1cm).&lt;br /&gt;
&lt;br /&gt;
= Piste d'amélioration possible =&lt;br /&gt;
&lt;br /&gt;
*Comme la valeur retournée est analogique il faudrait brancher un oscilloscope à nos télémètre pour voir s'il n'y a pas un bruit permanent. Nous pourrions alors supprimer ce bruit par un traitement préalable. La détection serait alors plus efficace.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1571</id>
		<title>Télémètres</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1571"/>
		<updated>2015-06-10T10:30:20Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : /* Configuration des télémètres SHARP 2D120X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Configuration des télémètres SHARP 2D120X=&lt;br /&gt;
&lt;br /&gt;
D'après la datasheet, les télémètres peuvent être utilisés entre 4 et 30cm. Or, nous avons remarqué au cours de nos tests que les télémètres captés des valeurs qui semblaient aléatoires.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc retracé les courbes de chaque télémètres pour comprendre ce qu'il se passait. Pour cela, on plaçait devant le télémètre un objet et on relevait la valeur analogique retournée. Nous avons ainsi pu tracer le type de courbe suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma1.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma2.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que si aucun objet n'était présent devant le télémètre, il nous renvoyait une valeur correspondante à 12/13cm. Nous avons nommé cette valeur &amp;quot;valeur à infinie&amp;quot;. Celle peut variée en fonction de l'environnement et était une contrainte pour nous. En effet la détection d'obstacle ne devient effective quand dessous de cette valeur. Nous avons donc choisis de limiter notre détection à 10cm. Cette valeur permet de s'affranchir de la contrainte de la &amp;quot;valeur à l'infinie&amp;quot; et nous laisse une distance suffisante pour permettre au robot d'éviter les objets sur son chemin.&lt;br /&gt;
&lt;br /&gt;
En fait, ces capteurs sont sensibles aux variations de l'environnement. C'est pourquoi pour une utilisation optimale nous conseillons que l'environnement soit le plus foncé possible (création d'une &amp;quot;arène&amp;quot; noir pour que les capteurs détectent les distances &amp;gt;40cm comme une distance infinie &amp;lt;=&amp;gt; valeur analogique récupérée très faible.&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que nos faisceaux sur nos télémètres ne s'élargissent pas, ils sont très directifs. En effet, en essayant de détecter à quel moment les capteurs détectait un obstacle si on le passait devant lui, nous avons pu dessiner un couloir de détection qui est en fait assez mince (environ 1cm).&lt;br /&gt;
&lt;br /&gt;
= Piste d'amélioration possible =&lt;br /&gt;
&lt;br /&gt;
*Comme la valeur retournée est analogique il faudrait brancher un oscilloscope à nos télémètre pour voir s'il n'y a pas un bruit permanent. Nous pourrions alors supprimer ce bruit par un traitement préalable. La détection serait alors plus efficace.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1570</id>
		<title>Télémètres</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=T%C3%A9l%C3%A9m%C3%A8tres&amp;diff=1570"/>
		<updated>2015-06-10T10:26:35Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Configuration des télémètres SHARP 2D120X=&lt;br /&gt;
&lt;br /&gt;
D'après la datasheet, les télémètres peuvent être utilisés entre 4 et 30cm. Or, nous avons remarqué au cours de nos tests que les télémètres captés des valeurs qui semblaient aléatoires.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc retracé les courbes de chaque télémètre pour comprendre ce qu'il se passait. Pour cela, on plaçait devant le télémètre un objet et on relevait la valeur analogique retournée. Nous avons ainsi pu tracer le type de courbe suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma1.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma2.png|vignette|centre|Courbe d'un télémètre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que si aucun objet n'était présent devant le télémètre, il nous renvoyait une valeur correspondante à 12/13cm. Nous avons nommé cette valeur &amp;quot;valeur à infinie&amp;quot;. Celle peut variée en fonction de l'environnement et était une contrainte pour nous. En effet la détection d'obstacle ne devient effective quand dessous de cette valeur. Nous avons donc choisis de limiter notre détection à 10cm. Cette valeur permet de s'affranchir de la contrainte de la &amp;quot;valeur à l'infinie&amp;quot; et nous laisse une distance suffisante pour permettre au robot d'éviter les objets sur son chemin.&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué que nos faisceaux sur nos télémètres ne s'élargissent pas, ils sont très directifs.&lt;br /&gt;
&lt;br /&gt;
= Piste d'amélioration possible =&lt;br /&gt;
&lt;br /&gt;
*Comme la valeur retournée est analogique il faudrait brancher un oscilloscope à nos télémètre pour voir s'il n'y a pas un bruit permanent. Nous pourrions alors supprimer ce bruit par un traitement préalable. La détection serait alors plus efficace.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1569</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1569"/>
		<updated>2015-06-10T10:25:50Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]]&amp;lt;br&amp;gt; qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;br /&gt;
&lt;br /&gt;
==Améliorations possibles== &lt;br /&gt;
===Partie Software===&lt;br /&gt;
Nous avons pensé à gérer l'ensemble du projet grâce au processeur Linux beaucoup plus performant (ce qui nous permettrait de gagner en temps de calculs).&lt;br /&gt;
&lt;br /&gt;
===Idées de fonctionnalités futures==&lt;br /&gt;
* Nous aurions aimer pouvoir, avec un peu plus de temps, réaliser le cahier des charges de départ.&lt;br /&gt;
* Pouvoir effectuer la même chose sur plusieurs robots à la fois (chorégraphie &amp;quot;géante&amp;quot;).&lt;br /&gt;
* Pouvoir améliorer la détection grâce à nos capteurs (ou changer de modèle). &lt;br /&gt;
* Ajouter des capteurs sur les robots esclaves, ce qui entrainerait le fait qu'aucun robot ne puisse rentrer en collision avec des obstacles.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1568</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1568"/>
		<updated>2015-06-10T10:25:22Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]] qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;br /&gt;
&lt;br /&gt;
==Améliorations possibles== &lt;br /&gt;
===Partie Software===&lt;br /&gt;
Nous avons pensé à gérer l'ensemble du projet grâce au processeur Linux beaucoup plus performant (ce qui nous permettrait de gagner en temps de calculs).&lt;br /&gt;
&lt;br /&gt;
===Idées de fonctionnalités futures==&lt;br /&gt;
* Nous aurions aimer pouvoir, avec un peu plus de temps, réaliser le cahier des charges de départ.&lt;br /&gt;
* Pouvoir effectuer la même chose sur plusieurs robots à la fois (chorégraphie &amp;quot;géante&amp;quot;).&lt;br /&gt;
* Pouvoir améliorer la détection grâce à nos capteurs (ou changer de modèle). &lt;br /&gt;
* Ajouter des capteurs sur les robots esclaves, ce qui entrainerait le fait qu'aucun robot ne puisse rentrer en collision avec des obstacles.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1567</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1567"/>
		<updated>2015-06-10T10:24:44Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : /* Communication entre les robots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Télémètres|Calibration des télémètre infrarouges]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]] qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;br /&gt;
&lt;br /&gt;
==Améliorations possibles== &lt;br /&gt;
===Partie Software===&lt;br /&gt;
Nous avons pensé à gérer l'ensemble du projet grâce au processeur Linux beaucoup plus performant (ce qui nous permettrait de gagner en temps de calculs).&lt;br /&gt;
&lt;br /&gt;
===Idées de fonctionnalités futures==&lt;br /&gt;
* Nous aurions aimer pouvoir, avec un peu plus de temps, réaliser le cahier des charges de départ.&lt;br /&gt;
* Pouvoir effectuer la même chose sur plusieurs robots à la fois (chorégraphie &amp;quot;géante&amp;quot;).&lt;br /&gt;
* Pouvoir améliorer la détection grâce à nos capteurs (ou changer de modèle). &lt;br /&gt;
* Ajouter des capteurs sur les robots esclaves, ce qui entrainerait le fait qu'aucun robot ne puisse rentrer en collision avec des obstacles.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1564</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1564"/>
		<updated>2015-06-10T10:12:07Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : /* Résultat final */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)|Déroulement du projet / phasage]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Télémètres|Calibration des télémètre infrarouges]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Instructable Robot]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisées dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Méthodes utilisées==&lt;br /&gt;
Pour une explication plus détaillée de nos problèmes référez vous à la partie [[Déroulement projet (tout le travail effectué)]].&lt;br /&gt;
&lt;br /&gt;
===Nos Robots===&lt;br /&gt;
Deux Robots identiques ont été utilisés pour réaliser notre projet. Le premier possède à l'avant 3 [[Télémètres]] qui lui servent à détecter les obstacles présents devant lui.&lt;br /&gt;
Le deuxième ne possède aucun capteur car il va simplement imiter à tout instant le robot maître.&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots== &lt;br /&gt;
Pour pouvoir effectuer une communication quasi instantanée entre nos robots nous avons décidé de gérer la connexion Wi-Fi en passant via un point d'accès (un routeur que nous avons configuré nous même pour ce projet : Voir [[Instructable Robot|Instructable]]). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons également choisi de gérer la communication Wi-Fi grâce à la partie Linux de notre carte Arduino. Ceci dû au fait que le microprocesseur Linux soit beaucoup plus rapide et performant que le processeur Arduino.&lt;br /&gt;
&lt;br /&gt;
===Serveur Web=== &lt;br /&gt;
La création d'une page Web nous a permis de générer une interface graphique agréable et facile d'utilisation. il suffit, une fois connecté au routeur, de taper l'adresse du robot maître dans la barre d'adresse du navigateur.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1557</id>
		<title>Instructable Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1557"/>
		<updated>2015-06-10T09:52:58Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matériel==&lt;br /&gt;
===Robot maître===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-3 capteurs SHARP 2D120X&amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-1 table d'essai&amp;lt;br&amp;gt;&lt;br /&gt;
-8 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Robot esclave===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-4 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Routeur WIFI===&lt;br /&gt;
Le modèle que nous avons utilisé est un D-LINK DWL-2100AP.&lt;br /&gt;
&lt;br /&gt;
==Branchement câbles==&lt;br /&gt;
1- Mettez la carte Yun et la table d'essai sur le robot&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Robot placement.jpg|vignette|centre|Robot placement]]&lt;br /&gt;
2- Si les capteurs ne sont pas installés, veuillez les installer sur le socle prévu à cet effet, et fixer le socle à l'avant du robot&amp;lt;br&amp;gt;&lt;br /&gt;
3- Suivez le schéma ci-dessous afin de réaliser le branchement des câbles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot branchement.jpg|vignette|centre|Branchement robot / capteurs / Carte Serializer]]&lt;br /&gt;
&lt;br /&gt;
==Installation logicielle==&lt;br /&gt;
&lt;br /&gt;
=== 1. Environnement Linux===&lt;br /&gt;
&lt;br /&gt;
'''Expand de la carte sd'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Tutorial/ExpandingYunDiskSpace&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du WIFI'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Guide/ArduinoYun#toc13 afin de connecter la carte Arduino Yún au routeur Wifi.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du routeur'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mettre en place un DHCP statique avec les configurations suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot maître =&amp;gt; @IP 192.168.1.51&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot esclave =&amp;gt; @IP 192.168.1.52&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Accès au Linux embarqué'''&amp;lt;br /&amp;gt;&lt;br /&gt;
À l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte via l'adresse IP que le routeur lui a attribué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut les identifiants sont :&lt;br /&gt;
    user : root&lt;br /&gt;
    password : arduino&lt;br /&gt;
&lt;br /&gt;
Effectuez les commandes suivantes afin d'installer les logiciels pré-requis:&lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install openssh-sftp-server&lt;br /&gt;
&lt;br /&gt;
'''Copie des fichiers'''&amp;lt;br /&amp;gt;&lt;br /&gt;
A partir d'un client tftp (FileZilla par exemple), copiez le script python &amp;quot;sender_udp.py&amp;quot; sur la carte maître et &amp;quot;receiver_udp.py&amp;quot; sur la carte esclave dans le répértoire suivant:  &amp;lt;br /&amp;gt;&lt;br /&gt;
    /mnt/sd/arduino/www/server_client_socket/&lt;br /&gt;
&lt;br /&gt;
Une fois connecté vous devez exécuter les tâches suivantes pour permettre à la carte de démarrer le script python automatiquement: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Ouvrir le fichier rc.local&lt;br /&gt;
    vi /etc/rc.local&lt;br /&gt;
2. Rajouter la ligne suivante dans le fichier (nomScript.py fait référence soit à sender_udp.py soit à receiver_udp.py)&lt;br /&gt;
    python /mnt/sd/arduino/www/server_client_socket/nomScript.py&lt;br /&gt;
&lt;br /&gt;
=== 2. Environnement Arduino===&lt;br /&gt;
Deux codes sources (voir ci-dessous) sont à disposition de l'utilisateur afin de réaliser les instructions :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Robot Maître '''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Server_Modes.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
''' Robot Esclave'''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Client.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
&lt;br /&gt;
=== 3. Code Source===&lt;br /&gt;
[[Fichier:Arduino_Robot_Server_Modes.rar|vignette|Code source robot maître]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Arduino Robot Client.rar|vignette|Code source robot client]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface WEB==&lt;br /&gt;
Pour mettre en place l'interface WEB afin de gérer plusieurs scénarios il suffit de suivre les étapes suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Installation du php'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Comme précedemment l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte du robot maître.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tapez les commandes suivantes : &lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install php5-cgi&lt;br /&gt;
    opkg install php5-cli&lt;br /&gt;
&lt;br /&gt;
Modifiez le fichier vi /etc/config/uhttpd en supprimant le # devant la ligne suivante:&lt;br /&gt;
    # list interpreter    &amp;quot;.php=/usr/bin/php-cgi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Copie des codes sources'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Avec un client tftp, extraire le dossier &amp;quot;[[Fichier:Robot controller.zip|vignette]]&amp;quot; dans le répertoire suivant &lt;br /&gt;
    /mnt/sd/arduino/www/sd/arduino/robot_controller/&lt;br /&gt;
&lt;br /&gt;
'''Ouverture de la page'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Vous pouvez ensuite accéder à l'interface WEB via l'adresse suivante:&lt;br /&gt;
   http://192.168.1.51/sd/robot_controller/index.php&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1551</id>
		<title>Instructable Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1551"/>
		<updated>2015-06-10T09:45:14Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : /* Interface WEB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matériel==&lt;br /&gt;
===Robot maître===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-3 capteurs SHARP 2D120X&amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-1 table d'essai&amp;lt;br&amp;gt;&lt;br /&gt;
-8 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Robot esclave===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-4 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Routeur WIFI===&lt;br /&gt;
&lt;br /&gt;
==Branchement câbles==&lt;br /&gt;
1- Mettez la carte Yun et la table d'essai sur le robot&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Robot placement.jpg|vignette|centre|Robot placement]]&lt;br /&gt;
2- Si les capteurs ne sont pas installés, veuillez les installer sur le socle prévu à cet effet, et fixer le socle à l'avant du robot&amp;lt;br&amp;gt;&lt;br /&gt;
2- Brancher comme ceci les câbles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot branchement.jpg|vignette|centre|Branchement robot / capteurs / Carte Serializer]]&lt;br /&gt;
==Installation logicielle==&lt;br /&gt;
&lt;br /&gt;
=== 1. Environnement Linux===&lt;br /&gt;
&lt;br /&gt;
'''Expand de la carte sd'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Tutorial/ExpandingYunDiskSpace&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du WIFI'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Guide/ArduinoYun#toc13 afin de connecter la carte Arduino Yún au routeur Wifi.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du routeur'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mettre en place un DHCP statique avec les configurations suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot maître =&amp;gt; @IP 192.168.1.51&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot esclave =&amp;gt; @IP 192.168.1.52&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Accès au Linux embarqué'''&amp;lt;br /&amp;gt;&lt;br /&gt;
À l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte via l'adresse IP que le routeur lui a attribué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut les identifiants sont :&lt;br /&gt;
    user : root&lt;br /&gt;
    password : arduino&lt;br /&gt;
&lt;br /&gt;
Effectuez les commandes suivantes afin d'installer les logiciels pré-requis:&lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install openssh-sftp-server&lt;br /&gt;
&lt;br /&gt;
'''Copie des fichiers'''&amp;lt;br /&amp;gt;&lt;br /&gt;
A partir d'un client tftp (FileZilla par exemple), copiez le script python &amp;quot;sender_udp.py&amp;quot; sur la carte maître et &amp;quot;receiver_udp.py&amp;quot; sur la carte esclave dans le répértoire suivant:  &amp;lt;br /&amp;gt;&lt;br /&gt;
    /mnt/sd/arduino/www/server_client_socket/&lt;br /&gt;
&lt;br /&gt;
Une fois connecté vous devez exécuter les tâches suivantes pour permettre à la carte de démarrer le script python automatiquement: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Ouvrir le fichier rc.local&lt;br /&gt;
    vi /etc/rc.local&lt;br /&gt;
2. Rajouter la ligne suivante dans le fichier (nomScript.py fait référence soit à sender_udp.py soit à receiver_udp.py)&lt;br /&gt;
    python /mnt/sd/arduino/www/server_client_socket/nomScript.py&lt;br /&gt;
&lt;br /&gt;
=== 2. Environnement Arduino===&lt;br /&gt;
Deux codes sources (voir ci-dessous) sont à disposition de l'utilisateur afin de réaliser les instructions :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Robot Maître '''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Server_Modes.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
''' Robot Esclave'''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Client.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
&lt;br /&gt;
=== 3. Code Source===&lt;br /&gt;
[[Fichier:Arduino_Robot_Server_Modes.rar|vignette|Code source robot maître]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Arduino Robot Client.rar|vignette|Code source robot client]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface WEB==&lt;br /&gt;
Pour mettre en place l'interface WEB afin de gérer plusieurs scénarios il suffit de suivre les étapes suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Installation du php'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Comme précedemment l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte du robot maître.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tapez les commandes suivantes : &lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install php5-cgi&lt;br /&gt;
    opkg install php5-cli&lt;br /&gt;
&lt;br /&gt;
Modifiez le fichier vi /etc/config/uhttpd en supprimant le # devant la ligne suivante:&lt;br /&gt;
    # list interpreter    &amp;quot;.php=/usr/bin/php-cgi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Copie des codes sources'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Avec un client tftp, extraire le dossier &amp;quot;[[Fichier:Robot controller.zip|vignette]]&amp;quot; dans le répertoire suivant &lt;br /&gt;
    /mnt/sd/arduino/www/sd/arduino/robot_controller/&lt;br /&gt;
&lt;br /&gt;
'''Ouverture de la page'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Vous pouvez ensuite accéder à l'interface WEB via l'adresse suivante:&lt;br /&gt;
   http://192.168.1.51/sd/robot_controller/index.php&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1550</id>
		<title>Instructable Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1550"/>
		<updated>2015-06-10T09:44:05Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matériel==&lt;br /&gt;
===Robot maître===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-3 capteurs SHARP 2D120X&amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-1 table d'essai&amp;lt;br&amp;gt;&lt;br /&gt;
-8 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Robot esclave===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-4 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Routeur WIFI===&lt;br /&gt;
&lt;br /&gt;
==Branchement câbles==&lt;br /&gt;
1- Mettez la carte Yun et la table d'essai sur le robot&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Robot placement.jpg|vignette|centre|Robot placement]]&lt;br /&gt;
2- Si les capteurs ne sont pas installés, veuillez les installer sur le socle prévu à cet effet, et fixer le socle à l'avant du robot&amp;lt;br&amp;gt;&lt;br /&gt;
2- Brancher comme ceci les câbles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot branchement.jpg|vignette|centre|Branchement robot / capteurs / Carte Serializer]]&lt;br /&gt;
==Installation logicielle==&lt;br /&gt;
&lt;br /&gt;
=== 1. Environnement Linux===&lt;br /&gt;
&lt;br /&gt;
'''Expand de la carte sd'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Tutorial/ExpandingYunDiskSpace&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du WIFI'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Guide/ArduinoYun#toc13 afin de connecter la carte Arduino Yún au routeur Wifi.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du routeur'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mettre en place un DHCP statique avec les configurations suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot maître =&amp;gt; @IP 192.168.1.51&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot esclave =&amp;gt; @IP 192.168.1.52&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Accès au Linux embarqué'''&amp;lt;br /&amp;gt;&lt;br /&gt;
À l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte via l'adresse IP que le routeur lui a attribué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut les identifiants sont :&lt;br /&gt;
    user : root&lt;br /&gt;
    password : arduino&lt;br /&gt;
&lt;br /&gt;
Effectuez les commandes suivantes afin d'installer les logiciels pré-requis:&lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install openssh-sftp-server&lt;br /&gt;
&lt;br /&gt;
'''Copie des fichiers'''&amp;lt;br /&amp;gt;&lt;br /&gt;
A partir d'un client tftp (FileZilla par exemple), copiez le script python &amp;quot;sender_udp.py&amp;quot; sur la carte maître et &amp;quot;receiver_udp.py&amp;quot; sur la carte esclave dans le répértoire suivant:  &amp;lt;br /&amp;gt;&lt;br /&gt;
    /mnt/sd/arduino/www/server_client_socket/&lt;br /&gt;
&lt;br /&gt;
Une fois connecté vous devez exécuter les tâches suivantes pour permettre à la carte de démarrer le script python automatiquement: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Ouvrir le fichier rc.local&lt;br /&gt;
    vi /etc/rc.local&lt;br /&gt;
2. Rajouter la ligne suivante dans le fichier (nomScript.py fait référence soit à sender_udp.py soit à receiver_udp.py)&lt;br /&gt;
    python /mnt/sd/arduino/www/server_client_socket/nomScript.py&lt;br /&gt;
&lt;br /&gt;
=== 2. Environnement Arduino===&lt;br /&gt;
Deux codes sources (voir ci-dessous) sont à disposition de l'utilisateur afin de réaliser les instructions :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Robot Maître '''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Server_Modes.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
''' Robot Esclave'''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (Arduino_Robot_Client.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
&lt;br /&gt;
=== 3. Code Source===&lt;br /&gt;
[[Fichier:Arduino_Robot_Server_Modes.rar|vignette|Code source robot maître]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Arduino Robot Client.rar|vignette|Code source robot client]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface WEB==&lt;br /&gt;
Pour mettre en place l'interface WEB afin de gérer plusieurs scénarios il suffit de suivre les étapes suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Installation du php'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Comme précedemment l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte du robot maître.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tapez les commandes suivantes : &lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install php5-cgi&lt;br /&gt;
    opkg install php5-cli&lt;br /&gt;
&lt;br /&gt;
Modifiez le fichier vi /etc/config/uhttpd en supprimant le # devant la ligne suivante:&lt;br /&gt;
    # list interpreter    &amp;quot;.php=/usr/bin/php-cgi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Copie des codes sources'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Avec un client tftp, extraire le dossier &amp;quot;[[Fichier:Robot controller.zip|vignette]]&amp;quot; dans le répertoire suivant &lt;br /&gt;
    /www/sd/arduino/robot_controller/&lt;br /&gt;
&lt;br /&gt;
'''Ouverture de la page'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Vous pouvez ensuite accéder à l'interface WEB via l'adresse suivante:&lt;br /&gt;
   http://192.168.1.51/sd/robot_controller/index.php&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1548</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1548"/>
		<updated>2015-06-10T09:41:28Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot de tête (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisée dans l'ordre expliqué ci dessus :&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/baEcm0s0N3g}}&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1545</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1545"/>
		<updated>2015-06-10T09:40:09Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisée dans l'ordre expliqué ci dessus :&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1544</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1544"/>
		<updated>2015-06-10T09:39:49Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisée dans l'ordre expliqué ci dessus :&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1542</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1542"/>
		<updated>2015-06-10T09:39:39Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ih.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisée dans l'ordre expliqué ci dessus :&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Ihm.jpg&amp;diff=1541</id>
		<title>Fichier:Ihm.jpg</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Ihm.jpg&amp;diff=1541"/>
		<updated>2015-06-10T09:39:15Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : Axel lebreton a téléchargé une nouvelle version de Fichier:Ihm.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1540</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1540"/>
		<updated>2015-06-10T09:38:07Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], [[Utilisateur:Léa C.|Léa]], [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo finale de notre projet regroupant l'ensemble des fonctionnalités réalisée dans l'ordre expliqué ci dessus :&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1529</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1529"/>
		<updated>2015-06-10T09:31:10Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], [[Utilisateur:‎Boussit.yoann|Yoann]], [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1526</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1526"/>
		<updated>2015-06-10T09:30:20Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs modes de fonctionnement existent. &lt;br /&gt;
* Mode '''Manuel'''. Celui-ci nous permet de pouvoir piloter, à l'aide des flèches de notre clavier, le robot de tête. Le robot suiveur effectuera exactement les mêmes mouvements que le robot piloté.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce mode, nous pouvons activer la CheckBox nous permettant de piloter seulement le robot de tête.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mode '''Auto'''. Celui-ci nous permettra de voir le robot maître (de tête) éviter les obstacles se trouvant juste devant lui. Encore une fois le second robot imitera le moindre de ses mouvements. &lt;br /&gt;
&lt;br /&gt;
*Mode '''Danse'''. Les robots effectuent en synchronisation des mouvements pré-programmés uniquement sur le robot maître. Le robot esclave imitera le premier encore une fois.&lt;br /&gt;
&lt;br /&gt;
*Le bouton '''Stop''' sert à stopper tout mouvement des deux robots.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1513</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1513"/>
		<updated>2015-06-10T09:16:03Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
* Premièrement, l'interface Web permettant de piloter le mode de fonctionnement du robot (ainsi que les commandes de direction et de stop).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1511</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1511"/>
		<updated>2015-06-10T09:15:00Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=3|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1509</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1509"/>
		<updated>2015-06-10T09:14:47Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=2|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1507</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1507"/>
		<updated>2015-06-10T09:14:24Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|upright=0.5|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1506</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1506"/>
		<updated>2015-06-10T09:14:07Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|upright=0.5|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1504</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1504"/>
		<updated>2015-06-10T09:12:07Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|vignette|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1502</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1502"/>
		<updated>2015-06-10T09:11:19Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici ce que nous avons été capable de réaliser dans le temps qui nous était imparti : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:ihm.jpg|centré|Ihm pour contrôller notre robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Ihm.jpg&amp;diff=1500</id>
		<title>Fichier:Ihm.jpg</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Ihm.jpg&amp;diff=1500"/>
		<updated>2015-06-10T09:09:53Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1498</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1498"/>
		<updated>2015-06-10T09:06:58Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Résultat final==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu réaliser plusieurs fonctionnalités grâce à nos robots sans forcément réaliser la première idée évoquée (les robots suiveurs). &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1494</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1494"/>
		<updated>2015-06-10T09:04:02Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
[[Télémètres]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil seront gérées par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Principe de fonctionnement==&lt;br /&gt;
Notre cahier des charges étant assez large et nous octroyant un degré de liberté relativement important, nous avons pu créer une&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1487</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1487"/>
		<updated>2015-06-10T08:50:22Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif de départ==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
==Principe de fonctionnement==&lt;br /&gt;
C&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1486</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1486"/>
		<updated>2015-06-10T08:31:38Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1485</id>
		<title>Instructable Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1485"/>
		<updated>2015-06-10T08:31:12Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matériel==&lt;br /&gt;
===Robot maître===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-3 capteurs SHARP 2D120X&amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-1 table d'essai&amp;lt;br&amp;gt;&lt;br /&gt;
-8 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Robot esclave===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-4 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Routeur WIFI===&lt;br /&gt;
&lt;br /&gt;
==Branchement câbles==&lt;br /&gt;
1- Mettez la carte Yun et la table d'essai sur le robot&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Robot placement.jpg|vignette|centre|Robot placement]]&lt;br /&gt;
2- Si les capteurs ne sont pas installés, veuillez les installer sur le socle prévu à cet effet, et fixer le socle à l'avant du robot&amp;lt;br&amp;gt;&lt;br /&gt;
2- Brancher comme ceci les câbles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot branchement.jpg|vignette|centre|Branchement robot / capteurs / Carte Serializer]]&lt;br /&gt;
==Installation logicielle==&lt;br /&gt;
&lt;br /&gt;
=== 1. Environnement Linux===&lt;br /&gt;
&lt;br /&gt;
'''Expand de la carte sd'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Tutorial/ExpandingYunDiskSpace&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du WIFI'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Guide/ArduinoYun#toc13 afin de connecter la carte Arduino Yún au routeur Wifi.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du routeur'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mettre en place un DHCP statique avec les configurations suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot maître =&amp;gt; @IP 192.168.1.51&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot esclave =&amp;gt; @IP 192.168.1.52&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Accès au Linux embarqué'''&amp;lt;br /&amp;gt;&lt;br /&gt;
À l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte via l'adresse IP que le routeur lui a attribué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut les identifiants sont :&lt;br /&gt;
    user : root&lt;br /&gt;
    password : arduino&lt;br /&gt;
&lt;br /&gt;
Effectuez les commandes suivantes afin d'installer les logiciels pré-requis:&lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install openssh-sftp-server&lt;br /&gt;
&lt;br /&gt;
'''Copie des fichiers'''&amp;lt;br /&amp;gt;&lt;br /&gt;
A partir d'un client tftp (FileZilla par exemple), copiez le script python &amp;quot;sender_udp.py&amp;quot; sur la carte maître et &amp;quot;receiver_udp.py&amp;quot; sur la carte esclave dans le répértoire suivant:  &amp;lt;br /&amp;gt;&lt;br /&gt;
    \mnt\sd\arduino\www\server_client_socket\&lt;br /&gt;
&lt;br /&gt;
Une fois connecté vous devez exécuter les tâches suivantes pour permettre à la carte de démarrer le script python automatiquement: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Ouvrir le fichier rc.local&lt;br /&gt;
    vi \etc\rc.local&lt;br /&gt;
2. Rajouter la ligne suivante dans le fichier (nomScript.py fait référence soit à sender_udp.py soit à receiver_udp.py)&lt;br /&gt;
    python \mnt\sd\arduino\www\server_client_socket\nomScript.py&lt;br /&gt;
&lt;br /&gt;
=== 2. Environnement Arduino===&lt;br /&gt;
Deux codes sources (voir ci-dessous) sont à disposition de l'utilisateur afin de réaliser les instructions :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Robot Maître '''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (nomMaitre.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
''' Robot Esclave'''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (nomEsclave.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1484</id>
		<title>Instructable Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Instructable_Robots_suiveurs&amp;diff=1484"/>
		<updated>2015-06-10T08:30:39Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Déroulement de notre projet (to]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matériel==&lt;br /&gt;
===Robot maître===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-3 capteurs SHARP 2D120X&amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-1 table d'essai&amp;lt;br&amp;gt;&lt;br /&gt;
-8 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Robot esclave===&lt;br /&gt;
-1 robot (carcasse + carte Serializer)&amp;lt;br&amp;gt;&lt;br /&gt;
-1 batterie &amp;lt;br&amp;gt;&lt;br /&gt;
-1 carte arduino Yun&amp;lt;br&amp;gt;&lt;br /&gt;
-4 fils&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Routeur WIFI===&lt;br /&gt;
&lt;br /&gt;
==Branchement câbles==&lt;br /&gt;
1- Mettez la carte Yun et la table d'essai sur le robot&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Robot placement.jpg|vignette|centre|Robot placement]]&lt;br /&gt;
2- Si les capteurs ne sont pas installés, veuillez les installer sur le socle prévu à cet effet, et fixer le socle à l'avant du robot&amp;lt;br&amp;gt;&lt;br /&gt;
2- Brancher comme ceci les câbles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot branchement.jpg|vignette|centre|Branchement robot / capteurs / Carte Serializer]]&lt;br /&gt;
==Installation logicielle==&lt;br /&gt;
&lt;br /&gt;
=== 1. Environnement Linux===&lt;br /&gt;
&lt;br /&gt;
'''Expand de la carte sd'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Tutorial/ExpandingYunDiskSpace&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du WIFI'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Suivre le tuto http://www.arduino.cc/en/Guide/ArduinoYun#toc13 afin de connecter la carte Arduino Yún au routeur Wifi.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configuration du routeur'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mettre en place un DHCP statique avec les configurations suivantes:&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot maître =&amp;gt; @IP 192.168.1.51&amp;lt;br /&amp;gt;&lt;br /&gt;
@Mac carte robot esclave =&amp;gt; @IP 192.168.1.52&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Accès au Linux embarqué'''&amp;lt;br /&amp;gt;&lt;br /&gt;
À l'aide d'un client SSH (Putty, etc.) connectez-vous à la carte via l'adresse IP que le routeur lui a attribué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut les identifiants sont :&lt;br /&gt;
    user : root&lt;br /&gt;
    password : arduino&lt;br /&gt;
&lt;br /&gt;
Effectuez les commandes suivantes afin d'installer les logiciels pré-requis:&lt;br /&gt;
    opkg update&lt;br /&gt;
    opkg install openssh-sftp-server&lt;br /&gt;
&lt;br /&gt;
'''Copie des fichiers'''&amp;lt;br /&amp;gt;&lt;br /&gt;
A partir d'un client tftp (FileZilla par exemple), copiez le script python &amp;quot;sender_udp.py&amp;quot; sur la carte maître et &amp;quot;receiver_udp.py&amp;quot; sur la carte esclave dans le répértoire suivant:  &amp;lt;br /&amp;gt;&lt;br /&gt;
    \mnt\sd\arduino\www\server_client_socket\&lt;br /&gt;
&lt;br /&gt;
Une fois connecté vous devez exécuter les tâches suivantes pour permettre à la carte de démarrer le script python automatiquement: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Ouvrir le fichier rc.local&lt;br /&gt;
    vi \etc\rc.local&lt;br /&gt;
2. Rajouter la ligne suivante dans le fichier (nomScript.py fait référence soit à sender_udp.py soit à receiver_udp.py)&lt;br /&gt;
    python \mnt\sd\arduino\www\server_client_socket\nomScript.py&lt;br /&gt;
&lt;br /&gt;
=== 2. Environnement Arduino===&lt;br /&gt;
Deux codes sources (voir ci-dessous) sont à disposition de l'utilisateur afin de réaliser les instructions :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Robot Maître '''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (nomMaitre.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;br /&gt;
''' Robot Esclave'''&lt;br /&gt;
# Connectez la carte Arduino Yùn à votre ordinateur grâce à un câble USB.&lt;br /&gt;
# Ouvrez le code source (nomEsclave.ino) avec l'IDE Arduino et le téléverser sur la carte&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1483</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1483"/>
		<updated>2015-06-10T08:29:58Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Premier Brainstorming : Séance 1=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1482</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1482"/>
		<updated>2015-06-10T08:29:12Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot (comment réaliser notre projet)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots connectés]]&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Premier Brainstorming : Séance 1=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1481</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1481"/>
		<updated>2015-06-10T08:28:55Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot (comment réaliser notre projet)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Robots Connectés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Premier Brainstorming : Séance 1=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1480</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1480"/>
		<updated>2015-06-10T08:28:21Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Robot Connectés]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Premier Brainstorming : Séance 1=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1479</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1479"/>
		<updated>2015-06-10T08:27:35Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Eléments de notre projet=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot (comment réaliser notre projet)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1478</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1478"/>
		<updated>2015-06-10T08:26:59Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1477</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1477"/>
		<updated>2015-06-10T08:26:21Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Premier Brainstorming : Séance 1=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1476</id>
		<title>Déroulement projet robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=D%C3%A9roulement_projet_robots_suiveurs&amp;diff=1476"/>
		<updated>2015-06-10T08:25:21Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : Page créée avec « =Sujet= Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir u... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1475</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1475"/>
		<updated>2015-06-10T08:24:21Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot (comment réaliser notre projet)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1474</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1474"/>
		<updated>2015-06-10T08:24:07Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencé par réfléchir à comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est-à-dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci a permis de guider notre premier objectif de travail, qui a alors consisté à déterminer quel était expérimentalement le champs de vision de notre capteur (Est-il large ou mince ?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet à moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champs de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configurations auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième, quant à elle, est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utilisé des socles fournis par l'école nous permettant de visser les capteurs au robot. (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet, nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve à 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Ainsi, si notre objet est à 10cm ou qu'il n'y a pas d'objet, notre robot avancera. Mais si l'objet est détecté à 9cm alors une manœuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive à récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on n'a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection à de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel côté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information, le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui-ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 &lt;br /&gt;
                                      qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot (comment réaliser notre projet)]]&lt;br /&gt;
[[Déroulement projet (tout le travail effectué)]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1448</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1448"/>
		<updated>2015-06-09T09:57:42Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencer par réfléchir a comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est a dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci à permis de guider notre premier objectif de travail, qui a alors consisté a déterminer quel était expérimentalement le champ de vision de notre capteur (Est-il Large ou mince?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet a moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champ de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configuration auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième quand à elle est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utiliser des socles fournis par l'école nous permettant de visser les capteurs au robot de manière stable (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve a 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Comme cela si notre objet est a 10cm ou qu'il n'y a pas d'objet notre robot avancera. Mais si l'objet est detecté a 9cm alors une manoeuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive a récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection a de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle. Afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel coté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1447</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1447"/>
		<updated>2015-06-09T09:57:27Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencer par réfléchir a comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est a dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci à permis de guider notre premier objectif de travail, qui a alors consisté a déterminer quel était expérimentalement le champ de vision de notre capteur (Est-il Large ou mince?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet a moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champ de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configuration auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième quand à elle est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utiliser des socles fournis par l'école nous permettant de visser les capteurs au robot de manière stable (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve a 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Comme cela si notre objet est a 10cm ou qu'il n'y a pas d'objet notre robot avancera. Mais si l'objet est detecté a 9cm alors une manoeuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive a récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection a de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle. Afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel coté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots :&lt;br /&gt;
[[Fichier:Comm finale.jpg|Communication entre nos robots]]&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Comm_finale.jpg&amp;diff=1446</id>
		<title>Fichier:Comm finale.jpg</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Comm_finale.jpg&amp;diff=1446"/>
		<updated>2015-06-09T09:56:03Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : schéma expliquant le principe adopté pour la communication entre nos robots.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;schéma expliquant le principe adopté pour la communication entre nos robots.&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1445</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1445"/>
		<updated>2015-06-09T09:53:14Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencer par réfléchir a comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est a dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci à permis de guider notre premier objectif de travail, qui a alors consisté a déterminer quel était expérimentalement le champ de vision de notre capteur (Est-il Large ou mince?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet a moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champ de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configuration auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième quand à elle est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utiliser des socles fournis par l'école nous permettant de visser les capteurs au robot de manière stable (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve a 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Comme cela si notre objet est a 10cm ou qu'il n'y a pas d'objet notre robot avancera. Mais si l'objet est detecté a 9cm alors une manoeuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive a récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection a de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle. Afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel coté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voici notre schéma final résumant la communication entre nos deux robots :&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1444</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1444"/>
		<updated>2015-06-09T09:43:00Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencer par réfléchir a comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est a dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci à permis de guider notre premier objectif de travail, qui a alors consisté a déterminer quel était expérimentalement le champ de vision de notre capteur (Est-il Large ou mince?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet a moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champ de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configuration auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième quand à elle est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utiliser des socles fournis par l'école nous permettant de visser les capteurs au robot de manière stable (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve a 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Comme cela si notre objet est a 10cm ou qu'il n'y a pas d'objet notre robot avancera. Mais si l'objet est detecté a 9cm alors une manoeuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive a récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection a de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle. Afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel coté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1443</id>
		<title>Robots suiveurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_suiveurs&amp;diff=1443"/>
		<updated>2015-06-09T09:42:39Z</updated>

		<summary type="html">&lt;p&gt;Axel lebreton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sujet=&lt;br /&gt;
Nous proposons aux participants de créer et développer des robots connectés, sur le thème initial de robots suiveurs. Le scénario de départ fait intervenir un robot-maître, suivi de 2 robots en file indienne. Ce scénario est appelé à évoluer en complexité au fil de l'avancée du projet.&lt;br /&gt;
&lt;br /&gt;
Les robots seront développés sur des bases Stinger et Traxer qui embarquent une carte microcontrôleur qui gère la puissance et l'asservissement. Le dialogue (envoi de commandes) avec cette carte se fait par liaison série TTL 5V. L'intelligence du robot et la communication sans fil sera gérée par Arduino Yùn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projet=&lt;br /&gt;
Participants : [[Utilisateur:‎Charlotte milanetto|Charlotte]], [[Utilisateur:‎Safae HABSATI|Safae]], Léa, [[Utilisateur:Flora tran|Flora]], Jimmy, [[Utilisateur:El-azrak.mehdi|Mehdi]], [[Utilisateur:Cyril.maillot|Cyril]], Yoann, [[Utilisateur:‎Axel lebreton|Axel]].&lt;br /&gt;
&lt;br /&gt;
==Objectif==&lt;br /&gt;
*Avoir 3 robots qui se suivent.&lt;br /&gt;
*Obtenir la même distance entre les robots au départ et à l’arrivée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1ère solution évoquée''' : Robot maitre avec détection les autres sans, le maitre transmet l’itinéraire à suivre aux autres robots.&lt;br /&gt;
&lt;br /&gt;
''Problème'' : si vitesse différente des robots ça ne marchera pas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2ème solution''' : le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). &lt;br /&gt;
&lt;br /&gt;
''Problème'' : nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre les robots==&lt;br /&gt;
&lt;br /&gt;
*1ère solution:	&lt;br /&gt;
**Wi-Fi comme vu en première séance &lt;br /&gt;
**Ethernet&lt;br /&gt;
**Bluetooth&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Choix de Wi-Fi car fiable et vu en première séance de projet.&lt;br /&gt;
&lt;br /&gt;
Solutions techniques apportées en « vrac » :&lt;br /&gt;
&lt;br /&gt;
*Utilisation de timers pour savoir combien de temps le robot doit rouler avant de s’arrêter.&lt;br /&gt;
*Les roues du robot sont asservies. Le robot va faire en sorte d’atteindre la vitesse qu’on lui donnera.&lt;br /&gt;
&lt;br /&gt;
==Résumé de la méthode à aborder pour le moment==&lt;br /&gt;
&lt;br /&gt;
Le maître détecte l’obstacle et tourne sur place d’un côté, il communique ensuite aux autres robots la distance minimum à partir de laquelle les robots esclaves devront tourner si il détecte un obstacle. &lt;br /&gt;
&lt;br /&gt;
'''Problèmes engendrés par cette méthode''' : &lt;br /&gt;
Pendant que le robot maitre tournera il est possible que les esclaves détectent le robot maitre en pleine manœuvre comme un obstacle et qu’il commence à tourner, ce qui décalerai le parcours du robot esclave car il n’était pas censé tourner avant de détecter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Solutions envisagées''' (à étudier plus tard dans le projet) : &lt;br /&gt;
Pendant que le premier robot tourne les autres s’arrêtent/ralentissent et attendent un peu que le robot est terminé sa manœuvre de rotation. -&amp;gt; Cependant il faudra que les deux robots suiveurs rattrapent la distance perdue pendant qu’ils étaient à l’arrêt par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Répartition du travail''' : &lt;br /&gt;
&lt;br /&gt;
*On se divise le travail en trois groupes pour éviter de tous travailler sur la même chose.&lt;br /&gt;
*Un groupe travaillera sur la communication entre deux cartes Arduino coté serveur&lt;br /&gt;
*Un autre groupe travaillera sur le robot maitre (mise en marche et détection d’obstacles)&lt;br /&gt;
*Un autre groupe travaillera sur la communication coté client&lt;br /&gt;
*Mise en commun des méthodes mises en place pour le calcul de la distance entre le capteur et l’objet pour arriver à une méthode la plus fiable possible de calcul de distance à l’aide des capteurs.&lt;br /&gt;
&lt;br /&gt;
==Idées de développements ultérieurs== &lt;br /&gt;
&lt;br /&gt;
*Faire un parcours sans obstacles ou les robots ferait une chorégraphie et se rejoindrait tous à un moment donné.&lt;br /&gt;
*Programmer les robots pour que le robot maitre, si jamais un robot est déplacé, puisse rappeler tout ses robots et qu’ils se remettent en place (PROBLÈME :  il faudrait un GPS -&amp;gt; Matériellement peut possible à réaliser pour le moment). &lt;br /&gt;
*Commande à distance pour ordonner une séparation par exemple puis il faut qu’ils se remettent tous en place.&lt;br /&gt;
&lt;br /&gt;
Idées à approfondir peut être et/ou à étudier pour pouvoir réaliser un projet intéressant.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Phasage=&lt;br /&gt;
==Jour 1==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
'''Prise en main de la carte Arduino Yun.'''&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, notre objectif était de faire clignoter la LED N°13, tout d'abord, en passant par le port série de la carte Arduino Yun, à et en suite à partir d'une requête HTTP.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
&lt;br /&gt;
Pour atteindre notre objectif, dans un premier temps nous avons créé une méthode '''Blink''' , qui permet de faire clignoter la LED N°13 à partir du port série de la carte Arduino.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps ,nous avons configuré la carte en s'y connectant à partir d'un ordinateur en Wi-Fi pour pouvoir lui envoyer des requêtes HTTP. Nous avons ensuite utilisé un code ( fourni par Mr.Eric VERNEY ) ,  que nous avons modifié en important la méthode '''Blink''' utilisée précédemment accessible depuis l'adresse ''192.168.240.1/arduino/blink'' et permettant de faire clignoter la LED.&lt;br /&gt;
&lt;br /&gt;
===Objectif pour la séance prochaine===&lt;br /&gt;
&lt;br /&gt;
Prendre en main un télémètre à infrarouge , le brancher à la carte Arduino Yun , et effectuer des mesures de distance précises.&lt;br /&gt;
&lt;br /&gt;
==Jour 2==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
&lt;br /&gt;
Ce jour là nous avons eu le télémètre à mettre en place.&lt;br /&gt;
Chaque groupe a travaillé de son côté pour prendre en main le télémètre à infrarouge et effectuer la tâche souhaitée.&lt;br /&gt;
&lt;br /&gt;
Le but était d'arriver à mesurer une distance fiable et précise grâce au télémètre branché sur la Arduino Yùn.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
===== 1è partie =====&lt;br /&gt;
Chaque groupe a d'abord lu la datasheet du composant. Puis nous avons connecter la télémètre à la Arduino en programmant les ports au préalable.&lt;br /&gt;
&lt;br /&gt;
Une fois le télémètre en place, nous avons procédé de manière suivante:&lt;br /&gt;
* écriture d'un code pour récupérer les valeurs lues en mV par le télémètre&lt;br /&gt;
* lecture des valeurs et amélioration de la précision des mesures via un code qui fait une moyenne de 200 valeurs.&lt;br /&gt;
* conversion des valeurs lues des mV en cm via une équation de linéarisation de la courbe théorique de la datasheet&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===== 2è partie: Brain Storming =====&lt;br /&gt;
A la fin de la séance nous nous sommes réunis afin de discuter sur le cahier des charges,le travail à réaliser et sa répartition.&lt;br /&gt;
&lt;br /&gt;
Au cours de ce brain storming, plusieurs solutions étaient envisagées quand à la réalisation du projet:&lt;br /&gt;
* Les trois robot sont équipés de télémètres et chacun gère les obstacles qu'il a face à lui. Les deux robots qui suivent doivent juste garder la distance. Solution non retenue car demande un certains nombre de télémètre. &lt;br /&gt;
* Deux robots suiveurs reçoivent les ordres du premier qui transmet l'itinéraire mais non retenue car si la vitesse est différente entre les robots ça ne marchera pas.&lt;br /&gt;
* Le premier détecte et dit aux autres le parcours à suivre. Les deux autres suiveurs suivront le même parcours, ils auront cependant juste a veiller que la distance avec le robot de devant soit correct (sinon ils s’adapteront -&amp;gt; Accélérer/freiner). Cela nécessité de communiquer entre les robots. &lt;br /&gt;
&lt;br /&gt;
La dernière solution est la solution retenue.&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'il nous reste à faire ? ===&lt;br /&gt;
Le projet étant à son début, tout reste à faire!&lt;br /&gt;
&lt;br /&gt;
=====Objectifs à court terme =====&lt;br /&gt;
* Etablir la communication entre deux cartes via WiFi (un serveur / un client)&lt;br /&gt;
* Fixer le télémètre sur un robot et diriger le robot par rapport aux obstacles.&lt;br /&gt;
&lt;br /&gt;
==Jour 3==&lt;br /&gt;
===Qu'est-ce qu'on voulait faire ?===&lt;br /&gt;
Notre objectif de cette séance était d'avancer les deux grosses parties du projet en parallèle. Ce travail consistait à :&lt;br /&gt;
&lt;br /&gt;
* Mettre en place la communication Client/Serveur sur deux cartes Arduino.&lt;br /&gt;
* Réfléchir a un système et commencer sa réalisation pour l'installation des capteurs sur le robot de tête (robot qui va détecter les obstacles/robot serveur).&lt;br /&gt;
&lt;br /&gt;
===Qu'est-ce qu'on a fait ? ===&lt;br /&gt;
====Partie Communication====&lt;br /&gt;
Tout d'abord il a fallu nous connecter à nouveau aux cartes Arduino Yùn afin de pouvoir les configurer.&lt;br /&gt;
&lt;br /&gt;
Notre objectif étant de pouvoir ensuite travailler sur les cartes via un point d'accès commun, nous permettant de communiquer entre nos PC et nos cartes via notre réseau (et aussi tester la communication directement entre les cartes).&lt;br /&gt;
&lt;br /&gt;
Toutes les informations passeront par notre point d'accès. Notre carte est branchée à l'ordinateur uniquement pour alimenter la carte (elle ne reçoit plus de données en USB).&lt;br /&gt;
&lt;br /&gt;
Concernant la communication inter-cartes nous désirions simplement commencer par envoyer un message ''Hello World'' pour vérifier si l'échange de données se faisait de manière correcte. &lt;br /&gt;
&lt;br /&gt;
======Problèmes rencontrés======&lt;br /&gt;
Aucuns point d'accès disponible et visible depuis notre salle de travail ne correspondait a nos attentes. Soit le réseau en question nécessitait l'utilisation de proxys ou bien notre carte se connectait au réseau, mais lorsque l'on connectait notre ordinateur a celui-ci la carte se déconnectait au bout de quelques secondes.&lt;br /&gt;
&lt;br /&gt;
Pour notre message ''Hello World'' nous arrivions bel et bien à transmettre notre message cependant des séries de '-1' se glissaient au milieu de notre message.&lt;br /&gt;
La solution à ce problème a été trouvée au début du jour 4.&lt;br /&gt;
&lt;br /&gt;
======Solution mise en place======&lt;br /&gt;
Nous avons donc décidé d'utilisé un des routeurs fournis par l'école (modèle ''D-Link DWL 2100 AP'') et de le configurer nous même afin que nous puissions agir sur tout les paramètres de notre réseau (notamment configurer le DHCP, le Lease time...).&lt;br /&gt;
Après configuration de celui-ci nous avons finalement réussi à nous connecter a notre point d'accès (nos ordinateurs ainsi que nos cartes, ces dernières ce connectent maintenant par défaut à notre routeur).&lt;br /&gt;
&lt;br /&gt;
====== Présentation du support de suivi ======&lt;br /&gt;
Il nous a été présenté le support sur lequel nous devions faire le suivi journalier du projet, il s'agit donc de ce site.&lt;br /&gt;
====Partie Capteurs Robots====&lt;br /&gt;
Pour cette partie nous avons commencer par réfléchir a comment notre robot de tête (robot serveur) allait pouvoir détecter nos obstacles. Nous devons être sûrs que notre robot pourra détecter un obstacle sur toute sa largeur (c'est a dire même au niveau des roues). &lt;br /&gt;
&lt;br /&gt;
Ceci à permis de guider notre premier objectif de travail, qui a alors consisté a déterminer quel était expérimentalement le champ de vision de notre capteur (Est-il Large ou mince?).&lt;br /&gt;
Nous avons réalisé un programme rapide grâce auquel nous faisions tourner les roues du robot lorsqu'il détecte un objet a moins de 30cm (au delà de cette distance notre capteur n'est plus très fiable). &lt;br /&gt;
Notre conclusion est que le capteur détecte l'objet seulement si il se trouve dans l'axe (couloir d'environ 1cm) de l'émetteur de notre capteur (il y a un émetteur ainsi qu'un récepteur sur notre télémètre). &lt;br /&gt;
&lt;br /&gt;
Cette étape d'expérimentation nous a permis de nous poser la question suivante : ''De combien de capteurs allons nous avoir besoin?''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous sommes partis sur une base de trois capteurs pour pouvoir couvrir une largeur maximum de notre champ de course. La question suivante que nous avons du nous poser était de savoir comment allions nous les positionner sur notre robot pour pouvoir détecter les obstacles de la meilleur façon possible.&lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous les deux premières configuration auxquelles nous avons tout d'abord pensé :&lt;br /&gt;
[[Fichier:Image Robot2 Jour3.png|vignette|centre|1er choix de configuration étudié pendant le Jour3]]&lt;br /&gt;
[[Fichier:Image robot Jour3.png|vignette|centre|Choix de configuration adopté pendant le Jour3]]&lt;br /&gt;
&lt;br /&gt;
La première n'a pas été approfondie car trop imprécise. &lt;br /&gt;
La deuxième quand à elle est celle qui a été utilisée pour notre étude tout le reste de la journée. En effet, grâce à cette méthode nous pensons pouvoir détecter un objet sur toute la largeur du robot quelle que soit sa taille. &lt;br /&gt;
&lt;br /&gt;
Pour installer ces télémètres de manière stable sur notre robot nous avons utiliser des socles fournis par l'école nous permettant de visser les capteurs au robot de manière stable (voir photo ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Socle capteur robot.jpg|vignette|centre|Socle utilisé pour placer nos capteurs]]&lt;br /&gt;
&lt;br /&gt;
=====Problème rencontré=====&lt;br /&gt;
Nous avons constaté un problème lorsque le capteur n'a aucun objet placé devant lui (distance infinie). En effet nous lisons une valeur numérique en sortie du capteur identique à la valeur que l'on devrait recevoir lorsque notre objet se trouve a 10cm de distance environ. Ceci est problématique car il n'y a pas de différence au niveau du capteur entre un chemin libre d'accès ou un objet situé à 10cm.&lt;br /&gt;
&lt;br /&gt;
=====Solution apportée=====&lt;br /&gt;
Nous avons pensé à régler la distance seuil de notre programme (distance à partir de laquelle notre robot va avertir d'une collision et vouloir changer de direction) juste en dessous de la distance qui nous pose problème au niveau du capteur (10cm dans notre paragraphe précédent). Comme cela si notre objet est a 10cm ou qu'il n'y a pas d'objet notre robot avancera. Mais si l'objet est detecté a 9cm alors une manoeuvre sera effectuée.&lt;br /&gt;
Nous devons encore approfondir cette méthode de travail car nous ne sommes pas sûrs de sa fiabilité.&lt;br /&gt;
&lt;br /&gt;
===Objectifs pour la prochaine fois===&lt;br /&gt;
====Communication====&lt;br /&gt;
La communication entre les deux cartes est à poursuivre. En effet, on arrive à envoyer une donnée par le serveur et qu'elle soit récupéré par le client, mais il y a encore des problèmes. La donnée réceptionnée comporte plus de données que l'original (les -1).&lt;br /&gt;
&lt;br /&gt;
Il faudra donc régler ce problème afin que la communication entre les robots soit faite sans interférence ni perte de données.&lt;br /&gt;
&lt;br /&gt;
==== Robot et télémètre ====&lt;br /&gt;
Il nous faut approfondir notre méthode de détection d'obstacles car pour le moment certains problèmes sont encore présents et notre objectif final serait d'obtenir une détection fiable.&lt;br /&gt;
&lt;br /&gt;
Il nous faudrait vérifier les caractéristiques de nos trois télémètres et effectuer une série de test pour pouvoir utiliser les résultats obtenus afin d'arriver à une solution fiable de détection.&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
* Rédaction du wiki&lt;br /&gt;
* Suivi du wiki&lt;br /&gt;
&lt;br /&gt;
== Jour 4 ==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Comme dit dans le Paragraphe [[Robots connectés#Objectifs pour la prochaine fois|Jour 3: Objectifs pour la prochaine fois]] nous devons améliorer la partie robot en mettant au point un système le plus fiable possible. &lt;br /&gt;
Concernant la partie communication nous voulons pouvoir communiquer les informations que nous souhaitons entre les deux cartes en passant par notre routeur. Nous aimerions aussi déterminer une méthode de communication entre le maître et les esclaves. Nous mettre d'accords tous ensemble sur cette méthode et essayer de la fiabiliser pour échanger nos données de la façon la plus fiable possible.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
==== Partie communication entre les deux cartes ====&lt;br /&gt;
===== Travail réalisé=====&lt;br /&gt;
On arrive a récupérer le message ''hello world'' sur la deuxième carte et à l'afficher pleinement sans ''-1'', en modifiant le code de telle sorte à ce qu'il n'y ait envoi que sur demande du client.&lt;br /&gt;
Par la suite , nous avons allumé la LED 13 de la première carte , à partir de la deuxième carte . Nous avons mis en place un télémètre afin de détecter si l'obstacle est proche de celui-ci, et si c'est le cas , allumer la LED.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capteur_Objet_proche.jpeg|vignette|centre|La LED  s'allume quand la main est proche du capteur.]]&lt;br /&gt;
[[Fichier:Capteur_Objet_Loin.jpeg|vignette|centre|La LED  s'éteint quand il n'y a pas d'objet.]]&lt;br /&gt;
[[Fichier:Affichage.jpeg|vignette|centre|Affichage sur l'interface Arduino de l'état de la LED]]&lt;br /&gt;
&lt;br /&gt;
===== Pistes de travail =====&lt;br /&gt;
Deux stratégies d'approche sont possibles:&lt;br /&gt;
* Le robot principal (Maître: M) envoie ses données sur le serveur lorsqu’on le lui demande et les deux autres (esclaves :E1 &amp;amp; E2) lisent les données et adaptent leurs trajectoires en fonction de celles-ci. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 1.png|cadré|centré|1000px|Cas n°1: M envoie l'ordre sur le serveur WiFi lorsqu'il en reçoit la demande]]&lt;br /&gt;
&lt;br /&gt;
*Le robot maître donne aux robots esclaves l’ordre de faire le mouvement, ces derniers lui renvoient l'information qu'ils ont bien reçu l'ordre.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cas 2.png|cadré|centré|1000px|Cas n°2: M envoie ordre]]&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet , Nous avons choisi d'utiliser la deuxième stratégie, car celle-ci présente une étape en moins, ce qui est pratique, et elle évite une surcharge du serveur du robot maître.&lt;br /&gt;
&lt;br /&gt;
==== Partie robot ====&lt;br /&gt;
==== Tâches réalisées ====&lt;br /&gt;
* Tout d'abord nous avons testé et approuvé une nouvelle méthode de positionnement des capteurs sur le robot maître. En effet comme vu dans le paragraphe [[Robots connectés#Partie Capteurs Robots|concernant la disposition des capteurs sur le robot]], nous avions réfléchi et testé deux méthodes différentes cependant nous avons au début de cette 4ème journée réfléchi à une troisième méthode plus appropriée.&lt;br /&gt;
En effet, cette nouvelle méthode (voir schéma ci-dessous) nous permet de balayer toute la largeur de notre champ de course tout en restant très précis au niveau des capteurs (on a pas besoin de détecter les objets de très loin, donc on s’affranchit des problèmes de détection a de grandes distances).&lt;br /&gt;
[[Fichier:Image Robot Jour4.png|vignette|centre|Choix de configuration adopté pendant le Jour4]]&lt;br /&gt;
&lt;br /&gt;
* Changement de format de la valeur utilisée pour notre détection. Nous convertissions la valeur récupérée en sortie du capteur puis nous effectuions des calculs pour convertir cette donnée en cm. Cependant nous avons rencontré de nombreux problèmes à cause de cette conversion donc nous avons décidé de ne pas convertir la valeur en cm mais de la laisser telle qu'elle. Afin que celle-ci soit plus facilement utilisable.&lt;br /&gt;
&lt;br /&gt;
* Nous avons crée et utilisé un programme permettant à notre robot de tête de détecter les obstacles ainsi que de savoir de quel coté se trouve l'objet (plus à droite, à gauche, ou complètement devant). Grâce à cette information le robot peut ensuite effectuer la manœuvre nécessaire qui va lui permettre d'éviter l'obstacle (tourner droite/gauche , marche arrière). &lt;br /&gt;
Vous pouvez voir une démonstration de ceci dans la vidéo suivante prise à la fin du jour 3 de notre projet. &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=SP2iW9Ek4EU&amp;amp;feature=youtu.be}}&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Mettre en commun les deux parties sur lesquels nous avons travaillé.&lt;br /&gt;
Ceci consiste à faire avancer ou arrêter un robot et que celui ci communique cette information à une seconde carte Arduino Yùn. &lt;br /&gt;
&lt;br /&gt;
Dans un second temps nous aimerions avoir un second robot qui fonctionne (nous ne sommes pas sûrs à 100% que les autres robots soient opérationnels).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 5==&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
&lt;br /&gt;
*Faire avancer ou arrêter un robot tout en communiquant cette information à une deuxième carte Arduino. Celle-ci sera implanté sur un deuxième robot par la suite.&lt;br /&gt;
*Vérifier le bon fonctionnement d'un deuxième robot pour pouvoir l'utiliser par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Tests des nouveaux robots====&lt;br /&gt;
Plusieurs autres robots sont disponibles dans les placards de notre école. Trois sont relativement identiques (même forme, deux roues motrices à l'avant et une roue pour stabiliser à l'arrière). Seul la carte motrice gérant notamment l'asservissement des roues du robot diffère selon le robot, cependant ceci ne devrait pas nous poser de problème pour faire fonctionner les robots.&lt;br /&gt;
Un quatrième robot est mis à notre disposition, il est un petit peu différent de part sa conception cependant celui-ci est déjà monté et ne nécessite pas autant de travail que les autres robots.&lt;br /&gt;
Une partie de notre groupe a donc commencé les tests sur un des deux &amp;quot;nouveaux&amp;quot; robots. Une fois ce robot effectif, nous avons commencé les tests sur le deuxième robot.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Le programme que nous voulions tester était simple, nous voulions juste faire avancer et arrêter le robot afin de vérifier son bon fonctionnement.&lt;br /&gt;
A ce stade ci un problème s'est posé car les deux roues ne tournaient pas à la même allure. Ce qui empêchait alors notre robot d'avancer de manière rectiligne. Après avoir essayer de trouver la source du problème, nous avons enfin compris d'où pouvais venir le problème. &lt;br /&gt;
En effet lorsque le robot était alimenté avec la batterie portable, nous ne pouvions pas le faire avancer droit. Mais si nous l'alimentions à l'aide d'une alimentation fixe les roues tournaient enfin à la même vitesse (un très léger décalage minime entre les deux roues). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre un robot et une autre carte Arduino====&lt;br /&gt;
Dans cette partie l'objectif était le suivant. Nous voulions réussir à faire avancer notre robot et pouvoir communiquer en Wi-fi l'état actuel du robot à une autre carte. C'est à dire que lorsque que l'on avance on envoi une requête HTML à notre carte serveur et celle-ci par exemple pourrait exécuter une action telle qu'allumer une de ses Leds pour vérifier la bonne transmission de l'information.&lt;br /&gt;
&lt;br /&gt;
Comme nous l'avions déjà fait à la séance précédente nous avons pu communiquer des informations entre la carte du robot et l'autre carte Arduino.&lt;br /&gt;
Ensuite l'étape suivante était d'envoyer depuis la deuxième carte (celle qui n'est pas implémentée sur un robot) un ordre d'avancer via Wi-fi à notre robot. &lt;br /&gt;
Cette étape ci a été fonctionnelle pendant la première moitié de notre journée de travail cependant un problème de taille allait se poser par la suite.&lt;br /&gt;
&lt;br /&gt;
=====Problèmes rencontrés=====&lt;br /&gt;
Lorsque nous avons voulu effectuer l'étape de la communication dans l'autre sens un problème est survenu. &lt;br /&gt;
Il nous était alors impossible de faire avancer notre robot ET ensuite de communiquer via Wi-fi l'état de notre robot. Ces deux étapes qui marchaient parfaitement séparément ne pouvaient pas être combinées.&lt;br /&gt;
&lt;br /&gt;
Après de nombreux essais et recherches sur des forums nous avons pu identifier la source du problème. En effet la communication Wi-fi (utilisant un bridge reliant le microcontrôleur et le microprocesseur) doit utiliser une ressource qui est la même que celle utilisée par la liaison Serial reliant la carte Arduino à la carte motrice de notre robot. C'est à dire que l'action d'avancer, et celle d'envoyer des données nécessitent toutes deux l'accès à une ressource qui ne peut pas être partagée.&lt;br /&gt;
Nous avons alors pensé à allouer du temps pour que chaque partie du programme puisse utiliser la ressource mais nous ne savions pas comment forcer le bridge à perdre l'utilisation de la ressource en question.&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé essayer de contourner ce problème en utilisant un câble différent pour faire passer les ordres entre la carte Arduino et la carte motrice de notre robot. Nous voulions utiliser un câble micro-usb - RS232 (5V). Cependant aucun câble de ce type n'était présent dans l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
Nous aimerions régler ce problème de transmission entre la carte motrice et notre carte Arduino pour pouvoir ensuite effectuer nos tests entre notre robot et notre carte, puis entre nos différents robots vu que ceux-ci semblent opérationnels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 6==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif principal est de trouver une solution au problème de communication entre les cartes ALORS QUE notre carte Arduino communique déjà avec notre carte motrice via une liaison TX/RX.&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Comment résoudre notre problème?====&lt;br /&gt;
Le problème de câble ne semble pas réalisable dans l'immédiat à cause d'un problème de matériel.&lt;br /&gt;
Cependant après une discussion avec deux spécialistes Mr Bru et Mr Minot plusieurs solutions possibles ont été évoquées (qui ne nécessite pas de câble particulier). L'une d'entre elle, sur laquelle nous avons concentré nos efforts consiste à déplacer (au niveau logiciel) les pins sur lesquels la communication TX/RX s'effectue (pour nous permettre de libérer le bridge). &lt;br /&gt;
Voici le bout de code qui nous permet d'affecter notre TX/RX aux pins que nous voulons (il suffit d'ajouter ces deux lignes de code):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySerial(10, 11); // Le premier paramètre correspond a la pin du TX, le deuxième au RX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après utilisation et test de cette méthode nous avons effectivement pu à la fois avancer et envoyer l'état de notre robot sur l'autre carte arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Communication entre deux robots====&lt;br /&gt;
Maintenant que nous pouvons communiquer entre un robot et une carte, nous aimerions communiquer entre deux robots. C'est à dire de pouvoir faire avancer un robot, qu'il envoit son état à l'autre robot (&amp;quot;j'avance&amp;quot;), et que l'autre robot avance à son tour.&lt;br /&gt;
&lt;br /&gt;
Voici une vidéo présentant cette étape de développement de notre projet. Nous voyons bien notre robot suiveur s'arrêter juste après que notre robot maître se stoppe (un petit temps de latence du à la transmission et au traitement est visible sur la vidéo). &lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3PAAA735Ra8}}&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons remarqué un problème matériel relativement important. Nos robots ne roulaient pas droit alors que nous ne leur disions pas de tourner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Réparation des roues du robot====&lt;br /&gt;
Nous devions nous pencher sur ce problème de robots. Les roues arrières de nos deux robots semblaient être la source de ce problème. Après un changement de roues et un graissage de ces dernières les résultats obtenues furent bien meilleurs. Cependant la trajectoire de notre robot n'est pas totalement rectiligne ce qui ne nous permettrait pas de maitriser parfaitement notre trajectoire.&lt;br /&gt;
Ceci est du au fait que les moteurs des roues ne tournent pas à la même vitesse.&lt;br /&gt;
&lt;br /&gt;
Nous avons essayé de régler ceci en programmant deux vitesses différentes pour les deux roues de notre robot. Cette méthode fonctionne mais nous ne pensons pas qu'elle soit très viable pour la suite de notre projet.&lt;br /&gt;
&lt;br /&gt;
====Communication : Contenu des données à envoyer ====&lt;br /&gt;
Après avoir réussi à faire communiquer nos deux robots une question très délicate s'est posée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on veut :&amp;lt;/u&amp;gt;&lt;br /&gt;
*Le maître '''détecte''' les obstacles, les '''évite''' et '''transmet''' les informations (ou ordres).&lt;br /&gt;
*L'esclave '''reçoit''', '''traite''' et '''exécute''' l'instruction envoyée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Ce que l'on sait :&amp;lt;/u&amp;gt;&lt;br /&gt;
*légère latence entre le moment ou l'on exécute une action sur le premier robot et celui ou elle sera exécutée sur le deuxième robot.&lt;br /&gt;
*Vitesse des robots constante (peut être différente entre les deux robot mais reste la même pour un robot durant l'exécution du programme).&lt;br /&gt;
&lt;br /&gt;
Quel est le contenu (et non la forme) des informations à envoyer?&lt;br /&gt;
Liste des actions que notre robot effectuera :&lt;br /&gt;
*Avancer/reculer.&lt;br /&gt;
*droite/gauche.&lt;br /&gt;
*Stop.&lt;br /&gt;
&lt;br /&gt;
Après avoir réfléchi à plusieurs méthodes différentes nous avons envisagé une possibilité qui pourrait fonctionner.&lt;br /&gt;
Nous aimerions en fait envoyer les informations à l'esclave en décalé. C'est à dire qu'on attendrai un certains temps avant que le maître dise à l'esclave de tourner par exemple. &lt;br /&gt;
Comme ceci nous pourrions avoir l'esclave qui suit parfaitement le robot maître (il tournerai au même moment). Seul le moment ou le robot maître s’arrêtera définitivement pourrait être problématique car nous ne voudrions pas que l'esclave percute le robot maître. Cependant si nous connaissons le moment ou nous allons stopper notre application nous pouvons faire en sorte que l'esclave s’arrête a la bonne distance du maitre.&lt;br /&gt;
&lt;br /&gt;
Une autre méthode a été étudiée pendant cette séance. En effet jusqu'à présent nous utilisons la méthode ''MOGO'' pour faire tourner les roues du robot. Mais il se trouve qu'il existe une méthode ''DIGO'' qui elle fait la même chose mais à laquelle nous pouvons dire roule sur telle ou telle distance. Donc nous pouvons fixer la distance sur laquelle nous voulons rouler (et non pas influer sur le temps pendant lequel nous voulons rouler). Ceci peut être un avantage et nous avons essayé de voir s'il était possible de récupérer la distance sur laquelle le robot a roulé (nous ne fixerions aucune distance mais nous aimerions la connaître).&lt;br /&gt;
&lt;br /&gt;
Au final nous avons réussi à récupérer le nombre de ''Tics'' de chacun des moteurs du robot, c'est à dire que si nous connaissons le nombre de ''Tics'' par tour nous pouvons ensuite (en récupérant le nombre de ''Tics'' compté pendant le trajet d'un robot) en déduire la distance qu'il a parcouru.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs à réaliser pour la prochaine fois ===&lt;br /&gt;
&lt;br /&gt;
Examiner la commande ''vel'', qui permet de récupérer la vitesse de rotation d'un moteur, ceci pourrait permettre de contrôler la linéarité de la trajectoire en corrigeant le paramètre de commande en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Jour 7==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
N'ayant pas eu cours depuis une semaine nous avons effectué un point collectif concernant l'avancement de notre projet. Pendant celui-ci nous avons expliqué ou nous en sommes dans la confection de nos robots ainsi que quels étaient nos objectifs pour cette séance. Notamment le fait de vouloir calculer la distance parcouru par le robot en récupérant le nombre de tours que le moteur a effectuer pendant un certain temps. Nous avons évoqué à nouveau le problème que nous avons avec nos robots. Seul notre robot de tête est capable, pour le moment, d'effectuer une marche avant rectiligne. &lt;br /&gt;
Nous avons donc pris la décision d'utiliser le robot chenille (ne possédant pas de roues mais des chenilles) qui lui avance de façon quasi-rectiligne (nous devons juste baisser un peu la puissance au niveau d'un moteur). Le troisième robot étant démonté nous avions comme objectif de l'assembler en choisissant au les deux moteurs ayant les performances les plus semblables possibles (deux parmi quatre disponible).&lt;br /&gt;
Une équipe allait donc essayer de travailler sur le fait de contrôler la distance parcouru par le robot. Une autre allait monter le troisième robot, une dernière allait essayer de faire avancer le robot chenille tout droit de manière continue.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
====Construction du robot====&lt;br /&gt;
Nous avons récupéré les 4 moteurs restants et n'étant pas utilisés par nos autres robots afin d'effectuer des tests sur ceux-ci.&lt;br /&gt;
Nous les avons alimenté un à un afin de vérifier si certains moteurs étaient différents des autres (c'est à dire qu'ils ne tournent pas tous à la même vitesse).&lt;br /&gt;
Ensuite nous avons ajouter ces moteurs sur notre robot, effectuer les branchements et vérifier que chacun des éléments était placé correctement.&lt;br /&gt;
Cependant, nous n'arrivions pas à obtenir une trajectoire droite sur ce robot aussi. C'est pourquoi nous avons aussi utilisé pour ce robot la méthode de calibrage des roues utilisé par un autre de nos groupes de travail (et décrite ci-dessous).&lt;br /&gt;
&lt;br /&gt;
====Calibrage de la trajectoire====&lt;br /&gt;
Pendant cette séance nous avons notamment réglé le problème de trajectoire de nos robots. Notre méthode consiste a ajuster à certains instants la vitesse d'une des deux roues du robot pour obtenir une trajectoire quasi-rectiligne sur de longue distance. Ce système nous permet de pouvoir continuer les tests sur nos robots sans avoir à remettre ceux-ci dans l'axe toutes les 2 secondes.&lt;br /&gt;
Voici le résultat obtenu avec deux robots qui se suivent.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/b0SYjSqEpYo}}&lt;br /&gt;
&lt;br /&gt;
====Récupération de la distance parcourue par les roues====&lt;br /&gt;
Nous avons aussi notamment étudié le fait que nous pouvons à l'aide de la commande ''vel'' récupérer le nombre de ''tics'' effectué par le robot pendant un certain temps. &lt;br /&gt;
Nous aimerions pouvoir travailler avec ces données pour transmettre de façon précise la distance parcourue par un robot avant de commencer une manœuvre par exemple.&lt;br /&gt;
Ceci à pu être mis en place mais un problème subsiste quand au fait que pour l'instant nous n'arrivons pas à contrôler avec précision cette commande ''vel''. Ceci sera peut être un problème à résoudre plus tard cependant nous avons soulevé d'autres problèmes que nous avons du étudier pendant la séance.&lt;br /&gt;
&lt;br /&gt;
====Point d'avancement==== &lt;br /&gt;
Une fois le test avec deux robots effectué, nous avons une nouvelle fois fait un point collectif quand aux tâches à réaliser dorénavant. &lt;br /&gt;
Nous avons évoqué certaines tâches ou idées à réaliser durant cette réunion.&lt;br /&gt;
*Liaison Wi-Fi : &lt;br /&gt;
Deux problèmes se posent: comment diminuer la latence entre chaque robot? Installe-t-on un ordinateur intermédiaire pour diminuer cette latence?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Faire tourner les robots de manière identique :&lt;br /&gt;
On peut même imaginer créer une chorégraphie à exécuter lorsque les robots tournent. Comme par exemple que le premier robot détecte un obstacles, effectue une figure en synchronisation totale avec l'autre robot (ceci est une idée évoquée par Monsieur BRU qui nous a expliqué que des alternatives à notre projet pourraient être trouvé, il faudrait juste qu'elles soient intéressantes d'un point de vue pédagogique. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Récupérer la distance parcourue par les robots :&lt;br /&gt;
Nous aimerions pouvoir contrôler la distance parcourue par nos robots et pouvoir les communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tester le même programme avec nos trois robots : &lt;br /&gt;
Le problème rencontré lorsque l'on essaye ce même programme en essayant avec un robot &amp;quot;détecteur&amp;quot; et deux robots &amp;quot;suiveurs&amp;quot; est que la communication ne s'effectue pas assez bien entre les 3 robots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Explication :&amp;lt;/u&amp;gt; &lt;br /&gt;
La manière dont notre robot fonctionne (pour le moment) peut être expliqué (en pseudo code) de la manière suivante : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Tant que(1)&lt;br /&gt;
     lire Valeur Capteur();&lt;br /&gt;
     Si(obstacle Detecté())&lt;br /&gt;
     alors&lt;br /&gt;
          arreter();&lt;br /&gt;
          dire au robot1(arreter);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(arreter);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
     Si(pas d'obstacle détecté)&lt;br /&gt;
     alors&lt;br /&gt;
          avancer();&lt;br /&gt;
          dire au robot1(avancer);   {Ici le problème est que on attend d'avoir la confirmation du robot 1 qu'il a bel et bien reçu le message avant de continuer la boucle}&lt;br /&gt;
          dire au robot2(avancer);   {On attend a nouveau la confirmation de la réception}&lt;br /&gt;
     fin si&lt;br /&gt;
Fin Tant que&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le problème est que il existe, comme nous l'avions expliqué lors d'une précédente séance un [[Robots connectés#Communication entre deux robots|temps de latence pour la communication Wi-fi]] entre deux robots. Ce qui veut dire que dans notre cas SI les trois robots sont arrêtés et que le premier ne détectant pas d'obstacle, avance et dis aux deux autres d'en faire de même, ALORS le temps que le robot va mettre à passer les ordres au robot  sera du temps pendant lequel il ne contrôlera pas la valeur du capteur pour savoir si un obstacle est présent devant ou pas.&lt;br /&gt;
Ceci à entrainé lors de notre essai un nombre de collision trop important de notre robot de tête. &amp;lt;br&amp;gt;&lt;br /&gt;
De plus, un de nos robot suiveur était à nouveau incapable d'aller tout droit. Ceci est un nouveau problème sur lequel il va falloir nous pencher.&lt;br /&gt;
&lt;br /&gt;
=== Réunion de fin de séance ===&lt;br /&gt;
En fin de séance un nouveau point d'avancement a été effectuer par l'ensemble de notre groupe afin de faire un point sur notre méthode de communication entre nos robots.&lt;br /&gt;
Jusqu’à présent (voir [[Robots connectés#Pistes de travail|Le schéma concernant notre méthode de communication du Jour 4]]) notre méthode de communication était fonctionnelle mais disposait de certains défauts notamment au niveau temps de communication. Comme expliqué dans le paragraphe précédent, notre méthode n'est pas réalisable avec 3 robots. C'est pourquoi nous désirerions changer de méthode pour en trouver une plus en adéquation avec nos attentes.&lt;br /&gt;
&lt;br /&gt;
Voici la représentation d'une méthode qui pourrait peut être mieux fonctionner à laquelle nous avons pensé en fin de séance. Nous laissons une donnée présente sur le robot maître et c'est aux esclaves de récupérer l'information sur les deux robots esclaves. &lt;br /&gt;
[[Fichier:J7.PNG|centré]]&lt;br /&gt;
Nous avons également évoqué l'idée d'utiliser la partie LINUX de notre carte Arduino Yùn.&amp;lt;br&amp;gt;&lt;br /&gt;
En effet cette carte possède deux processeurs distincts. L'utilisation des deux processeurs de la carte (le premier ''Arduino - ATmega32u4', et le deuxième ''Linux - Atheros AR9331'') pourrait nous permettre d'augmenter la vitesse de calcul de notre programme mais aussi de pouvoir effectuer plusieurs actions en même temps, ce qui supprimerait ainsi le problème évoqué précédemment.  &lt;br /&gt;
&lt;br /&gt;
Voici un tableau récapitulatif des principales caractéristiques des deux processeurs :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture.jpg|centre|Comparatif des deux processeurs]]&lt;br /&gt;
Lors de la prochaine séance nous aimerions pouvoir réussir a perfectionner notre méthode de communication entre robot pour qu'elle soit quasiment instantanée.&lt;br /&gt;
&lt;br /&gt;
==Jour 8==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette nouvelle matinée de travail était de régler les deux problèmes principaux évoqués la veille. A savoir le problème concernant la communication entre les robots (nous aimerions utiliser la partie LINUX de la carte si possible pour plus de performances). Il faut aussi régler le problème de direction des robots en utilisant les ''Tics'' des roues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce que l'on a fait===&lt;br /&gt;
Durant cette séance plusieurs problèmes se sont posé au niveau de la partie LINUX de notre projet, nous n'arrivions plus à faire les mises à jour de la carte Arduino pour installer certaines mises à jour dessus. Nous n'avons pas pu mettre en œuvre la communication inter-cartes via LINUX. &lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le réglage des roues (vérifier qu'elles aient bien de le même nombre de tours en mémoire à chaque instants) nous réussissions à récupérer le nombre de ''Tics'' effectués par la carte dans la console mais pas dans une variable que l'on pourrait exploiter par la suite.&lt;br /&gt;
&lt;br /&gt;
Il nous a fallu effectuer plusieurs recherches pour pouvoir mettre à jour le processeur LINUX sur les cartes et nous avons pu mettre en place la connexion entre les parties LINUX des cartes. On écrit dans un fichier texte des instructions et le client se connecte à l'autre carte Arduino pour pouvoir récupérer ce fichier texte ainsi que les données présentes à l'intérieur.&lt;br /&gt;
&lt;br /&gt;
=== Objectifs pour la prochaine séance ===&lt;br /&gt;
Nous devons aujourd'hui réaliser le code Arduino nous permettant, grâce à la partie Arduino, de lire un fichier texte sur un robot client (sur la partie LINUX du robot client à priori).&lt;br /&gt;
Nous devons aussi finaliser la liaison Wi-fi entre les parties LINUX du robot.&lt;br /&gt;
&lt;br /&gt;
Un de notre objectif serait de synchroniser nos robots et de leur faire réaliser les mêmes actions au même moment.&lt;br /&gt;
&lt;br /&gt;
En parallèle nous voulons réussir à maîtriser la gestion des moteurs des robots pour pouvoir contrôler le nombre de tours fait par celui-ci. Ceci nous permettrait, comme dit précédemment de faire avancer nos robots de manière rectiligne en vérifiant régulièrement si ils ont effectué le même nombre de ''Tics'' moteur pendant un intervalle de temps donné.`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Jour 9==&lt;br /&gt;
=== Qu'est ce qu'on voulait faire ? ===&lt;br /&gt;
Notre objectif de cette séance était de fiabiliser la liaison entre les deux cartes en passant par les processeurs LINUX plutôt que de tout faire grâce à la carte Arduino. Ceci nous permettrait de rendre notre programme beaucoup plus réactif aux changements d'états.&lt;br /&gt;
&lt;br /&gt;
D'un autre coté nous voulons pouvoir lire et écrire dans un fichier texte a partir du processeur Arduino. &lt;br /&gt;
Nous voulons aussi maîtriser les ''Tics'' des roues de notre robot pour nous permettre de les faire avancer droits.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'on a fait? ===&lt;br /&gt;
En ce qui concerne la partie lecture/écriture dans un fichier nous arrivons à le faire parfaitement à partir du processeur LINUX mais pas Arduino, seul l'écriture a été effectuée pour le moment.&lt;br /&gt;
&lt;br /&gt;
Côté Linux nous avons réussi à faire qu'un programme client écrit en python se connecte à un programme server et lise un fichier .txt en passant par une Socket connectant les deux programmes. Si l'on coupe notre programme serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ce qu'il nous reste à faire === &lt;br /&gt;
Nous arrivons bientôt au terme de notre projet robotique. Il nous reste seulement une séance avant la soutenance finale. Notre unique objectif maintenant est de pouvoir montrer quelque chose de concret lors de cette présentation.&lt;br /&gt;
&lt;br /&gt;
Quel que soit notre objectif (Faire &amp;quot;danser&amp;quot; les robots =&amp;gt; Les robots effectuent les mêmes mouvements en même temps OU faire se suivre les robots =&amp;gt; Les robots suivent tous le même parcours) nous devons pouvoir transmettre les données de manière instantanée grâce au microprocesseur Linux. &lt;br /&gt;
Si nous arrivons à faire ceci entre notre séance du jour 9 et 10 nous pourrons probablement montrer quelque chose de concret lors de notre soutenance.&lt;br /&gt;
&lt;br /&gt;
==Jour 9 Bis== &lt;br /&gt;
Certaines tâches ont pu être réaliser entre les deux séances ce qui nous permet de pouvoir maintenant effectuer une communication immédiate entre les deux cartes.&lt;br /&gt;
Nous pouvons maintenant communiquer de manière quasi instantanée (quasi-invisible à l’œil nu).&lt;br /&gt;
&lt;br /&gt;
===Principe de la communication===&lt;br /&gt;
&lt;br /&gt;
* Une communication Wi-fi est établie entre les deux microcontrôleurs Linux de nos cartes.  &lt;br /&gt;
* La partie Arduino de notre robot maître écrit dans un fichier texte enregistré sur notre carte.&lt;br /&gt;
* En continue, le robot maître va envoyer au robot esclave ce qui est écrit dans son fichier texte (ce qu'il fait comme mouvement).&lt;br /&gt;
* Le robot esclave écoute en permanence ce qu'il se passe sur son adresse IP. &lt;br /&gt;
* Si la donnée reçue est différente de la précédente (si l'ordre a changé) Alors...&lt;br /&gt;
* La partie Linux du robot esclave écrit la donnée dans un fichier texte.&lt;br /&gt;
* La partie Arduino du robot esclave lit la donnée et effectue l'action correspondante.&lt;br /&gt;
&lt;br /&gt;
Ceci se déroule en continu et de manière si rapide que nous pouvons transmettre nos informations de manière quasi instantanée.&lt;br /&gt;
&lt;br /&gt;
===Problème de Socket===&lt;br /&gt;
Voici un problème que nous avons rencontré au niveau des [http://fr.wikipedia.org/wiki/Socket Sockets] mais que nous aovns réussi à résoudre.&lt;br /&gt;
Lorsque l'on établie une communication entre deux cartes Arduino on va alors créer un socket qui va nous permettre de communiquer nos informations entre nos deux cartes.&lt;br /&gt;
&lt;br /&gt;
Deux modes étaient alors possibles (cf Wikipédia : [http://fr.wikipedia.org/wiki/Socket Sockets]) :&lt;br /&gt;
&lt;br /&gt;
* Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.&lt;br /&gt;
&lt;br /&gt;
* Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP. Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.&lt;br /&gt;
&lt;br /&gt;
En résumé, au vue des résultats obtenus ainsi que le de la vitesse d'exécution des protocoles (UDP plus rapide et tout aussi adapté vu que nous n'avons pas forcément besoin d'effectuer une vérification des données vu qu'on les envoient en boucle) nous avons choisi de travailler à l'aide du protocole UDP, plus rapide et plus adapté car il nous permettait d'envoyer en boucle les données alors qu'avec TCP après un envoi nous ne pouvions plus rien envoyer.&lt;br /&gt;
&lt;br /&gt;
==Jour 10== &lt;br /&gt;
Nous voilà enfin à notre dernière séance. Nous avons eu besoin de faire un point en début de séance pour nous répartir les différentes tâches de la matinée, entre rédaction du wiki, finalisation des codes robots ainsi que préparation de notre soutenance finale.&lt;br /&gt;
&lt;br /&gt;
Voici la vidéo présentant la rapidité de communication entre nos robots après utilisation du mode de communication via les parties Linux de nos cartes.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://youtu.be/CSUF_Gf1M_U}}&lt;br /&gt;
&lt;br /&gt;
Nous constatons bien que la communication et la synchronisation des mouvements de nos deux robots est immédiate. Seul un problème se pose à cette étape du projet, c'est que les robots ne tournent pas de la même manière. On peut voir sur la vidéo que même si les mouvements sont synchronisés. Un robot tourne néanmoins plus vite que l'autre. &amp;lt;br&amp;gt;&lt;br /&gt;
Ce problème a été résolu lorsque nous nous rendons compte que les batteries n'étaient pas capables de délivrer la même puissance. Lorsque nous avons interverti les batteries sur nos robots, ce problème s'est quelque peu dissipé. Dans l'idéal nous aimerions avoir deux batteries assez puissante pour alimenter les capteurs et les moteurs des deux robots de manière identique (manque de puissance ==&amp;gt; les moteurs tournent moins vite).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Suite à cela, nous avons modifier notre code Arduino pour nous permettre d'effectuer certaines actions &amp;quot;spéciales&amp;quot; telles que faire un tour complet, un zig-zag etc... &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons aussi voulu essayer de nous permettre de commander les mouvements du robot maître à l'aide d'un serveur Web. &amp;lt;br&amp;gt;&lt;br /&gt;
Le principe de cette idée serait de pouvoir contrôler le robot maître à l'aide du clavier de notre ordinateur. Dans ce cas les capteurs seraient inutiles et nous pourrions, à l'aide des 4 flèches directionnelles, piloter notre robot maître, qui communiquerait toujours avec notre robot esclave. Ainsi nous pourrions piloter les deux robots à l'aide de notre clavier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Instructable=&lt;br /&gt;
&lt;br /&gt;
[[Instructable Robot]]&lt;/div&gt;</summary>
		<author><name>Axel lebreton</name></author>
		
	</entry>
</feed>