Robots danseurs

De Learning Lab Environnements Connectés
Révision datée du 20 mai 2019 à 17:59 par Zhao.zixiao (discussion | contributions) (Transmission directe via Access Point (SoftAP) sur ESP32 :)
Sauter à la navigation Sauter à la recherche

Projet du module Robots Communicants de Telecom Saint-Etienne 2018/2019.

Sujet

L'utilisateur doit pouvoir commander un robot "maître" à distance au moyen d'une baguette. Deux robots esclaves doivent, en temps réel, imiter les mouvements du maître.

Objectif du projet

Créer une "baguette magique" 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

Diagrammes fonctionnels

Diagramme fonctionnel d'odre 1
Diagramme fonctionnel d'odre 2

Spécifications fonctionnelles

Spécifications fonctionnelles
Fonction principale Diriger des robots avec une baguette
Fonction secondaire 1 Établir une communication entre les robots
Fonction secondaire 2 Empêcher les ordres non voulus
Fonction secondaire 3 Implémenter un feedback physique à la baguette
Fonction secondaire 4 Implémenter un feedback lumineux à la baguette
Fonction secondaire 5 Implémenter un feedback lumineux aux robots
Fonction secondaire 6 Implémenter un feedback sonore aux robots
Fonction secondaire 7 Créer des chorégraphies

La Baguette

La baguette sert à contrôler le robot maître par le biais de ses mouvements.

Elle doit donc pouvoir:

  • Mesurer les amplitudes et directions de ses accélérations linéaire et rotative
  • Traiter l'information pour en faire des ordres compréhensible par le robot-maître
  • Pouvoir communiquer avec le robot-maître via le protocole BLE
  • Donner un feedback physique à l'aide d'un vibro-moteur placé au niveau de la poignée de la baguette
  • Donner un feedback visuel à l'aide d'un ruban de LEDS fixé sur la baguette

Composants électroniques utilisés

Carte de contrôle

ESP32 Thing

La carte Sparkfun esp32 thing a été retenu en raison de sa communication BLE malgré sa grande taille comparé à la carte Arduino Teensy.

Cette carte est alimentée via une batterie de 3.6V et 600mAh.

La carte de contrôle et l'appareil de mesure communiquent ensemble par communication I2C.








Appareil de mesure

Gyromètre retenu : Pololu AltMU-10 v4 (avec ses axes)

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.

Deux gyromètres sont en compétition, la Pololu AltMU-10 v4 et le Grove IMU 10DOF v1.1


Critères de choix retenus (triés par ordre d'importance):

  1. la fiabilité du capteur (absence de valeurs aberrantes)
  2. la taille (il doit être facile à intégrer sur la baguette)
  3. la facilité de programmation
  4. la précision (dans le cas où la vitesse de la baguette serve au pilotage du robot)

Finalement c'est le Pololu qui a été retenu en raison de sa très petite taille par rapport au capteur Grove.

Bouton poussoir

Bouton poussoir retenu

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.

Ce bouton nous permettra également de déterminer dans quel mode nous voulons guider le robot maître (qui sera expliqué plus bas).



Vibreur

Vibro-moteur retenu : grove vibro moteur 1.3

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.






Ruban de led

Ruban de leds retenu : NeoPixel ADA1507 RGB 1m 144 leds

Un ruban de LED est enroulé autour de la baguette pour coller au mieux au coté ludique des robots.

Ses fonctionnalités sont :

Dans le mode manuel :

  • Prendre une couleur différente pour chaque ordre
  • Plus l'ordre est maintenu plus le nombre de led illuminées augmente
  • Si on envoie un ordre différent, les led "redescendent" rapidement avant de "remonter" dans une autre couleur
  • Si le bouton est relâché les led "redescendent" et sont par conséquent toutes éteintes.

Dans le mode automatique :

  • Eclairage en arc-en-ciel pour la chorégraphie 1
  • Eclairage fluide avec des changements de couleur pour la chorégraphie 2


La bande de led est alimentée via une batterie de 5V différente de la batterie alimentant l'ESP32.

Les différents modes

Mode manuel

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.

La liste des ordres est la suivante (s'enclenche en maintenant appuyé le bouton poussoir pendant l'action en cours) :

  • Coup vers l'avant: fait avancer le robot
  • Coup vers l'arrière: fait reculer le robot
  • Coup vers la droite: fait aller le robot vers la droite
  • Coup vers la gauche: fait aller le robot vers la gauche
  • Rotation droite: fait tourner le robot dans le sens horaire
  • Rotation gauche: fait tourner le robot dans le sens trigonométrique

Une fois que le bouton poussoir est relâché, cela sera interpréter comme un stop et les robots devront s'arrêter.

Mode automatique

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.

Nous avons la possibilité de lancer deux chorégraphies au choix :

  • Chorégraphie 1 : Coup vers la gauche de la baguette + appui court sur le BP
  • Chorégraphie 2 : Coup vers la droite de la baguette + appui court sur le BP

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.

Pour les deux chorégraphies, le robot maître lancera une musique en même temps (voir plus bas).

Rendu final de la baguette magique

Conception

La baguette modélisée sous Solid


La baguette a été modélisée sur SolidWorks puis imprimée en 3D.


Fabrication/Assemblage

La baguette vue en coupe avec les composants


La baguette


En ce qui concerne les différents programmes (tests + final) et les schémas de câblage, se rendre sur : [Documentation technique]

Le Robot-Maître

Photo du robot-maître

Composants

  • Moteur: Mabuchi rk-370-CA
  • Carte de contrôle: Arduino Teensy et Sparkfun esp32 communicant ensemble par UART
  • Interface de puissance: Carte fournie par TSE
  • Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V
  • Régulateur de tension : Traco Power

Programmation

Le code des robots sera séparé en trois parties distinctes :

  • la commande du robot
  • la communication

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.

La commande du robot

Schéma de communication global

Les moteurs sont pilotés via différentes fonctions:

  • Avancer
  • Reculer
  • Aller à droite
  • Aller à gauche
  • Aller en biais en haut à droite
  • Aller en biais en haut à gauche
  • Aller en biais en bas à droite
  • Aller en biais en bas à gauche
  • Rotation dans le sens trigonométrique
  • Rotation dans le sens anti trigonométrique

La communication

Le robot-maître reçoit ses ordres de la baguette par bluetooth.

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.


WiFi

Transmission directe via Access Point (SoftAP) sur ESP32 :

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.
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.

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.
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é.

Transmission UDP via Access Point (SoftAP) sur ESP32 :

En consultant les exemples sur internet, nous utiliserons le prototype UDP du WiFi pour la communications entre le robot maître et les esclaves.
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.

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.
Nous aurons alors les IPs suivantes :

Carte IP
serveur (robot maître) 192.168.4.1 (AP)
client1 (robot esclave1) 192.168.4.2
client2 (robot esclave2) 192.168.4.3


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é.
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).

Les Robot-Esclaves

Photo d'un des robot-esclaves

Composants

  • Moteur: Hennkwell HG37D670WE12-052
  • Carte de contrôle: Arduino Teensy
  • Interface de puissance: Carte fournie par TSE
  • Batterie : 8 piles de 2500mAh (soit 20Ah en tout) de 5V

Programmation

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.

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.

Références externes

[Documentation technique]