Robots suiveurs 2 : Différence entre versions
| Ligne 120 : | Ligne 120 : | ||
Puis nous nous connectons au périphérique sélectionné. Lorsque c'est fait, le bouton passe en vert et un message "connecté" apparaît. A l'inverse, e bouton est rouge et le message est "déconnecté" (cf. figure x).<br /> | Puis nous nous connectons au périphérique sélectionné. Lorsque c'est fait, le bouton passe en vert et un message "connecté" apparaît. A l'inverse, e bouton est rouge et le message est "déconnecté" (cf. figure x).<br /> | ||
[[Fichier:BT2.PNG|vignette|centré|figure x : Bluetooth partie 2]]<br /> | [[Fichier:BT2.PNG|vignette|centré|figure x : Bluetooth partie 2]]<br /> | ||
| − | + | Concernant les instructions à envoyer au robot, nous avons vu qu'il fallait créer différents boutons. Nous allons donc en expliciter quelques unes de ces instructions : <br /> | |
| + | * L'instruction crabe<br /> | ||
| + | Quand nous appuyons sur le bouton, l'application envoie par bluetooth une chaîne de caractères (ici "cc") ainsi qu'un caractère de fin de chaîne "/" permettant une réception des données plus facile (cf. figure x).<br /> | ||
| + | [[Fichier:Bouton crabe.PNG|vignette|centré|figure x : Instruction crabe]]<br /> | ||
| + | * L'instruction de marche arrière<br /> | ||
| + | Comme précédemment, lorsque nous maintenons appuyé le bouton relatif à la marche arrière, l'application envoie au robot "ar/" et le label correspondant devient vert. A l'inverse, lorsque nous relâchons le bouton, le caractère envoyé est "st/", correspondant à l'instruction stop et le label passe au rouge (cf. figure x).<br /> | ||
| + | [[Fichier:Boutons exemple.PNG|vignette|centré|figure x : Instruction marche arrière]]<br /> | ||
| + | * Les instructions de distance <br /> | ||
| + | Nous avons vu que nus pouvions choisir la distance entre les robots : S1 pour la distance entre le maître et l'esclave numéro 1 et S2 pour la distance entre les 2 esclaves. Concernant le code associé, dans un premier temps, si l'utilisateur n'entre aucune valeur, la valeur par défaut est 50cm. Ensuite, si l'utilisateur entre une valeur supérieure à 600cm alors cette dernière sera automatiquement mise à 600cm, de même si la valeur entrée est inférieure à 50cm, l'application enverra 50cm. Ces valeurs correspondent à la plage d'utilisation des capteurs (cf. figure x).<br /> | ||
| + | [[Fichier:Zone texte.PNG|vignette|centré|figure x : Instructions de distance]]<br /> | ||
'''Participants :''' ARNALDO ALVES Lucas, BOUCHIKHI Al mehdi, [[AurianeBrialon|BRIALON Auriane]], CARVALHO FONTÃO Caroline, DALIL Hajar, GALLEY Nicolas, [[Kaszubiak|KASZUBIAK Grégory]], KRA Kouassi, [[Okitaudji.florian|OKITAUDJI Florian]], [[TheoRAMOS|RAMOS Théo]], SANE Baboucar, [[Charles SILVESTRE|SILVESTRE Charles]], VERGEZ Romain. | '''Participants :''' ARNALDO ALVES Lucas, BOUCHIKHI Al mehdi, [[AurianeBrialon|BRIALON Auriane]], CARVALHO FONTÃO Caroline, DALIL Hajar, GALLEY Nicolas, [[Kaszubiak|KASZUBIAK Grégory]], KRA Kouassi, [[Okitaudji.florian|OKITAUDJI Florian]], [[TheoRAMOS|RAMOS Théo]], SANE Baboucar, [[Charles SILVESTRE|SILVESTRE Charles]], VERGEZ Romain. | ||
Version du 13 mai 2018 à 18:18
Projet du module Robots connectés 2017/2018.
1. Application et Communication WiFi et Bluetooth
Les robots vont devoir se coordonner en fonction des actions commandées à partir d'une application Android.
Pour ce faire, nous avons décidé d'appareiller le téléphone sur lequel l'application tournera avec le robot maître via Bluetooth. Le maître enverra alors les commandes adéquates aux robots esclaves via une communication WiFi.
La nouvelle carte Sparkfun ESP32 Thing intègre un module WiFi (comparable au module ESP8266) ainsi qu'un module Bluetooth. Cette carte nous semble donc être la meilleure option pour pouvoir implanter les actions voulue sur une carte type Arduino. Il faut cependant installer une librairie dans Arduino pour pouvoir utiliser cette carte. Les démarches à suivre sont sur ce lien :
Installation ESP32 sur Arduino
a) Communication WiFi
i. 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 une autre en client, la communication ne semblait pas fonctionner lorsque les deux cartes se trouvaient à moins de 20cm l'une de l'autre.
De plus, les débits disponibles ne semblaient pas dépasser 1 mot/s.
Il semblait cependant déjà possible d'envoyer un mot clé "ok" pouvant représenter un bit de start, puis la distance distS1 entre le slave 1 et le master, puis la distance distS2 entre le slave 2 et le slave 1, puis l'action à réaliser (sur deux caractères).
Le tout avait été fait en prenant l'option d'un serveur sur chaque esclave, et le maître connecté en tant que client aux deux esclaves car la carte Sparkfun ESP32 Thing possède plusieurs interfaces wifi (4).
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é.
ii. Transmission UDP via Access Point (SoftAP) sur ESP32 :
C'est pourquoi nous utiliserons le protocole wifi UDP pour la communications entre maitre et esclaves.
La solution retenue sera donc dans un premier temps de configurer la carte Sparkfun ESP32 Thing du maître en SoftAP, et d'ensuite connecté chacun des deux esclaves à ce réseau via une IP fixe.
Nous aurons alors les IPs suivantes :
| Carte | IP |
|---|---|
| Maître | 192.168.4.1 (AP) |
| Slave1 | 192.168.4.2 |
| Slave2 | 192.168.4.3 |
Il sera cependant possible de rajouter une carte Sparkfun ESP32 Thing fixe qui permettra de réaliser l'Access Point et d'éviter d'entrer dans la zone < 20 cm où les communications WiFi ne passent plus.
Dans le code mis en place, le maître envoie la distance voulue et l'action à l'esclave adéquat (si celui-ci s'est connecté au maître via l'envoi d'un premier mot "Connecté" mis en place dans la partie Setup() juste après la connexion). L'esclave lui renvoie la distance voulue et l'action qu'il vient de recevoir, ainsi que la distance réelle mesurée avec le lidar :
Il pourra cependant aussi envoyé le fait qu'il ait détecté un obstacle grâce à l'ultrason.
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). L'avantage est que l'envoi peut se faire depuis n'importe quel robot vers n'importe quel autre robot en indiquant juste l'IP et le port de destination.
Une importance particulière est accordée au bon découpage des paquets transmis étant donné qu'il y transite différents types de données (int pour distance, String pour action) qui sont convertis en String pour pouvoir être transmis.
Afin de simuler l'appui d'une commande sur l'application en attendant l'implantation des modules correspondant, nous avons mis en place un bouton poussoir qui, en s'actionnant, enverra les commandes entrées aux esclaves grâce à la différenciation des adresses IP.
Les codes sont disponibles à l'adresse suivante (onglet Backup) :
b) Communication Bluetooth
Il a été mis en oeuvre une communication Bluetooth entre un smartphone et l'ESP32 du maître. Les données reçues sont ensuite aiguillées vers un port série de l'ESP32 pour l'envoyer à la Teensy dans le but de piloter le moteur. Il existe 2 types de communication série, HardwareSerial et SoftwareSerial. Nous avons choisi d'utiliser le SoftwareSerial afin de laisser libre l'UART2 pour la communication avec le LIDAR.
Remarque: L'accès à l'UART1 n'est pas immédiat, il faut faire une manipulation (simple) mais qui risque de rendre instable le système. En effet, l'UART1 est connecté à la mémoire FLASH de l'ESP32.
Les librairies utilisées proviennent des liens suivants:
c) Application Android
Participants : BRIALON Auriane, GALLEY Nicolas
Lien vers l'apk de l'application
Afin de diriger le robot maître, il est nécessaire de créer une application android qui va donc envoyer les commandes nécessaires. Nous avons dans un premier temps mis en place des commandes correspondant aux différentes actions réalisables par le robot que nous pouvons retrouver dans le tableau suivant :
| Direction | Commande |
|---|---|
| Avancer | av |
| Reculer | ar |
| Droite | dr |
| Gauche | ga |
| Avant-droit | ad |
| Avant-gauche | ag |
| Arrière-droit | bd |
| Arrière-gauche | bg |
| Chorégraphie rotation | cr |
| Chorégraphie crabe | cc |
| Chorégraphie zigzag | cz |
| Stop | st |
Le principe de l'application doit donc gérer les actions du robot en envoyant une chaîne de caractères (correspondant aux commandes vues précédemment) et gérer la distance de l'esclave 1 par rapport au maître et celle de l'esclave 2 par rapport à l'esclave 1. Nous devons donc mettre en place autant de boutons que d'actions possibles et deux zones de texte permettant de récupérer les différentes distances entrées par l'utilisateur.
De plus, l'application doit communiquer en Bluetooth avec le robot donc nous ajoutons un boutons permettant de voir et sélectionner les périphériques connectés en Bluetooth disponibles. (cf. figure x)
Nous créons l'application à l'aide de App Inventor 2 car ce dernier gère plus facilement le Bluetooth. En effet, après plusieurs essais sous Android Studio, nous n'arrivions toujours pas à gérer le Bluetooth et l'émulateur était vraiment très lent. App Inventor 2, utilise le prince de "Drag & Drope" ce qui permet de créer aisément une interface graphique ainsi que le programme.
Concernant le code, à chaque événement sur un bouton, nous envoyons la chaîne de caractères correspondante avec un "/" afin que la réception Bluetooth puisse séparer les différentes informations qu'elle reçoit.
Pour la distance, l'utilisateur la rentre dans une zone de texte et appuie sur valider. Donc, au clic, nous récupérons cette valeur que nous mettons dans une variable et que nous envoyons par la suite.
Nous allons maintenant voir le code plus en détail.
Dans un premier temps, il est nécessaire de déclarer deux variables correspondants aux distances que nous voulons envoyer au robot. Nous les initialisons à 50 (cf. figure x).
Ensuite, concernant le Bluetooth, nous récupérons la liste des périphériques Bluetooth disponibles (cf. figure x).
Puis nous nous connectons au périphérique sélectionné. Lorsque c'est fait, le bouton passe en vert et un message "connecté" apparaît. A l'inverse, e bouton est rouge et le message est "déconnecté" (cf. figure x).
Concernant les instructions à envoyer au robot, nous avons vu qu'il fallait créer différents boutons. Nous allons donc en expliciter quelques unes de ces instructions :
- L'instruction crabe
Quand nous appuyons sur le bouton, l'application envoie par bluetooth une chaîne de caractères (ici "cc") ainsi qu'un caractère de fin de chaîne "/" permettant une réception des données plus facile (cf. figure x).
- L'instruction de marche arrière
Comme précédemment, lorsque nous maintenons appuyé le bouton relatif à la marche arrière, l'application envoie au robot "ar/" et le label correspondant devient vert. A l'inverse, lorsque nous relâchons le bouton, le caractère envoyé est "st/", correspondant à l'instruction stop et le label passe au rouge (cf. figure x).
- Les instructions de distance
Nous avons vu que nus pouvions choisir la distance entre les robots : S1 pour la distance entre le maître et l'esclave numéro 1 et S2 pour la distance entre les 2 esclaves. Concernant le code associé, dans un premier temps, si l'utilisateur n'entre aucune valeur, la valeur par défaut est 50cm. Ensuite, si l'utilisateur entre une valeur supérieure à 600cm alors cette dernière sera automatiquement mise à 600cm, de même si la valeur entrée est inférieure à 50cm, l'application enverra 50cm. Ces valeurs correspondent à la plage d'utilisation des capteurs (cf. figure x).
Participants : ARNALDO ALVES Lucas, BOUCHIKHI Al mehdi, BRIALON Auriane, CARVALHO FONTÃO Caroline, DALIL Hajar, GALLEY Nicolas, KASZUBIAK Grégory, KRA Kouassi, OKITAUDJI Florian, RAMOS Théo, SANE Baboucar, SILVESTRE Charles, VERGEZ Romain.