﻿<?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=Zhao.zixiao</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=Zhao.zixiao"/>
	<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Sp%C3%A9cial:Contributions/Zhao.zixiao"/>
	<updated>2026-04-06T15:33:01Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_danseurs_technique&amp;diff=10372</id>
		<title>Robots danseurs technique</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_danseurs_technique&amp;diff=10372"/>
		<updated>2019-05-20T16:08:48Z</updated>

		<summary type="html">&lt;p&gt;Zhao.zixiao : /* Communication Wi-Fi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Baguette magique =&lt;br /&gt;
&lt;br /&gt;
== Schéma de câblage == &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_câblage.jpg|800px|Schéma de câblage de la baguette]]&lt;br /&gt;
&lt;br /&gt;
== Programmes/Résultats ==&lt;br /&gt;
&lt;br /&gt;
=== Test du gyromètre ===&lt;br /&gt;
&lt;br /&gt;
Le programme suivant nous a servi à tester le gyromètre, il renvoie des valeurs en fonctions de la direction dans laquelle le gyromètre est déplacé.&lt;br /&gt;
&lt;br /&gt;
[[Média:Test_pololu.zip|Télécharger le programme]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Association des directions ===&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, nous avons associé des directions en fonction du mouvement détecté par le gyromètre.&lt;br /&gt;
&lt;br /&gt;
Ce programme est utilisé pour tester toute la partie purement fonctionnelle du code, il recouvre toute la partie d’acquisition des données gyroscopiques, de prise de décision et de communication BLE.&lt;br /&gt;
&lt;br /&gt;
[[Média:Test_actions_BLE.zip|Programme final hors gestion LED]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons tenté de mettre en place des chorégraphies exécutées par les robots, une fois lancé les robots exécuteraient un jeu de mouvement et de son et lumière définis à l'avance.&lt;br /&gt;
&lt;br /&gt;
Pour lancer la chorégraphies nous avons choisie de ne pas ajouter de composants supplémentaire à la baguette. Pour différencier le lancement de chorégraphies d'un ordre lambda nous allons donc utiliser les mouvements hors appui du bouton.&lt;br /&gt;
Nous allons mettre en mémoire les derniers mouvement hors appui du bouton et lors de l'appui suivant, le programme ira vérifier cette mémoire et si les derniers mouvements corresponde à une séquence et que le temps d'appui du bouton est inférieur à un seuil donné (probablement une seconde) une séquence sera lancé. Pour que se système fonctionne correctement la baguette passera la première seconde d'appui à ne rien faire en dehors de vérifier que le bouton reste enfoncé.&lt;br /&gt;
&lt;br /&gt;
Cela implique un lag d'une seconde lors de l'appui du bouton pour lancer les ordres normaux mais cette solution semble être la plus simple à mettre en oeuvre tout en restant élégante et en conservant l'aspect &amp;quot;magique&amp;quot; de la baguette.&lt;br /&gt;
&lt;br /&gt;
=== Contrôle direct ===&lt;br /&gt;
&lt;br /&gt;
On voit ici les données brut renvoyé par le capteur Pololu, soit des valeur d'accélération dans les trois directions de l'espace. Ces valeurs n'étant pas facilement lisible par un humain nous avons implanté une fonction traduisant les informations brut en français.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Résultat_1.png|center]]&lt;br /&gt;
&lt;br /&gt;
Nous avons maintenant ici les résultats du capteur une fois traité, elles nous permettent de savoirs dans quel sens est dirigé la baguette de manière lisible plus facilement par un humain.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Résultat_2.png|center]]&lt;br /&gt;
&lt;br /&gt;
Nous utilisons l’application mobile [https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner&amp;amp;hl=fr BLE scanner] afin de récupérer les communication Bluetooth émises par la carte. Cela nous à permit de tester la communication de la baguette indépendamment de celle du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BLEscan2.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
== Bande de LED ==&lt;br /&gt;
&lt;br /&gt;
Nous avions un souci avec la bande de LED, en effet certaines LED s'allume sans recevoir d'instructions comme le montre la photo ci-dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:LEDraté2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc tenté d'isoler le problème en cherchant à changer les couleurs/intensité/instruction et même le model de carte pour pouvoir identifier la source du problème.&lt;br /&gt;
&lt;br /&gt;
Au final il semblerait que le problème vienne du programme. Nous avons donc cherché directement dans la librairie fournie avec la bande de LED afin d'identifier et de régler ce problème. N'étant toujours pas résolu à ce jour, nous pouvons tout de même utiliser le ruban. Les effets de monter et descente de l'allumage des led restent appréciable malgré que certaines led ont une couleur différente.&lt;br /&gt;
&lt;br /&gt;
Un autre souci à été son alimentation, en effet non seulement elle peut être très consommatrice d'énergie mais en plus elle n'est pas alimentée en 3.3V. Ce qui implique l'ajout supplémentaire d'une batterie dans la baguette et donc une perte de place.&lt;br /&gt;
&lt;br /&gt;
== Conception 3D ==&lt;br /&gt;
&lt;br /&gt;
La conception 3D de la baguette à été faite sous Solid Works. Elle a ensuite été imprimé en 3D.&lt;br /&gt;
&lt;br /&gt;
Initialement elle devait s'ouvrir aux deux extrémités (à la manière d'un manche de corde à sauter) afin de pouvoir accéder aux différentes cartes et batteries à l'intérieur. De plus nous souhaitions qu'elle s'amincisse à son extrémité.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguettemag.jpg|thumb|center|Vue en coupe de la première version de la baguette modélisé sous Solid]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Cependant c'est l'ouverture par la tranche à la façon d'un moule (la baguette est coupée sur toute la longueur et maintenue en place par des vis) qui a été retenue, en effet cela garantie une plus grande résilience en une praticité accrue, au détriment cependant de l'aspect esthétique. De plus l'affinage à été abandonné car la place était top faible au vu du nombre de composant nécessaire et de leurs tailles.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rendu_Baguette_Magique.JPG|thumb|center|Rendu SolidWorks de la version finale de la baguette]]&lt;br /&gt;
&lt;br /&gt;
= Robot-maître =&lt;br /&gt;
&lt;br /&gt;
== Schéma de câblage ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Interface_moteur_4_roues.png|1000px|thumb|center|Schéma de câblage simplifié de l'interface de puissance du robot-maître (complètement équivalent à celui des robot-esclaves)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diviseur.png|thumb|center|Pont diviseur]]&lt;br /&gt;
Afin de pouvoir alimenter l'ensemble des cartes et moteur avec une seul batteries nous avons utilisé un pont diviseur de tension pré-fait pour nous assurer de la stabilité de la tension d'alimentation.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
Le programme du robot-maître se sépare en deux grandes parties:&lt;br /&gt;
*le pilotage du robot (assuré par la carte [https://www.pjrc.com/teensy/ Arduino Teensy])&lt;br /&gt;
*la communication avec la baguette et les robot-esclaves (assuré par la carte [https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide/all Sparkfun esp32])&lt;br /&gt;
&lt;br /&gt;
=== Pilotage ===&lt;br /&gt;
&lt;br /&gt;
Les moteurs sont pilotés via un asservissent et des interruptions par la carte Arduino Teensy.&lt;br /&gt;
&lt;br /&gt;
Dès que l'une des roues codeuses atteint une nouvelle position elle génère une interruption afin d'optimiser la réactivité de notre asservissement en limitant les consommations électriques de la carte.&lt;br /&gt;
&lt;br /&gt;
Après une période d'environ deux minutes les moteurs s’arrêtent de fonctionner car ils deviennent trop chaud. Nous avons changer les radiateurs pour en installer de plus gros afin de pallier le problème.&lt;br /&gt;
&lt;br /&gt;
=== Communication Bluetooth ===&lt;br /&gt;
&lt;br /&gt;
On voit ici une tentative de connexion entre la baguette et le robot, la connexion ne fonctionnait pas vraiment car le robot ce connectait et ce déconnectait en permanence &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Connection_raté.png|center]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc modifié le code du robot pour régler ce problème.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Connexion_réussi.png|center]]&lt;br /&gt;
&lt;br /&gt;
=== Communication Wi-Fi ===&lt;br /&gt;
[[Fichier:Server_wifi.png|vignette|Alternance des connections au serveur]]&lt;br /&gt;
[[Média:Wifiserver 2clients.zip|code serveur wifi]]&lt;br /&gt;
&lt;br /&gt;
Les communications Wi-Fi et Bluetooth sont gérées par la carte Sparkfun esp32.&lt;br /&gt;
&lt;br /&gt;
Nous avons dans un premier temps eu des problèmes pour établir une communication stable entre le serveur et le client. En effet le client pouvait se connecter mais il ne parvenait pas obtenir d'information de la part du serveur. Une fois réglé ce problème il à été simple de connecter un second client au serveur.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant les deux clients ne sont pas connecté au même moment au serveur, ils alternent les connexions au serveur plusieurs fois par seconde.&lt;br /&gt;
&lt;br /&gt;
Mais un problème persiste: lorsque la carte du robot-maître doit à la fois réservoir les informations Bluetooth et transmettre les ordres en Wi-Fi le système deviens instable.&lt;br /&gt;
Afin de palier ce problème nous avons tenté de créer une connexion UDP pour pouvoir établir une connexion stable entre le robot-maître et les deux robot-esclaves simultanément.&lt;br /&gt;
&lt;br /&gt;
La raison pour choisir ce prototype est que la liaison UDP ne considère pas la disponibilité des destinations, il ne prise en compte que ses addresses IP et le port. C'est-à-dire si la commande à envoyer est disponible, le serveur va l'envoyer directement vers les addresses des clients via le port prédéfinit sans considerer s'ils peuvent recevoir ou pas. Selon les resultats des testes que nous avons fait, nous pensons que le prototype UDP est assez stable pour notre application.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La solution retenue sera donc dans un premier temps de configurer la carte Sparkfun ESP32 Thing du serveur en SoftAP, et d'ensuite connecté chacun des deux clients à ce réseau via une IP fixe.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous aurons alors les IPs suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Carte !! IP&lt;br /&gt;
|-&lt;br /&gt;
| serveur (robot maître) || 192.168.4.1 (AP)&lt;br /&gt;
|-&lt;br /&gt;
| client1 (robot esclave1) || 192.168.4.2&lt;br /&gt;
|-&lt;br /&gt;
| client2 (robot esclave2) || 192.168.4.3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans le code mis en place, les esclaves vont tout d'abord envoyer ses addresses IP au maître comme lui ditent qu'ils sont prêts, puis le maître envoie la commande ce qu'il a reçu de la baguatte par Bluetooth (sous format String) à l'esclave connecté. &amp;lt;br /&amp;gt;&lt;br /&gt;
Toutes les données citées ci-dessus sont stockées à chaque fois dans un paquet qui sera envoyé via le protocole UDP (nous ne devons donc plus nous soucier d'un éventuel bit de start et/ou bit de stop).&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré des soucis avec la sparkfun hébergent à la fois le serveur bluetooth et Wi-Fi, en effet elle plante régulièrement après une utilisation trop longue. Cela est sans doute dû à des fuites de mémoires. Et la communication ne semblait pas fonctionner lorsque les cartes se trouvaient à moins de 20cm l'une de l'autre. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalement la communication est effectué à 115200 bauds et subit quelques conflit sans influences sur la stabilité globale.&lt;br /&gt;
&lt;br /&gt;
= Robot-esclave =&lt;br /&gt;
&lt;br /&gt;
== Schéma de câblage ==&lt;br /&gt;
&lt;br /&gt;
Le schéma de câblage des robot-esclaves est le même que celui du robot-maître, il a juste été adapté pour trois roues&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
[[Fichier:Client1.JPG|vignette|Communication du serveur avec le client point de vu client]]&lt;br /&gt;
Le programme des robot-esclaves est également le même que celui du maître, seule la partie concernant la communication Wi-Fi change. &lt;br /&gt;
&lt;br /&gt;
Les deux robot-esclaves on évidement le même [[Média:Client.zip|code client wifi]], cependant ils ont chacun leur propre adresse IP&lt;/div&gt;</summary>
		<author><name>Zhao.zixiao</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10368</id>
		<title>Robots danseurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10368"/>
		<updated>2019-05-20T16:02:40Z</updated>

		<summary type="html">&lt;p&gt;Zhao.zixiao : /* La communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet du module Robots Communicants de Telecom Saint-Etienne 2018/2019.&amp;lt;br /&amp;gt;&lt;br /&gt;
= Sujet =&lt;br /&gt;
L'utilisateur doit pouvoir commander un robot &amp;quot;maître&amp;quot; à distance au moyen d'une baguette. Deux robots esclaves doivent, en temps réel, imiter les mouvements du maître.&lt;br /&gt;
&lt;br /&gt;
= Objectif du projet =&lt;br /&gt;
&lt;br /&gt;
Créer une &amp;quot;baguette magique&amp;quot; permettant de donner des ordres de façon fluide et intuitive à un robot-maître qui doit ensuite transmettre les ordres qu'il reçoit à un couple de robot-esclaves&lt;br /&gt;
&lt;br /&gt;
== Diagrammes fonctionnels ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe1.png|thumb|center|Diagramme fonctionnel d'odre 1]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe_2t.png|800px|thumb|center|Diagramme fonctionnel d'odre 2]]&lt;br /&gt;
&lt;br /&gt;
== Spécifications fonctionnelles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Spécifications fonctionnelles&lt;br /&gt;
|-&lt;br /&gt;
|Fonction principale&lt;br /&gt;
|Diriger des robots avec une baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 1&lt;br /&gt;
|Établir une communication entre les robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 2&lt;br /&gt;
|Empêcher les ordres non voulus&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 3&lt;br /&gt;
|Implémenter un feedback physique à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 4&lt;br /&gt;
|Implémenter un feedback lumineux à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 5&lt;br /&gt;
|Implémenter un feedback lumineux aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 6&lt;br /&gt;
|Implémenter un feedback sonore aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 7&lt;br /&gt;
|Créer des chorégraphies&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= La Baguette =&lt;br /&gt;
&lt;br /&gt;
La baguette sert à contrôler le robot maître par le biais de ses mouvements.&lt;br /&gt;
&lt;br /&gt;
Elle doit donc pouvoir:&lt;br /&gt;
*Mesurer les amplitudes et directions de ses accélérations linéaire et rotative&lt;br /&gt;
*Traiter l'information pour en faire des ordres compréhensible par le robot-maître &lt;br /&gt;
*Pouvoir communiquer avec le robot-maître via le protocole BLE&lt;br /&gt;
*Donner un feedback physique à l'aide d'un vibro-moteur placé au niveau de la poignée de la baguette&lt;br /&gt;
*Donner un feedback visuel à l'aide d'un ruban de LEDS fixé sur la baguette&lt;br /&gt;
&lt;br /&gt;
== Composants électroniques utilisés ==&lt;br /&gt;
&lt;br /&gt;
=== Carte de contrôle ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Esp.jpg|vignette|ESP32 Thing]]&lt;br /&gt;
La [https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide/all carte Sparkfun esp32 thing] a été retenu en raison de sa communication BLE malgré sa grande taille comparé à la [https://www.pjrc.com/teensy/ carte Arduino Teensy].&lt;br /&gt;
&lt;br /&gt;
Cette carte est alimentée via une batterie de 3.6V et 600mAh.&lt;br /&gt;
&lt;br /&gt;
La carte de contrôle et l'appareil de mesure communiquent ensemble par communication I2C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Appareil de mesure ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Pololu_flo.jpg|vignette|Gyromètre retenu : Pololu AltMU-10 v4 (avec ses axes)]]&lt;br /&gt;
Le type de capteur retenu est le gyromètre, il permet de mesurer les accélérations linéaires et angulaires des trois directions de l'espace.&lt;br /&gt;
&lt;br /&gt;
Deux gyromètres sont en compétition, la [https://www.pololu.com/product/2470 Pololu AltMU-10 v4] et le [http://wiki.seeedstudio.com/Grove-IMU_10DOF/ Grove IMU 10DOF v1.1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Critères de choix retenus (triés par ordre d'importance):&lt;br /&gt;
# la fiabilité du capteur (absence de valeurs aberrantes)&lt;br /&gt;
# la taille (il doit être facile à intégrer sur la baguette)&lt;br /&gt;
# la facilité de programmation &lt;br /&gt;
# la précision (dans le cas où la vitesse de la baguette serve au pilotage du robot)&lt;br /&gt;
&lt;br /&gt;
Finalement c'est le Pololu qui a été retenu en raison de sa très petite taille par rapport au capteur Grove.&lt;br /&gt;
&lt;br /&gt;
=== Bouton poussoir ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bp_flo.jpg|vignette|Bouton poussoir retenu]]&lt;br /&gt;
Nous avons fait le choix d'ajouter un bouton poussoir sur notre baguette pour que celle-ci sache quand est-ce que nous voulons envoyer des ordres ou pas. Ce qui permettra à l'utilisateur de pouvoir garder la baguette en main sans devoir faire attention à ses mouvements ou sans devoir éteindre la baguette lorsque nous ne voulons pas envoyer d'ordre. &lt;br /&gt;
&lt;br /&gt;
Ce bouton nous permettra également de déterminer dans quel mode nous voulons guider le robot maître (qui sera expliqué plus bas).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vibreur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Vibro.jpg|vignette|Vibro-moteur retenu : grove vibro moteur 1.3]]&lt;br /&gt;
Un vibreur a été ajouté à la baguette pour avoir un retour sur le bon envoie de l'instruction. Attention, la vibration est seulement ici pour dire qu'une instruction a été envoyée avec succès et non pas pour notifier sa bonne réception sur le robot maître. Par conséquent, il se peut que la baguette vibre sans pour autant que le robot maître interprète correctement les ordres et les réalise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ruban de led ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ruban_flo.jpg|vignette|Ruban de leds retenu :  NeoPixel ADA1507 RGB 1m 144 leds]]&lt;br /&gt;
Un [https://www.adafruit.com/product/1506 ruban de LED] est enroulé autour de la baguette pour coller au mieux au coté ludique des robots.&lt;br /&gt;
&lt;br /&gt;
Ses fonctionnalités sont :&lt;br /&gt;
&lt;br /&gt;
Dans le mode manuel :&lt;br /&gt;
&lt;br /&gt;
*Prendre une couleur différente pour chaque ordre&lt;br /&gt;
*Plus l'ordre est maintenu plus le nombre de led illuminées augmente&lt;br /&gt;
*Si on envoie un ordre différent, les led &amp;quot;redescendent&amp;quot; rapidement avant de &amp;quot;remonter&amp;quot; dans une autre couleur&lt;br /&gt;
*Si le bouton est relâché les led &amp;quot;redescendent&amp;quot; et sont par conséquent toutes éteintes.&lt;br /&gt;
&lt;br /&gt;
Dans le mode automatique :&lt;br /&gt;
&lt;br /&gt;
*Eclairage en arc-en-ciel pour la chorégraphie 1&lt;br /&gt;
*Eclairage fluide avec des changements de couleur pour la chorégraphie 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La bande de led est alimentée via une batterie de 5V différente de la batterie alimentant l'ESP32.&lt;br /&gt;
&lt;br /&gt;
== Les différents modes ==&lt;br /&gt;
&lt;br /&gt;
=== Mode manuel ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de synchroniser les robots aux mouvements de la baguette. C'est le mode utilisé par défaut lorsqu'on alimente la baguette.&lt;br /&gt;
&lt;br /&gt;
La liste des ordres est la suivante (s'enclenche en maintenant appuyé le bouton poussoir pendant l'action en cours)  :&lt;br /&gt;
*Coup vers l'avant: fait avancer le robot&lt;br /&gt;
*Coup vers l'arrière: fait reculer le robot&lt;br /&gt;
*Coup vers la droite: fait aller le robot vers la droite&lt;br /&gt;
*Coup vers la gauche: fait aller le robot vers la gauche&lt;br /&gt;
*Rotation droite: fait tourner le robot dans le sens horaire&lt;br /&gt;
*Rotation gauche: fait tourner le robot dans le sens trigonométrique&lt;br /&gt;
&lt;br /&gt;
Une fois que le bouton poussoir est relâché, cela sera interpréter comme un stop et les robots devront s'arrêter.&lt;br /&gt;
&lt;br /&gt;
=== Mode automatique ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de lancer une chorégraphie sans tenir compte des mouvements de la baguette. Celui-ci est activé à l'aide d'une combinaison de mouvements et d'appuis sur le bouton poussoir.&lt;br /&gt;
&lt;br /&gt;
Nous avons la possibilité de lancer deux chorégraphies au choix :&lt;br /&gt;
*Chorégraphie 1 : Coup vers la gauche de la baguette + appui court sur le BP&lt;br /&gt;
*Chorégraphie 2 : Coup vers la droite de la baguette + appui court sur le BP&lt;br /&gt;
&lt;br /&gt;
Afin d'éviter qu'une chorégraphie se répète en boucle, un simple appui sur le bouton poussoir arrêtera la chorégraphie une fois celle-ci terminée.&lt;br /&gt;
&lt;br /&gt;
Pour les deux chorégraphies, le robot maître lancera une musique en même temps (voir plus bas).&lt;br /&gt;
&lt;br /&gt;
== Rendu final de la baguette magique ==&lt;br /&gt;
&lt;br /&gt;
=== Conception ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Solid.jpg|800px|La baguette modélisée sous Solid]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La baguette a été modélisée sur SolidWorks puis imprimée en 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fabrication/Assemblage ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette1.jpg|800px|La baguette vue en coupe avec les composants]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette2.jpg|800px|La baguette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne les différents programmes (tests + final) et les schémas de câblage, se rendre sur : [[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;br /&gt;
&lt;br /&gt;
= Le Robot-Maître =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot maitre.jpg|vignette|Photo du robot-maître]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: [http://www.kysanelectronics.com/graphics/RK-370CA.pdf Mabuchi rk-370-CA]&lt;br /&gt;
*Carte de contrôle: Arduino Teensy et Sparkfun esp32 communicant ensemble par UART&lt;br /&gt;
*Interface de puissance: [https://ujm.webgroup.fr/images/7/7a/PCB_Robot4Voies.pdf Carte fournie par TSE]&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
*Régulateur de tension : Traco Power&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le code des robots sera séparé en trois parties distinctes : &lt;br /&gt;
*la commande du robot&lt;br /&gt;
*la communication&lt;br /&gt;
&lt;br /&gt;
Des interruptions sont utilisées par le programme pour récupérer les informations générées par les roues codeuse afin de soulager le processeur.&lt;br /&gt;
&lt;br /&gt;
=== La commande du robot ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Communication.png|vignette|droite|Schéma de communication global]]&lt;br /&gt;
&lt;br /&gt;
Les moteurs sont pilotés via différentes fonctions:&lt;br /&gt;
*Avancer&lt;br /&gt;
*Reculer&lt;br /&gt;
*Aller à droite&lt;br /&gt;
*Aller à gauche&lt;br /&gt;
*Aller en biais en haut à droite&lt;br /&gt;
*Aller en biais en haut à gauche&lt;br /&gt;
*Aller en biais en bas à droite&lt;br /&gt;
*Aller en biais en bas à gauche&lt;br /&gt;
*Rotation dans le sens trigonométrique&lt;br /&gt;
*Rotation dans le sens anti trigonométrique&lt;br /&gt;
&lt;br /&gt;
=== La communication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le robot-maître reçoit ses ordres de la baguette par bluetooth.&lt;br /&gt;
&lt;br /&gt;
La communication avec les robot-esclaves se fait via une communication Wi-Fi, le robot-maître crée un serveur auquel se connecte les robot-esclaves pour récupérer leurs ordres.&lt;br /&gt;
&lt;br /&gt;
= Les Robot-Esclaves =&lt;br /&gt;
[[Fichier:Robot esclave.jpg|vignette|droite|Photo d'un des robot-esclaves]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: Hennkwell HG37D670WE12-052&lt;br /&gt;
*Carte de contrôle: Arduino Teensy&lt;br /&gt;
*Interface de puissance: Carte fournie par TSE&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le programme des robot-esclaves est exactement le même que celui du robot-maître, à la différence près qu'il a été adapté pour fonctionner avec 3 roues et non quatre.&lt;br /&gt;
&lt;br /&gt;
Les robot-esclaves reçoivent exactement les mêmes ordres que ceux reçu par le robot-maître étant donné que le programme est le même pour les 3 robots.&lt;br /&gt;
&lt;br /&gt;
= Références externes =&lt;br /&gt;
&lt;br /&gt;
[[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;/div&gt;</summary>
		<author><name>Zhao.zixiao</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10364</id>
		<title>Robots danseurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10364"/>
		<updated>2019-05-20T15:59:31Z</updated>

		<summary type="html">&lt;p&gt;Zhao.zixiao : /* Transmission directe via Access Point (SoftAP) sur ESP32 : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet du module Robots Communicants de Telecom Saint-Etienne 2018/2019.&amp;lt;br /&amp;gt;&lt;br /&gt;
= Sujet =&lt;br /&gt;
L'utilisateur doit pouvoir commander un robot &amp;quot;maître&amp;quot; à distance au moyen d'une baguette. Deux robots esclaves doivent, en temps réel, imiter les mouvements du maître.&lt;br /&gt;
&lt;br /&gt;
= Objectif du projet =&lt;br /&gt;
&lt;br /&gt;
Créer une &amp;quot;baguette magique&amp;quot; permettant de donner des ordres de façon fluide et intuitive à un robot-maître qui doit ensuite transmettre les ordres qu'il reçoit à un couple de robot-esclaves&lt;br /&gt;
&lt;br /&gt;
== Diagrammes fonctionnels ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe1.png|thumb|center|Diagramme fonctionnel d'odre 1]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe_2t.png|800px|thumb|center|Diagramme fonctionnel d'odre 2]]&lt;br /&gt;
&lt;br /&gt;
== Spécifications fonctionnelles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Spécifications fonctionnelles&lt;br /&gt;
|-&lt;br /&gt;
|Fonction principale&lt;br /&gt;
|Diriger des robots avec une baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 1&lt;br /&gt;
|Établir une communication entre les robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 2&lt;br /&gt;
|Empêcher les ordres non voulus&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 3&lt;br /&gt;
|Implémenter un feedback physique à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 4&lt;br /&gt;
|Implémenter un feedback lumineux à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 5&lt;br /&gt;
|Implémenter un feedback lumineux aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 6&lt;br /&gt;
|Implémenter un feedback sonore aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 7&lt;br /&gt;
|Créer des chorégraphies&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= La Baguette =&lt;br /&gt;
&lt;br /&gt;
La baguette sert à contrôler le robot maître par le biais de ses mouvements.&lt;br /&gt;
&lt;br /&gt;
Elle doit donc pouvoir:&lt;br /&gt;
*Mesurer les amplitudes et directions de ses accélérations linéaire et rotative&lt;br /&gt;
*Traiter l'information pour en faire des ordres compréhensible par le robot-maître &lt;br /&gt;
*Pouvoir communiquer avec le robot-maître via le protocole BLE&lt;br /&gt;
*Donner un feedback physique à l'aide d'un vibro-moteur placé au niveau de la poignée de la baguette&lt;br /&gt;
*Donner un feedback visuel à l'aide d'un ruban de LEDS fixé sur la baguette&lt;br /&gt;
&lt;br /&gt;
== Composants électroniques utilisés ==&lt;br /&gt;
&lt;br /&gt;
=== Carte de contrôle ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Esp.jpg|vignette|ESP32 Thing]]&lt;br /&gt;
La [https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide/all carte Sparkfun esp32 thing] a été retenu en raison de sa communication BLE malgré sa grande taille comparé à la [https://www.pjrc.com/teensy/ carte Arduino Teensy].&lt;br /&gt;
&lt;br /&gt;
Cette carte est alimentée via une batterie de 3.6V et 600mAh.&lt;br /&gt;
&lt;br /&gt;
La carte de contrôle et l'appareil de mesure communiquent ensemble par communication I2C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Appareil de mesure ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Pololu_flo.jpg|vignette|Gyromètre retenu : Pololu AltMU-10 v4 (avec ses axes)]]&lt;br /&gt;
Le type de capteur retenu est le gyromètre, il permet de mesurer les accélérations linéaires et angulaires des trois directions de l'espace.&lt;br /&gt;
&lt;br /&gt;
Deux gyromètres sont en compétition, la [https://www.pololu.com/product/2470 Pololu AltMU-10 v4] et le [http://wiki.seeedstudio.com/Grove-IMU_10DOF/ Grove IMU 10DOF v1.1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Critères de choix retenus (triés par ordre d'importance):&lt;br /&gt;
# la fiabilité du capteur (absence de valeurs aberrantes)&lt;br /&gt;
# la taille (il doit être facile à intégrer sur la baguette)&lt;br /&gt;
# la facilité de programmation &lt;br /&gt;
# la précision (dans le cas où la vitesse de la baguette serve au pilotage du robot)&lt;br /&gt;
&lt;br /&gt;
Finalement c'est le Pololu qui a été retenu en raison de sa très petite taille par rapport au capteur Grove.&lt;br /&gt;
&lt;br /&gt;
=== Bouton poussoir ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bp_flo.jpg|vignette|Bouton poussoir retenu]]&lt;br /&gt;
Nous avons fait le choix d'ajouter un bouton poussoir sur notre baguette pour que celle-ci sache quand est-ce que nous voulons envoyer des ordres ou pas. Ce qui permettra à l'utilisateur de pouvoir garder la baguette en main sans devoir faire attention à ses mouvements ou sans devoir éteindre la baguette lorsque nous ne voulons pas envoyer d'ordre. &lt;br /&gt;
&lt;br /&gt;
Ce bouton nous permettra également de déterminer dans quel mode nous voulons guider le robot maître (qui sera expliqué plus bas).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vibreur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Vibro.jpg|vignette|Vibro-moteur retenu : grove vibro moteur 1.3]]&lt;br /&gt;
Un vibreur a été ajouté à la baguette pour avoir un retour sur le bon envoie de l'instruction. Attention, la vibration est seulement ici pour dire qu'une instruction a été envoyée avec succès et non pas pour notifier sa bonne réception sur le robot maître. Par conséquent, il se peut que la baguette vibre sans pour autant que le robot maître interprète correctement les ordres et les réalise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ruban de led ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ruban_flo.jpg|vignette|Ruban de leds retenu :  NeoPixel ADA1507 RGB 1m 144 leds]]&lt;br /&gt;
Un [https://www.adafruit.com/product/1506 ruban de LED] est enroulé autour de la baguette pour coller au mieux au coté ludique des robots.&lt;br /&gt;
&lt;br /&gt;
Ses fonctionnalités sont :&lt;br /&gt;
&lt;br /&gt;
Dans le mode manuel :&lt;br /&gt;
&lt;br /&gt;
*Prendre une couleur différente pour chaque ordre&lt;br /&gt;
*Plus l'ordre est maintenu plus le nombre de led illuminées augmente&lt;br /&gt;
*Si on envoie un ordre différent, les led &amp;quot;redescendent&amp;quot; rapidement avant de &amp;quot;remonter&amp;quot; dans une autre couleur&lt;br /&gt;
*Si le bouton est relâché les led &amp;quot;redescendent&amp;quot; et sont par conséquent toutes éteintes.&lt;br /&gt;
&lt;br /&gt;
Dans le mode automatique :&lt;br /&gt;
&lt;br /&gt;
*Eclairage en arc-en-ciel pour la chorégraphie 1&lt;br /&gt;
*Eclairage fluide avec des changements de couleur pour la chorégraphie 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La bande de led est alimentée via une batterie de 5V différente de la batterie alimentant l'ESP32.&lt;br /&gt;
&lt;br /&gt;
== Les différents modes ==&lt;br /&gt;
&lt;br /&gt;
=== Mode manuel ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de synchroniser les robots aux mouvements de la baguette. C'est le mode utilisé par défaut lorsqu'on alimente la baguette.&lt;br /&gt;
&lt;br /&gt;
La liste des ordres est la suivante (s'enclenche en maintenant appuyé le bouton poussoir pendant l'action en cours)  :&lt;br /&gt;
*Coup vers l'avant: fait avancer le robot&lt;br /&gt;
*Coup vers l'arrière: fait reculer le robot&lt;br /&gt;
*Coup vers la droite: fait aller le robot vers la droite&lt;br /&gt;
*Coup vers la gauche: fait aller le robot vers la gauche&lt;br /&gt;
*Rotation droite: fait tourner le robot dans le sens horaire&lt;br /&gt;
*Rotation gauche: fait tourner le robot dans le sens trigonométrique&lt;br /&gt;
&lt;br /&gt;
Une fois que le bouton poussoir est relâché, cela sera interpréter comme un stop et les robots devront s'arrêter.&lt;br /&gt;
&lt;br /&gt;
=== Mode automatique ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de lancer une chorégraphie sans tenir compte des mouvements de la baguette. Celui-ci est activé à l'aide d'une combinaison de mouvements et d'appuis sur le bouton poussoir.&lt;br /&gt;
&lt;br /&gt;
Nous avons la possibilité de lancer deux chorégraphies au choix :&lt;br /&gt;
*Chorégraphie 1 : Coup vers la gauche de la baguette + appui court sur le BP&lt;br /&gt;
*Chorégraphie 2 : Coup vers la droite de la baguette + appui court sur le BP&lt;br /&gt;
&lt;br /&gt;
Afin d'éviter qu'une chorégraphie se répète en boucle, un simple appui sur le bouton poussoir arrêtera la chorégraphie une fois celle-ci terminée.&lt;br /&gt;
&lt;br /&gt;
Pour les deux chorégraphies, le robot maître lancera une musique en même temps (voir plus bas).&lt;br /&gt;
&lt;br /&gt;
== Rendu final de la baguette magique ==&lt;br /&gt;
&lt;br /&gt;
=== Conception ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Solid.jpg|800px|La baguette modélisée sous Solid]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La baguette a été modélisée sur SolidWorks puis imprimée en 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fabrication/Assemblage ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette1.jpg|800px|La baguette vue en coupe avec les composants]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette2.jpg|800px|La baguette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne les différents programmes (tests + final) et les schémas de câblage, se rendre sur : [[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;br /&gt;
&lt;br /&gt;
= Le Robot-Maître =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot maitre.jpg|vignette|Photo du robot-maître]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: [http://www.kysanelectronics.com/graphics/RK-370CA.pdf Mabuchi rk-370-CA]&lt;br /&gt;
*Carte de contrôle: Arduino Teensy et Sparkfun esp32 communicant ensemble par UART&lt;br /&gt;
*Interface de puissance: [https://ujm.webgroup.fr/images/7/7a/PCB_Robot4Voies.pdf Carte fournie par TSE]&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
*Régulateur de tension : Traco Power&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le code des robots sera séparé en trois parties distinctes : &lt;br /&gt;
*la commande du robot&lt;br /&gt;
*la communication&lt;br /&gt;
&lt;br /&gt;
Des interruptions sont utilisées par le programme pour récupérer les informations générées par les roues codeuse afin de soulager le processeur.&lt;br /&gt;
&lt;br /&gt;
=== La commande du robot ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Communication.png|vignette|droite|Schéma de communication global]]&lt;br /&gt;
&lt;br /&gt;
Les moteurs sont pilotés via différentes fonctions:&lt;br /&gt;
*Avancer&lt;br /&gt;
*Reculer&lt;br /&gt;
*Aller à droite&lt;br /&gt;
*Aller à gauche&lt;br /&gt;
*Aller en biais en haut à droite&lt;br /&gt;
*Aller en biais en haut à gauche&lt;br /&gt;
*Aller en biais en bas à droite&lt;br /&gt;
*Aller en biais en bas à gauche&lt;br /&gt;
*Rotation dans le sens trigonométrique&lt;br /&gt;
*Rotation dans le sens anti trigonométrique&lt;br /&gt;
&lt;br /&gt;
=== La communication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le robot-maître reçoit ses ordres de la baguette par bluetooth.&lt;br /&gt;
&lt;br /&gt;
La communication avec les robot-esclaves se fait via une communication Wi-Fi, le robot-maître crée un serveur auquel se connecte les robot-esclaves pour récupérer leurs ordres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== WiFi ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Transmission directe via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
Lors des premiers essais, il a été constaté qu'en utilisant une carte Sparkfun ESP32 Thing en tant que point d'accès et deux autres en client, la communication ne semblait pas fonctionner lorsque les cartes se trouvaient à moins de 20cm l'une de l'autre.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le prototype TCP a besoin d'une connexion stable, donc il prends un long temps pour l'établir. Et puis, cette connexion s'est fait à chaque fois quand nous allons envoyer une commande, alors les débits disponibles ne semblaient pas très vite.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Quand nous ne testons que la partie WiFi, même si la connexion entre le serveur er les deux clients est réalisée, mais le conflit entre les clients a lieu très souvent et la connexion n'est pas stable. En plus, quand intégré avec la liaison Bluetooth, la connexion TCP directe ne marche plus.&amp;lt;br /&amp;gt;&lt;br /&gt;
Cependant, le protocole UDP over WiFi permet d'utiliser toutes les possibilités du WiFi sans dépendre du nombre de liaison série disponible. De plus, ce protocole est relativement rapide à intégrer lorsque le travail précédent a été réalisé.&lt;br /&gt;
&lt;br /&gt;
===== Transmission UDP via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
En consultant les exemples sur internet, nous utiliserons le prototype UDP du WiFi pour la communications entre le robot maître et les esclaves.&amp;lt;br /&amp;gt;&lt;br /&gt;
La raison pour choisir ce prototype est que la liaison UDP ne considère pas la disponibilité des destinations, il ne prise en compte que ses addresses IP et le port. C'est-à-dire si la commande à envoyer est disponible, le serveur va l'envoyer directement vers les addresses des clients via le port prédéfinit sans considerer s'ils peuvent recevoir ou pas. Selon les resultats des testes que nous avons fait, nous pensons que le prototype UDP est assez stable pour notre application.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
La solution retenue sera donc dans un premier temps de configurer la carte Sparkfun ESP32 Thing du serveur en SoftAP, et d'ensuite connecté chacun des deux clients à ce réseau via une IP fixe.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous aurons alors les IPs suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Carte !! IP&lt;br /&gt;
|-&lt;br /&gt;
| serveur (robot maître) || 192.168.4.1 (AP)&lt;br /&gt;
|-&lt;br /&gt;
| client1 (robot esclave1) || 192.168.4.2&lt;br /&gt;
|-&lt;br /&gt;
| client2 (robot esclave2) || 192.168.4.3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans le code mis en place, les esclaves vont tout d'abord envoyer ses addresses IP au maître comme lui ditent qu'ils sont prêts, puis le maître envoie la commande ce qu'il a reçu de la baguatte par Bluetooth (sous format String) à l'esclave connecté. &amp;lt;br /&amp;gt;&lt;br /&gt;
Toutes les données citées ci-dessus sont stockées à chaque fois dans un paquet qui sera envoyé via le protocole UDP (nous ne devons donc plus nous soucier d'un éventuel bit de start et/ou bit de stop).&lt;br /&gt;
&lt;br /&gt;
= Les Robot-Esclaves =&lt;br /&gt;
[[Fichier:Robot esclave.jpg|vignette|droite|Photo d'un des robot-esclaves]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: Hennkwell HG37D670WE12-052&lt;br /&gt;
*Carte de contrôle: Arduino Teensy&lt;br /&gt;
*Interface de puissance: Carte fournie par TSE&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le programme des robot-esclaves est exactement le même que celui du robot-maître, à la différence près qu'il a été adapté pour fonctionner avec 3 roues et non quatre.&lt;br /&gt;
&lt;br /&gt;
Les robot-esclaves reçoivent exactement les mêmes ordres que ceux reçu par le robot-maître étant donné que le programme est le même pour les 3 robots.&lt;br /&gt;
&lt;br /&gt;
= Références externes =&lt;br /&gt;
&lt;br /&gt;
[[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;/div&gt;</summary>
		<author><name>Zhao.zixiao</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10362</id>
		<title>Robots danseurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10362"/>
		<updated>2019-05-20T15:54:12Z</updated>

		<summary type="html">&lt;p&gt;Zhao.zixiao : /* La communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet du module Robots Communicants de Telecom Saint-Etienne 2018/2019.&amp;lt;br /&amp;gt;&lt;br /&gt;
= Sujet =&lt;br /&gt;
L'utilisateur doit pouvoir commander un robot &amp;quot;maître&amp;quot; à distance au moyen d'une baguette. Deux robots esclaves doivent, en temps réel, imiter les mouvements du maître.&lt;br /&gt;
&lt;br /&gt;
= Objectif du projet =&lt;br /&gt;
&lt;br /&gt;
Créer une &amp;quot;baguette magique&amp;quot; permettant de donner des ordres de façon fluide et intuitive à un robot-maître qui doit ensuite transmettre les ordres qu'il reçoit à un couple de robot-esclaves&lt;br /&gt;
&lt;br /&gt;
== Diagrammes fonctionnels ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe1.png|thumb|center|Diagramme fonctionnel d'odre 1]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe_2t.png|800px|thumb|center|Diagramme fonctionnel d'odre 2]]&lt;br /&gt;
&lt;br /&gt;
== Spécifications fonctionnelles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Spécifications fonctionnelles&lt;br /&gt;
|-&lt;br /&gt;
|Fonction principale&lt;br /&gt;
|Diriger des robots avec une baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 1&lt;br /&gt;
|Établir une communication entre les robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 2&lt;br /&gt;
|Empêcher les ordres non voulus&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 3&lt;br /&gt;
|Implémenter un feedback physique à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 4&lt;br /&gt;
|Implémenter un feedback lumineux à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 5&lt;br /&gt;
|Implémenter un feedback lumineux aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 6&lt;br /&gt;
|Implémenter un feedback sonore aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 7&lt;br /&gt;
|Créer des chorégraphies&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= La Baguette =&lt;br /&gt;
&lt;br /&gt;
La baguette sert à contrôler le robot maître par le biais de ses mouvements.&lt;br /&gt;
&lt;br /&gt;
Elle doit donc pouvoir:&lt;br /&gt;
*Mesurer les amplitudes et directions de ses accélérations linéaire et rotative&lt;br /&gt;
*Traiter l'information pour en faire des ordres compréhensible par le robot-maître &lt;br /&gt;
*Pouvoir communiquer avec le robot-maître via le protocole BLE&lt;br /&gt;
*Donner un feedback physique à l'aide d'un vibro-moteur placé au niveau de la poignée de la baguette&lt;br /&gt;
*Donner un feedback visuel à l'aide d'un ruban de LEDS fixé sur la baguette&lt;br /&gt;
&lt;br /&gt;
== Composants électroniques utilisés ==&lt;br /&gt;
&lt;br /&gt;
=== Carte de contrôle ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Esp.jpg|vignette|ESP32 Thing]]&lt;br /&gt;
La [https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide/all carte Sparkfun esp32 thing] a été retenu en raison de sa communication BLE malgré sa grande taille comparé à la [https://www.pjrc.com/teensy/ carte Arduino Teensy].&lt;br /&gt;
&lt;br /&gt;
Cette carte est alimentée via une batterie de 3.6V et 600mAh.&lt;br /&gt;
&lt;br /&gt;
La carte de contrôle et l'appareil de mesure communiquent ensemble par communication I2C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Appareil de mesure ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Pololu_flo.jpg|vignette|Gyromètre retenu : Pololu AltMU-10 v4 (avec ses axes)]]&lt;br /&gt;
Le type de capteur retenu est le gyromètre, il permet de mesurer les accélérations linéaires et angulaires des trois directions de l'espace.&lt;br /&gt;
&lt;br /&gt;
Deux gyromètres sont en compétition, la [https://www.pololu.com/product/2470 Pololu AltMU-10 v4] et le [http://wiki.seeedstudio.com/Grove-IMU_10DOF/ Grove IMU 10DOF v1.1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Critères de choix retenus (triés par ordre d'importance):&lt;br /&gt;
# la fiabilité du capteur (absence de valeurs aberrantes)&lt;br /&gt;
# la taille (il doit être facile à intégrer sur la baguette)&lt;br /&gt;
# la facilité de programmation &lt;br /&gt;
# la précision (dans le cas où la vitesse de la baguette serve au pilotage du robot)&lt;br /&gt;
&lt;br /&gt;
Finalement c'est le Pololu qui a été retenu en raison de sa très petite taille par rapport au capteur Grove.&lt;br /&gt;
&lt;br /&gt;
=== Bouton poussoir ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bp_flo.jpg|vignette|Bouton poussoir retenu]]&lt;br /&gt;
Nous avons fait le choix d'ajouter un bouton poussoir sur notre baguette pour que celle-ci sache quand est-ce que nous voulons envoyer des ordres ou pas. Ce qui permettra à l'utilisateur de pouvoir garder la baguette en main sans devoir faire attention à ses mouvements ou sans devoir éteindre la baguette lorsque nous ne voulons pas envoyer d'ordre. &lt;br /&gt;
&lt;br /&gt;
Ce bouton nous permettra également de déterminer dans quel mode nous voulons guider le robot maître (qui sera expliqué plus bas).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vibreur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Vibro.jpg|vignette|Vibro-moteur retenu : grove vibro moteur 1.3]]&lt;br /&gt;
Un vibreur a été ajouté à la baguette pour avoir un retour sur le bon envoie de l'instruction. Attention, la vibration est seulement ici pour dire qu'une instruction a été envoyée avec succès et non pas pour notifier sa bonne réception sur le robot maître. Par conséquent, il se peut que la baguette vibre sans pour autant que le robot maître interprète correctement les ordres et les réalise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ruban de led ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ruban_flo.jpg|vignette|Ruban de leds retenu :  NeoPixel ADA1507 RGB 1m 144 leds]]&lt;br /&gt;
Un [https://www.adafruit.com/product/1506 ruban de LED] est enroulé autour de la baguette pour coller au mieux au coté ludique des robots.&lt;br /&gt;
&lt;br /&gt;
Ses fonctionnalités sont :&lt;br /&gt;
&lt;br /&gt;
Dans le mode manuel :&lt;br /&gt;
&lt;br /&gt;
*Prendre une couleur différente pour chaque ordre&lt;br /&gt;
*Plus l'ordre est maintenu plus le nombre de led illuminées augmente&lt;br /&gt;
*Si on envoie un ordre différent, les led &amp;quot;redescendent&amp;quot; rapidement avant de &amp;quot;remonter&amp;quot; dans une autre couleur&lt;br /&gt;
*Si le bouton est relâché les led &amp;quot;redescendent&amp;quot; et sont par conséquent toutes éteintes.&lt;br /&gt;
&lt;br /&gt;
Dans le mode automatique :&lt;br /&gt;
&lt;br /&gt;
*Eclairage en arc-en-ciel pour la chorégraphie 1&lt;br /&gt;
*Eclairage fluide avec des changements de couleur pour la chorégraphie 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La bande de led est alimentée via une batterie de 5V différente de la batterie alimentant l'ESP32.&lt;br /&gt;
&lt;br /&gt;
== Les différents modes ==&lt;br /&gt;
&lt;br /&gt;
=== Mode manuel ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de synchroniser les robots aux mouvements de la baguette. C'est le mode utilisé par défaut lorsqu'on alimente la baguette.&lt;br /&gt;
&lt;br /&gt;
La liste des ordres est la suivante (s'enclenche en maintenant appuyé le bouton poussoir pendant l'action en cours)  :&lt;br /&gt;
*Coup vers l'avant: fait avancer le robot&lt;br /&gt;
*Coup vers l'arrière: fait reculer le robot&lt;br /&gt;
*Coup vers la droite: fait aller le robot vers la droite&lt;br /&gt;
*Coup vers la gauche: fait aller le robot vers la gauche&lt;br /&gt;
*Rotation droite: fait tourner le robot dans le sens horaire&lt;br /&gt;
*Rotation gauche: fait tourner le robot dans le sens trigonométrique&lt;br /&gt;
&lt;br /&gt;
Une fois que le bouton poussoir est relâché, cela sera interpréter comme un stop et les robots devront s'arrêter.&lt;br /&gt;
&lt;br /&gt;
=== Mode automatique ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de lancer une chorégraphie sans tenir compte des mouvements de la baguette. Celui-ci est activé à l'aide d'une combinaison de mouvements et d'appuis sur le bouton poussoir.&lt;br /&gt;
&lt;br /&gt;
Nous avons la possibilité de lancer deux chorégraphies au choix :&lt;br /&gt;
*Chorégraphie 1 : Coup vers la gauche de la baguette + appui court sur le BP&lt;br /&gt;
*Chorégraphie 2 : Coup vers la droite de la baguette + appui court sur le BP&lt;br /&gt;
&lt;br /&gt;
Afin d'éviter qu'une chorégraphie se répète en boucle, un simple appui sur le bouton poussoir arrêtera la chorégraphie une fois celle-ci terminée.&lt;br /&gt;
&lt;br /&gt;
Pour les deux chorégraphies, le robot maître lancera une musique en même temps (voir plus bas).&lt;br /&gt;
&lt;br /&gt;
== Rendu final de la baguette magique ==&lt;br /&gt;
&lt;br /&gt;
=== Conception ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Solid.jpg|800px|La baguette modélisée sous Solid]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La baguette a été modélisée sur SolidWorks puis imprimée en 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fabrication/Assemblage ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette1.jpg|800px|La baguette vue en coupe avec les composants]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette2.jpg|800px|La baguette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne les différents programmes (tests + final) et les schémas de câblage, se rendre sur : [[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;br /&gt;
&lt;br /&gt;
= Le Robot-Maître =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot maitre.jpg|vignette|Photo du robot-maître]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: [http://www.kysanelectronics.com/graphics/RK-370CA.pdf Mabuchi rk-370-CA]&lt;br /&gt;
*Carte de contrôle: Arduino Teensy et Sparkfun esp32 communicant ensemble par UART&lt;br /&gt;
*Interface de puissance: [https://ujm.webgroup.fr/images/7/7a/PCB_Robot4Voies.pdf Carte fournie par TSE]&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
*Régulateur de tension : Traco Power&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le code des robots sera séparé en trois parties distinctes : &lt;br /&gt;
*la commande du robot&lt;br /&gt;
*la communication&lt;br /&gt;
&lt;br /&gt;
Des interruptions sont utilisées par le programme pour récupérer les informations générées par les roues codeuse afin de soulager le processeur.&lt;br /&gt;
&lt;br /&gt;
=== La commande du robot ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Communication.png|vignette|droite|Schéma de communication global]]&lt;br /&gt;
&lt;br /&gt;
Les moteurs sont pilotés via différentes fonctions:&lt;br /&gt;
*Avancer&lt;br /&gt;
*Reculer&lt;br /&gt;
*Aller à droite&lt;br /&gt;
*Aller à gauche&lt;br /&gt;
*Aller en biais en haut à droite&lt;br /&gt;
*Aller en biais en haut à gauche&lt;br /&gt;
*Aller en biais en bas à droite&lt;br /&gt;
*Aller en biais en bas à gauche&lt;br /&gt;
*Rotation dans le sens trigonométrique&lt;br /&gt;
*Rotation dans le sens anti trigonométrique&lt;br /&gt;
&lt;br /&gt;
=== La communication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le robot-maître reçoit ses ordres de la baguette par bluetooth.&lt;br /&gt;
&lt;br /&gt;
La communication avec les robot-esclaves se fait via une communication Wi-Fi, le robot-maître crée un serveur auquel se connecte les robot-esclaves pour récupérer leurs ordres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== WiFi ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Transmission directe via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
Lors des premiers essais, il a été constaté qu'en utilisant une carte Sparkfun ESP32 Thing en tant que point d'accès et deux autres en client, la communication ne semblait pas fonctionner lorsque les cartes se trouvaient à moins de 20cm l'une de l'autre.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le prototype TCP a besoin d'une connexion stable, donc il prends un long temps pour l'établir. Et puis, cette connexion s'est fait à chaque fois quand nous allons envoyer une commande, alors les débits disponibles ne semblaient pas très vite.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Quand nous ne testons que la partie WiFi, même si la connexion entre le serveur er les deux clients est réalisée, mais le conflit entre les clients a lieu très souvent et la connexion n'est pas stable. En plus, quand intégré avec la liaison Bluetooth, la connexion directe ne marche plus.&amp;lt;br /&amp;gt;&lt;br /&gt;
Cependant, le protocole UDP over WiFi permet d'utiliser toutes les possibilités du WiFi sans dépendre du nombre de liaison série disponible. De plus, ce protocole est relativement rapide à intégrer lorsque le travail précédent a été réalisé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Transmission UDP via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
En consultant les exemples sur internet, nous utiliserons le prototype UDP du WiFi pour la communications entre le robot maître et les esclaves.&amp;lt;br /&amp;gt;&lt;br /&gt;
La raison pour choisir ce prototype est que la liaison UDP ne considère pas la disponibilité des destinations, il ne prise en compte que ses addresses IP et le port. C'est-à-dire si la commande à envoyer est disponible, le serveur va l'envoyer directement vers les addresses des clients via le port prédéfinit sans considerer s'ils peuvent recevoir ou pas. Selon les resultats des testes que nous avons fait, nous pensons que le prototype UDP est assez stable pour notre application.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
La solution retenue sera donc dans un premier temps de configurer la carte Sparkfun ESP32 Thing du serveur en SoftAP, et d'ensuite connecté chacun des deux clients à ce réseau via une IP fixe.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous aurons alors les IPs suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Carte !! IP&lt;br /&gt;
|-&lt;br /&gt;
| serveur (robot maître) || 192.168.4.1 (AP)&lt;br /&gt;
|-&lt;br /&gt;
| client1 (robot esclave1) || 192.168.4.2&lt;br /&gt;
|-&lt;br /&gt;
| client2 (robot esclave2) || 192.168.4.3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans le code mis en place, les esclaves vont tout d'abord envoyer ses addresses IP au maître comme lui ditent qu'ils sont prêts, puis le maître envoie la commande ce qu'il a reçu de la baguatte par Bluetooth (sous format String) à l'esclave connecté. &amp;lt;br /&amp;gt;&lt;br /&gt;
Toutes les données citées ci-dessus sont stockées à chaque fois dans un paquet qui sera envoyé via le protocole UDP (nous ne devons donc plus nous soucier d'un éventuel bit de start et/ou bit de stop).&lt;br /&gt;
&lt;br /&gt;
= Les Robot-Esclaves =&lt;br /&gt;
[[Fichier:Robot esclave.jpg|vignette|droite|Photo d'un des robot-esclaves]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: Hennkwell HG37D670WE12-052&lt;br /&gt;
*Carte de contrôle: Arduino Teensy&lt;br /&gt;
*Interface de puissance: Carte fournie par TSE&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le programme des robot-esclaves est exactement le même que celui du robot-maître, à la différence près qu'il a été adapté pour fonctionner avec 3 roues et non quatre.&lt;br /&gt;
&lt;br /&gt;
Les robot-esclaves reçoivent exactement les mêmes ordres que ceux reçu par le robot-maître étant donné que le programme est le même pour les 3 robots.&lt;br /&gt;
&lt;br /&gt;
= Références externes =&lt;br /&gt;
&lt;br /&gt;
[[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;/div&gt;</summary>
		<author><name>Zhao.zixiao</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10360</id>
		<title>Robots danseurs</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Robots_danseurs&amp;diff=10360"/>
		<updated>2019-05-20T15:53:06Z</updated>

		<summary type="html">&lt;p&gt;Zhao.zixiao : /* La communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet du module Robots Communicants de Telecom Saint-Etienne 2018/2019.&amp;lt;br /&amp;gt;&lt;br /&gt;
= Sujet =&lt;br /&gt;
L'utilisateur doit pouvoir commander un robot &amp;quot;maître&amp;quot; à distance au moyen d'une baguette. Deux robots esclaves doivent, en temps réel, imiter les mouvements du maître.&lt;br /&gt;
&lt;br /&gt;
= Objectif du projet =&lt;br /&gt;
&lt;br /&gt;
Créer une &amp;quot;baguette magique&amp;quot; permettant de donner des ordres de façon fluide et intuitive à un robot-maître qui doit ensuite transmettre les ordres qu'il reçoit à un couple de robot-esclaves&lt;br /&gt;
&lt;br /&gt;
== Diagrammes fonctionnels ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe1.png|thumb|center|Diagramme fonctionnel d'odre 1]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_classe_2t.png|800px|thumb|center|Diagramme fonctionnel d'odre 2]]&lt;br /&gt;
&lt;br /&gt;
== Spécifications fonctionnelles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Spécifications fonctionnelles&lt;br /&gt;
|-&lt;br /&gt;
|Fonction principale&lt;br /&gt;
|Diriger des robots avec une baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 1&lt;br /&gt;
|Établir une communication entre les robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 2&lt;br /&gt;
|Empêcher les ordres non voulus&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 3&lt;br /&gt;
|Implémenter un feedback physique à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 4&lt;br /&gt;
|Implémenter un feedback lumineux à la baguette&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 5&lt;br /&gt;
|Implémenter un feedback lumineux aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 6&lt;br /&gt;
|Implémenter un feedback sonore aux robots&lt;br /&gt;
|-&lt;br /&gt;
|Fonction secondaire 7&lt;br /&gt;
|Créer des chorégraphies&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= La Baguette =&lt;br /&gt;
&lt;br /&gt;
La baguette sert à contrôler le robot maître par le biais de ses mouvements.&lt;br /&gt;
&lt;br /&gt;
Elle doit donc pouvoir:&lt;br /&gt;
*Mesurer les amplitudes et directions de ses accélérations linéaire et rotative&lt;br /&gt;
*Traiter l'information pour en faire des ordres compréhensible par le robot-maître &lt;br /&gt;
*Pouvoir communiquer avec le robot-maître via le protocole BLE&lt;br /&gt;
*Donner un feedback physique à l'aide d'un vibro-moteur placé au niveau de la poignée de la baguette&lt;br /&gt;
*Donner un feedback visuel à l'aide d'un ruban de LEDS fixé sur la baguette&lt;br /&gt;
&lt;br /&gt;
== Composants électroniques utilisés ==&lt;br /&gt;
&lt;br /&gt;
=== Carte de contrôle ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Esp.jpg|vignette|ESP32 Thing]]&lt;br /&gt;
La [https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide/all carte Sparkfun esp32 thing] a été retenu en raison de sa communication BLE malgré sa grande taille comparé à la [https://www.pjrc.com/teensy/ carte Arduino Teensy].&lt;br /&gt;
&lt;br /&gt;
Cette carte est alimentée via une batterie de 3.6V et 600mAh.&lt;br /&gt;
&lt;br /&gt;
La carte de contrôle et l'appareil de mesure communiquent ensemble par communication I2C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Appareil de mesure ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Pololu_flo.jpg|vignette|Gyromètre retenu : Pololu AltMU-10 v4 (avec ses axes)]]&lt;br /&gt;
Le type de capteur retenu est le gyromètre, il permet de mesurer les accélérations linéaires et angulaires des trois directions de l'espace.&lt;br /&gt;
&lt;br /&gt;
Deux gyromètres sont en compétition, la [https://www.pololu.com/product/2470 Pololu AltMU-10 v4] et le [http://wiki.seeedstudio.com/Grove-IMU_10DOF/ Grove IMU 10DOF v1.1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Critères de choix retenus (triés par ordre d'importance):&lt;br /&gt;
# la fiabilité du capteur (absence de valeurs aberrantes)&lt;br /&gt;
# la taille (il doit être facile à intégrer sur la baguette)&lt;br /&gt;
# la facilité de programmation &lt;br /&gt;
# la précision (dans le cas où la vitesse de la baguette serve au pilotage du robot)&lt;br /&gt;
&lt;br /&gt;
Finalement c'est le Pololu qui a été retenu en raison de sa très petite taille par rapport au capteur Grove.&lt;br /&gt;
&lt;br /&gt;
=== Bouton poussoir ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bp_flo.jpg|vignette|Bouton poussoir retenu]]&lt;br /&gt;
Nous avons fait le choix d'ajouter un bouton poussoir sur notre baguette pour que celle-ci sache quand est-ce que nous voulons envoyer des ordres ou pas. Ce qui permettra à l'utilisateur de pouvoir garder la baguette en main sans devoir faire attention à ses mouvements ou sans devoir éteindre la baguette lorsque nous ne voulons pas envoyer d'ordre. &lt;br /&gt;
&lt;br /&gt;
Ce bouton nous permettra également de déterminer dans quel mode nous voulons guider le robot maître (qui sera expliqué plus bas).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vibreur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Vibro.jpg|vignette|Vibro-moteur retenu : grove vibro moteur 1.3]]&lt;br /&gt;
Un vibreur a été ajouté à la baguette pour avoir un retour sur le bon envoie de l'instruction. Attention, la vibration est seulement ici pour dire qu'une instruction a été envoyée avec succès et non pas pour notifier sa bonne réception sur le robot maître. Par conséquent, il se peut que la baguette vibre sans pour autant que le robot maître interprète correctement les ordres et les réalise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ruban de led ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ruban_flo.jpg|vignette|Ruban de leds retenu :  NeoPixel ADA1507 RGB 1m 144 leds]]&lt;br /&gt;
Un [https://www.adafruit.com/product/1506 ruban de LED] est enroulé autour de la baguette pour coller au mieux au coté ludique des robots.&lt;br /&gt;
&lt;br /&gt;
Ses fonctionnalités sont :&lt;br /&gt;
&lt;br /&gt;
Dans le mode manuel :&lt;br /&gt;
&lt;br /&gt;
*Prendre une couleur différente pour chaque ordre&lt;br /&gt;
*Plus l'ordre est maintenu plus le nombre de led illuminées augmente&lt;br /&gt;
*Si on envoie un ordre différent, les led &amp;quot;redescendent&amp;quot; rapidement avant de &amp;quot;remonter&amp;quot; dans une autre couleur&lt;br /&gt;
*Si le bouton est relâché les led &amp;quot;redescendent&amp;quot; et sont par conséquent toutes éteintes.&lt;br /&gt;
&lt;br /&gt;
Dans le mode automatique :&lt;br /&gt;
&lt;br /&gt;
*Eclairage en arc-en-ciel pour la chorégraphie 1&lt;br /&gt;
*Eclairage fluide avec des changements de couleur pour la chorégraphie 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La bande de led est alimentée via une batterie de 5V différente de la batterie alimentant l'ESP32.&lt;br /&gt;
&lt;br /&gt;
== Les différents modes ==&lt;br /&gt;
&lt;br /&gt;
=== Mode manuel ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de synchroniser les robots aux mouvements de la baguette. C'est le mode utilisé par défaut lorsqu'on alimente la baguette.&lt;br /&gt;
&lt;br /&gt;
La liste des ordres est la suivante (s'enclenche en maintenant appuyé le bouton poussoir pendant l'action en cours)  :&lt;br /&gt;
*Coup vers l'avant: fait avancer le robot&lt;br /&gt;
*Coup vers l'arrière: fait reculer le robot&lt;br /&gt;
*Coup vers la droite: fait aller le robot vers la droite&lt;br /&gt;
*Coup vers la gauche: fait aller le robot vers la gauche&lt;br /&gt;
*Rotation droite: fait tourner le robot dans le sens horaire&lt;br /&gt;
*Rotation gauche: fait tourner le robot dans le sens trigonométrique&lt;br /&gt;
&lt;br /&gt;
Une fois que le bouton poussoir est relâché, cela sera interpréter comme un stop et les robots devront s'arrêter.&lt;br /&gt;
&lt;br /&gt;
=== Mode automatique ===&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de lancer une chorégraphie sans tenir compte des mouvements de la baguette. Celui-ci est activé à l'aide d'une combinaison de mouvements et d'appuis sur le bouton poussoir.&lt;br /&gt;
&lt;br /&gt;
Nous avons la possibilité de lancer deux chorégraphies au choix :&lt;br /&gt;
*Chorégraphie 1 : Coup vers la gauche de la baguette + appui court sur le BP&lt;br /&gt;
*Chorégraphie 2 : Coup vers la droite de la baguette + appui court sur le BP&lt;br /&gt;
&lt;br /&gt;
Afin d'éviter qu'une chorégraphie se répète en boucle, un simple appui sur le bouton poussoir arrêtera la chorégraphie une fois celle-ci terminée.&lt;br /&gt;
&lt;br /&gt;
Pour les deux chorégraphies, le robot maître lancera une musique en même temps (voir plus bas).&lt;br /&gt;
&lt;br /&gt;
== Rendu final de la baguette magique ==&lt;br /&gt;
&lt;br /&gt;
=== Conception ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Solid.jpg|La baguette modélisée sous Solid]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La baguette a été modélisée sur SolidWorks puis imprimée en 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fabrication/Assemblage ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette1.jpg|La baguette vue en coupe avec les composants]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Baguette2.jpg|La baguette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne les différents programmes (tests + final) et les schémas de câblage, se rendre sur : [[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;br /&gt;
&lt;br /&gt;
= Le Robot-Maître =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robot maitre.jpg|vignette|Photo du robot-maître]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: [http://www.kysanelectronics.com/graphics/RK-370CA.pdf Mabuchi rk-370-CA]&lt;br /&gt;
*Carte de contrôle: Arduino Teensy et Sparkfun esp32 communicant ensemble par UART&lt;br /&gt;
*Interface de puissance: [https://ujm.webgroup.fr/images/7/7a/PCB_Robot4Voies.pdf Carte fournie par TSE]&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
*Régulateur de tension : Traco Power&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le code des robots sera séparé en trois parties distinctes : &lt;br /&gt;
*la commande du robot&lt;br /&gt;
*la communication&lt;br /&gt;
&lt;br /&gt;
Des interruptions sont utilisées par le programme pour récupérer les informations générées par les roues codeuse afin de soulager le processeur.&lt;br /&gt;
&lt;br /&gt;
=== La commande du robot ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Communication.png|vignette|droite|Schéma de communication global]]&lt;br /&gt;
&lt;br /&gt;
Les moteurs sont pilotés via différentes fonctions:&lt;br /&gt;
*Avancer&lt;br /&gt;
*Reculer&lt;br /&gt;
*Aller à droite&lt;br /&gt;
*Aller à gauche&lt;br /&gt;
*Aller en biais en haut à droite&lt;br /&gt;
*Aller en biais en haut à gauche&lt;br /&gt;
*Aller en biais en bas à droite&lt;br /&gt;
*Aller en biais en bas à gauche&lt;br /&gt;
*Rotation dans le sens trigonométrique&lt;br /&gt;
*Rotation dans le sens anti trigonométrique&lt;br /&gt;
&lt;br /&gt;
=== La communication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le robot-maître reçoit ses ordres de la baguette par bluetooth.&lt;br /&gt;
&lt;br /&gt;
La communication avec les robot-esclaves se fait via une communication Wi-Fi, le robot-maître crée un serveur auquel se connecte les robot-esclaves pour récupérer leurs ordres.&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== WiFi ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Transmission directe via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
Lors des premiers essais, il a été constaté qu'en utilisant une carte Sparkfun ESP32 Thing en tant que point d'accès et deux autres en client, la communication ne semblait pas fonctionner lorsque les cartes se trouvaient à moins de 20cm l'une de l'autre.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le prototype TCP a besoin d'une connexion stable, donc il prends un long temps pour l'établir. Et puis, cette connexion s'est fait à chaque fois quand nous allons envoyer une commande, alors les débits disponibles ne semblaient pas très vite.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Quand nous ne testons que la partie WiFi, même si la connexion entre le serveur er les deux clients est réalisée, mais le conflit entre les clients a lieu très souvent et la connexion n'est pas stable. En plus, quand intégré avec la liaison Bluetooth, la connexion directe ne marche plus.&amp;lt;br /&amp;gt;&lt;br /&gt;
Cependant, le protocole UDP over WiFi permet d'utiliser toutes les possibilités du WiFi sans dépendre du nombre de liaison série disponible. De plus, ce protocole est relativement rapide à intégrer lorsque le travail précédent a été réalisé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Transmission UDP via Access Point (SoftAP) sur ESP32 : =====&lt;br /&gt;
En consultant les exemples sur internet, nous utiliserons le prototype UDP du WiFi pour la communications entre le robot maître et les esclaves.&amp;lt;br /&amp;gt;&lt;br /&gt;
La raison pour choisir ce prototype est que la liaison UDP ne considère pas la disponibilité des destinations, il ne prise en compte que ses addresses IP et le port. C'est-à-dire si la commande à envoyer est disponible, le serveur va l'envoyer directement vers les addresses des clients via le port prédéfinit sans considerer s'ils peuvent recevoir ou pas. Selon les resultats des testes que nous avons fait, nous pensons que le prototype UDP est assez stable pour notre application.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
La solution retenue sera donc dans un premier temps de configurer la carte Sparkfun ESP32 Thing du serveur en SoftAP, et d'ensuite connecté chacun des deux clients à ce réseau via une IP fixe.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nous aurons alors les IPs suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Carte !! IP&lt;br /&gt;
|-&lt;br /&gt;
| serveur (robot maître) || 192.168.4.1 (AP)&lt;br /&gt;
|-&lt;br /&gt;
| client1 (robot esclave1) || 192.168.4.2&lt;br /&gt;
|-&lt;br /&gt;
| client2 (robot esclave2) || 192.168.4.3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans le code mis en place, les esclaves vont tout d'abord envoyer ses addresses IP au maître comme lui ditent qu'ils sont prêts, puis le maître envoie la commande ce qu'il a reçu de la baguatte par Bluetooth (sous format String) à l'esclave connecté. &amp;lt;br /&amp;gt;&lt;br /&gt;
Toutes les données citées ci-dessus sont stockées à chaque fois dans un paquet qui sera envoyé via le protocole UDP (nous ne devons donc plus nous soucier d'un éventuel bit de start et/ou bit de stop).&lt;br /&gt;
&lt;br /&gt;
= Les Robot-Esclaves =&lt;br /&gt;
[[Fichier:Robot esclave.jpg|vignette|droite|Photo d'un des robot-esclaves]]&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
&lt;br /&gt;
*Moteur: Hennkwell HG37D670WE12-052&lt;br /&gt;
*Carte de contrôle: Arduino Teensy&lt;br /&gt;
*Interface de puissance: Carte fournie par TSE&lt;br /&gt;
*Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
Le programme des robot-esclaves est exactement le même que celui du robot-maître, à la différence près qu'il a été adapté pour fonctionner avec 3 roues et non quatre.&lt;br /&gt;
&lt;br /&gt;
Les robot-esclaves reçoivent exactement les mêmes ordres que ceux reçu par le robot-maître étant donné que le programme est le même pour les 3 robots.&lt;br /&gt;
&lt;br /&gt;
= Références externes =&lt;br /&gt;
&lt;br /&gt;
[[https://ujm.webgroup.fr/index.php?title=Robots_danseurs_technique Documentation technique]]&lt;/div&gt;</summary>
		<author><name>Zhao.zixiao</name></author>
		
	</entry>
</feed>