Robots serveurs parisiens
Lors de l'option robotique de deuxième année de Télécom Saint Etienne, nous devons réaliser quatre robots. Le projet a été pensé par les professeurs d'électronique de notre école, M. Eric Verney et M. Thierry Bru, en association avec FABLABouffe. Il s'agit de robots serveurs parisiens, en effet c'est en se basant sur le comportement ingrat des serveurs parisiens que l'idée de ces quatre scénarios est née. Le premier robot est Pépé le porte-plateaux, le deuxième Le Gueulard, le troisième Chaud-Devant et enfin le dernier, Hermès. La description de chacun d'eux est donnée postérieurement.
Le workshop se tiendra sur deux semaines. La première semaine se déroulera à la Préfabrique de l'innovation et la seconde au bâtiment du FABLABouffe, tous les deux situés aux Forces Motrices à l'ancienne manufacture de Saint Etienne, voir plan d'accès
Sommaire
- 1 Partie commune aux robots
- 2 Scénario 1 : Pépé le porte plateau
- 3 Scénario 2 : Le Gueulard
- 4 Scénario 3 : Chaud-Devant
- 5 Scénario 4 : Hermès
- 5.1 Présentation du scénario
- 5.2 Documentation technique
- 5.3 Etapes de réalisation
- 5.3.1 Etape 1 : Créer une carte SD Raspbian (OS linux Debian pour Raspberry) pour notre Raspberry Pi
- 5.3.2 Etape 2 : Connexion à la Raspberry
- 5.3.3 Etape 3 : Mise en place du serveur et de la base de données Mysql
- 5.3.4 Etape 4 : Mise en place de l'écran LCD
- 5.3.5 Etape 5 : Ajout des logiciels pour micro usb et enceintes
- 5.3.6 Etape 6 : Ajout des codes sources
- 5.3.7 Etape 7 : Connection Teensy via le port série
- 5.4 Robot opérationnel
Partie commune aux robots
Cette partie a été développée par Fatima-Zahra Benhammou, Bastien Beridot et Yessine Feki.
Documentation Technique
- Le robot fonctionne par l'intermédiaire d'une carte Teensy dont vous avez l'architecture sur le lien suivant : Carte Teensy
- PCB de la carte moteur contenant la Teensy : Fichier:PCB Project TeensyRobotL298N Orange.PDF
Déplacement du robot
- Dans un premier temps, on a installé l'environnement Teensy sous Arduino. Puis, il suffit de compiler et téléverser le programme suivant pour faire fonctionner les deux moteurs :
- Code Teensy asservissement vitesse moteurs ( en K ) : Fichier:TeensyVSL298AsservissementVitesse.zip
A ce stade, le robot fonctionne par l'intermédiaire d'ordres donnés directement via le moniteur série.
Suiveur de ligne
Pour notre projet, nos robots doivent suivre une ligne tracée au sol. Pour effectuer cette action, on choisit d'utiliser deux capteurs "suiveurs de ligne" QRE1113 composés chacun d'un émetteur IR et d'un photo-transistor.
- Vous trouverez la Datasheet du capteur QRE1113 dans le lien suivant: https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf
Après plusieurs tests et ajustements du code Arduino, on arrive à un résultat assez concluant que l'on vous présente dans cette vidéo :
- Code Arduino pour le suiveur de ligne : Fichier:Suiveur ligne.zip
Détection des obstacles
- On utilisera pour réaliser cette fonction un capteur à ultrasons SRF08 dont vous trouverez la documentation ci joint : Fichier:Capteur SRF08.docx
- Ce capteur est positionné au milieu à l'avant du robot :
- Le capteur est branché sur le bus I2C de la carte Teensy de commande moteurs (voir pins 18 (SDA) et 19 (SCL) sur le PCB de la carte).
- Code pour l'arrêt du robot inclus dans le code de suiveur de ligne : Fichier:Suiveur detecteur.zip
- Voici la vidéo qui montre l'arrêt du robot à la détection d'un obstacle :
Scénario 1 : Pépé le porte plateau
Ce scénario a été réalisé par Andrea Saez, Kevin Herbillon et Yessine Feki
Présentation du scénario
Ce robot a pour objectif d’apporter quelque chose à une personne qui serait alors assimilée à une source de chaleur importante.
Dans ce contexte, il attendrait à son point de départ qu'on lui remette quelque chose à servir (verres, apéritifs, etc...).
Initialement positionné sur le circuit, Pépé le porte-plateau suivrait la ligne tracée devant lui tant qu'il ne détecterait pas la présence d'une personne dans son champ de vision. Une fois la personne détectée, en supposant que celle-ci reste au même endroit durant le processus, Pépé quitterait le circuit pour se diriger en ligne droite vers sa cible, s'arrêterait à une certaine distance de celle-ci et lui laisserait le temps de prendre les objets posés sur le plateau avant de faire demi-tour et de revenir à sa position initiale.
Dans l'idéal, le robot se remettrait en place sur le circuit et recommencerait les étapes décrites précédemment tant qu'il détecterait la présence d'objets sur le plateau. Si le plateau est "vide", il s'arrêterait alors et attendrait qu'on lui remette de nouveaux objets à servir.
Documentation technique
Pour faire fonctionner ce robot nous allons utiliser une seule carte Teensy qui sera responsable de la commande des moteurs, et de la gestion des différents capteurs associés au suivi de ligne, à la détection d'obstacle et à la détection de personne.
Datasheets:
- Teensy 3.1: Voir "Partie commune aux robots" > "Documentation Technique".
- QRE1113: Voir "Partie commune aux robots" > "Suiveur de ligne".
- Capteur à ultrasons SRF08: Voir "Partie commune aux robots" > "Détection d'obstacles".
- Grid-Eye: Fichier:GrideyeDatasheet1.pdf + Fichier:GrideyeDatasheet2.pdf
Etapes de réalisation
Etape 1 : Visualisation des données fournies par le GridEye
Les environnements qui ont été utilisés pour ce projet sont Arduino IDE, Teensyduino, et Processing.
Arduino & Teensyduino
Cette partie permet de retourner les données numériques du GridEye.
- Télécharger la dernière version de Arduino IDE sur le site officiel: https://www.arduino.cc/
- Télécharger Teensyduino: https://www.pjrc.com/teensy/td_download.html
- Télécharger et compiler sous Arduino IDE le code suivant: Fichier:Grid-eye.zip
- Effectuer les branchements entre la carte Teensy et le capteur GridEye selon le schéma ci-dessous:
- Connecter le tout à votre ordinateur, vérifier que la carte est bien reconnue et sélectionner le bon port dans Arduino IDE (MenuBar>Tools).
- Téléverser le code qui a été compilé précédemment.
Selon les besoins, on pourra visualiser les données telles quelles grâce au moniteur série fourni par Arduino IDE ou les visualiser via le GUI développé sous Processing (voir ci-dessous)
Processing
- Télécharger la version 2.0 de Processing sur le site officiel: https://processing.org/
- Lier Arduino IDE à Processing en suivant les étapes décrites dans ce lien: http://playground.arduino.cc/Interfacing/Processing
- Télécharger le code permettant de générer le GUI sous Processing: Fichier:Gui.zip
- Charger le code. Vérifier que Processing prend en compte le bon port (en liaison série, c'est le même qu'utilise Arduino IDE).
Veiller avant de lancer Processing à ce que le moniteur série d'Arduino IDE ne soit pas ouvert. - Lancer le tout et enjoy!
Ci-dessus la charte de couleur du GUI, de gauche à droite les couleurs correspondent au froid et au chaud, la dernière colonne (blanche) étant réservée aux valeurs aberrantes (comme 500 celsius).
Cette étape nous a surtout permis de récupérer les valeurs des pixels que l'on pouvait associer à la présence d'humains. L'environnement (température ambiante, présence de radiateurs ou non) étant évolutif, il était important de réadapter les seuils de températures en début de chaque journée pour que le fonctionnement du robot, en asservissement, soit optimal.
L'étape 1 peut aussi être retrouvée en suivant ce lien Github: https://github.com/racoon-tse/GridEye-Teensy3.1.git
< Nota Bene > : pour ceux qui voudraient reprendre le code GUI, notez bien qu'un des pixels a été assignée à une valeur aberrante (500 en celsius). Ce pixel correspond à un pixel mort, spécifique au GridEye que nous avons utilisé au cours de ce projet. Il sert surtout de repère au niveau software pour faire la différence entre le début et la fin de chaque matrice de valeurs retournée par le capteur. Nous conseillons en conséquence de garder le code tel quel.
Etape 2 : Suivi de personne simple dans un environnement ouvert.
Cette étape a consisté à caractériser le "champ de vision" du robot, et à asservir celui-ci en déplacement. Pour ce faire, nous avons utilisé les codes de motorisation communs à l'ensemble des robots serveurs parisiens et nous les avons combinés avec la récupération des données fournies par le GridEye. Cette étape était cruciale car elle permettait de réguler la sensibilité du robot, et d'adapter sa vitesse de déplacement à sa capacité de détection de personne.
Nous avons défini de manière arbitraire 5 sous-matrices 8x2 (voir ci-dessous) pour décomposer le champ de vision du robot (une matrice 8x8 fournie par le GridEye). Chaque sous-matrice correspond à une direction spécifique. De manière naturelle, on comprend que si un humain apparaît dans le rectangle le plus à gauche, et s'il n'y a rien dans les autres, alors le robot devra aller à gauche. Si il y a plus d'une personne dans le champ de vision, le robot s'arrêtera momentanément, et manifestera une préférence pour la personne la plus à droite. S'il ne trouve rien, il tournera indéfiniment à droite.
Une personne est détectée lorsque le nombre de pixels qui la localisent, soit compris dans une fourchette de température "humaine", dépasse un certain seuil.
Pour l'instant, le robot n'était pas en mesure de détecter les obstacles. Cependant, celui-ci parvenait parfaitement à cibler une personne dans son champ de vision et à se déplacer dans sa direction. Voir vidéo ci-dessous:
Cette étape nous a permis de faire une première version du robot porte-plateau.
Code: Fichier:Robot v1.zip
Etape 3 : Scénario complet
Voir "Pépé, le robot porte-plateau" > "Présentation du scénario".
Voici un diagramme SDL permettant d'expliciter chaque étape dans l'asservissement du robot:
Le scénario étant assez complexe, nous avons voulu décomposer l'asservissement en fonctions que nous avons réalisées une par une. Aussi, nous avons écrit différentes versions d'un robot à chaque fois plus élaboré.
Afin de réaliser le suivi de ligne, nous avons tout simplement repris le même code qui était utilisé par tous les autres robots.
Ci-dessous la description et le code associés aux fonctions Détection de chaleur, Positionnement et Service.
Service
Après avoir réalisé la mise en oeuvre du Grid-Eye et le suivi de personne en environnement ouvert, nous avons programmé la fonction Service, ce qui a constitué une deuxième version de notre robot.
On suppose que le robot est bien positionné, soit à l'arrêt et bien en face de la personne (=source de chaleur importante détectée). Le robot se déplace alors en ligne droite et s'arrête à 20cm de la personne ciblée ou d'un obstacle rencontré en chemin, puis fait demi-tour.
Sur le chemin du retour, s'il rencontre un obstacle il s'arrête et ne repart que si l'obstacle n'est plus la. Il regagne alors sa position de départ.
Code: Fichier:Robot v2.rar
Positionnement
Nous avons ensuite implémenté la fonction Positionnement. Version 3.0!
Le robot est à l'arrêt, on suppose qu'il a déjà repéré une source de chaleur "intéressante", en l'occurence, une source de chaleur associée à la présence d'un humain. Par pas de 10 acquisitions, il décide de quel côté il doit se tourner. Il réitère jusqu'à être en face de la source de chaleur détectée et s'arrête. On considère que la source de chaleur est bien en face lorsque les pixels les plus "chauds" sont majoritairement compris dans le rectangle orange foncé dans le schéma "Champs de vision" (Voir "Pépé, le robot porte-plateau" > "Suivi de personne dans un environnement ouvert"). Ce comportement correspond à la fonction "Positionnement".
Code: Fichier:Robot v3.rar
Positionnement + Service
Nous avons ainsi réalisé une version 4.0 du robot. A ce moment-la, le robot est en mesure de combiner les deux fonctions décrites précédemment. Après s'être correctement positionné à l'aide de la fonction "Positionnement", il effectue son service et revient à sa position initiale grâce à la fonction "Service".
Code: Fichier:Robot v4.rar
Scénario complet = Suivi de ligne + Détection de personne -> Positionnement + Service
Et enfin, la version finale du robot!
En plus des fonctionnalités de la version précédente notre robot a la possibilité de suivre une ligne, de se rendre compte qu'un humain est dans son champ de vision, de s'arrêter avant de décider si il doit continuer sur la ligne ou s'il doit se rendre vers l'humain. Cette décision est prise en fonction de la distance qui le sépare de l'humain le plus proche et du potentiel mouvement de l'humain (si l'humain est sorti de son champ de vision, il retournera sur sa ligne). Si un humain a été ciblé, il exécute alors les fonctions précédemment décrites avec des conditions supplémentaires permettant par la suite de se ré-orienter sur la ligne à la fin de son service et de reprendre le chemin sur la ligne pour aller chercher d'autres clients.
Remarques:
- Pour l'instant et sur la version proposée, il n'y a pas de temps minimum de suivi de ligne mais un temps pourrait être implanté sans trop de difficultés.
- Nous n'avons pas implémenté de contrôle sur le plateau du robot, afin que celui-ci fasse la distinction entre le moment où il a des objets à servir et le moment où il n'en a pas.
Code: Fichier:Robot v5.zip
Etape 4 : [Bonus] Liaison Bluetooth
Puisque nous avions développé un GUI, il était intéressant d'établir une liaison bluetooth afin de voir ce que le robot "voyait" via le GridEye. Nous avons utilisé un module HC-06 pour mettre cette liaison sans fil.
Datasheet: Fichier:Hc06 datasheet.pdf
- Effectuer les branchements entre la carte Teensy et le module selon le schéma ci-dessous:
- Modifier le code pour établir la liaison bluetooth, en fonction des broches Tx/Rx utilisées.
- Téléverser le code ainsi modifié.
- Passer en mode Bluetooth sur l'ordinateur, afin que celui-ci retrouve le module. Pour une première connexion, un mot de passe sera demandé. Par défaut, c'est 1234.
- Regarder sur quel port virtuel l'ordinateur a placé le module.
- Éventuellement, regarder si l'ordinateur reçoit bien des données en utilisant Putty: http://www.putty.org/
- Ouvrir Processing, charger le code du GUI et vérifier que celui-ci lit les données sur le bon port.
- Démarrer le robot, et lancer Processing en parallèle.
Ci-dessous un test en vidéo du code Arduino Fichier:Grid-eye.zip avec le code Processing Fichier:Gui.zip pour faire fonctionner le GUI en liaison bluetooth:
Nous avons mise en oeuvre cette liaison un peu avant d'avoir fini de coder le scénario complet du robot, ce qui nous a bien servis pour débugger, car on pouvait retourner des messages en temps réel sur la console d'erreur de nos ordinateurs sans que ceux-ci soient connectés en filiaire au robot.
Robot opérationnel
Voici l'allure de notre robot final:
Entouré en rouge: carte Teensy 3.1.
Entouré en blanc: batterie servant à alimenter la carte Teensy 3.1.
Entouré en bleu: batterie servant à alimenter les moteurs.
Entouré en vert: GridEye.
Entouré en orange: capteur à ultrasons.
Entouré en rose: module Bluetooth.
Scénario 2 : Le Gueulard
Ce scénario a été réalisé par Constance Hersant, Bastien Beridot et Nicolas Rivat
Présentation du scénario
Ce robot a pour objectif de stopper le bruit en « gueulant » sur les gens.
Le robot se déplacera comme les autres le long du parcours tracé avec une ligne noire. Son capteur, un microphone, sera placé sur celui ci. Lorsque le signal sonore dépassera un seuil donné, le robot se stoppera alors et une phrase préenregistrée sera émise via les haut-parleurs afin de faire taire le perturbateur. Il ne reprendra alors son chemin que lorsque le bruit sera en dessous du seuil.
Il s'agira également d'un robot lunatique, mi-ange, mi-démon. Le robot sera muni d'un capteur couleur. La ligne noire sera parsemée de tâches de couleur (cf photo ci-après). Lorsque le robot détectera la couleur bleu, il énoncera une phrase préenregistrée "gentille" et lorsqu'il détectera du rouge, ce sera alors une phrase préenregistrée "méchante" qui sera émise.
Le robot sera également muni des fonctions "suivi de ligne" et "détection d'obstacles".
Documentation technique
Nous utiliserons deux cartes Arduino Teensy pour la réalisation de ce robot : une responsable de la commande moteurs, du suivi de ligne, de la détection d'obstacles par capteurs ultrasons et de la détection sonore (détection de bruit) et la deuxième responsable de l'envoi de messages audio avec une audio-cape Arduino.
- Teensy 3.1: Voir "Partie commune aux robots" > "Documentation Technique".
- QRE1113: Voir "Partie commune aux robots" > "Suiveur de ligne".
- Capteur à ultrasons SRF08: Voir "Partie commune aux robots" > "Détection d'obstacles".
- Capteur sonore SEN 12642 (capteur de base non disponible): Fichier:Résumé datasheet.docx
- Microphone ADMP401 (en remplacement) : Fichier:ADMP401 datasheet.pdf
- Capteur couleur :
Fichier:TSC3200 Resumefonctionnement.pdf
Fichier:TSC3200 Datasheet.pdf
Étapes de réalisation
Microphone
Etape 0 : Test du microphone
Cette étape permet de vérifier que le capteur fonctionne correctement. Le but du programme test est d'allumer une LED à partir d'un certain seuil.
Matériel :
- Une carte Teensy 3.1/3.2
- Un microphone ADMP401
- Une LED
- Fils
Branchements :
- Brancher VCC (3.3V) et la masse GND à la carte Teensy.
- Brancher la sortie analogique du microphone à une des pins analogiques de la carte Teensy.
- Brancher la LED à la masse et à un pin digital de la carte Teensy.
Code : Fichier:Microphone admp401.zip
Vidéo :
Etape 1 : Mise en oeuvre du microphone
Matériel :
- Une carte Teensy 3.1/3.2
- Un Shield Audio (connecté à la Teensy)
- Une carte SD contenant les fichiers sons, à mettre dans le shield audio
- Un microphone ADMP401
- Un haut parleur équipé d'une prise Jack
- Fils femelle/femelle
Branchements :
- Brancher VCC (3.3V) et la masse GND à la carte Teensy.
- Brancher la sortie analogique du microphone à une des pins analogiques de la carte Teensy.
- Pluguer le shield audio sur la carte Teensy.
- Brancher le haut parleur à la sortie Jack du shield audio.
- Relier la carte Teensy "audio" à la carte Teensy "moteur" (ports digitaux) de manière à pouvoir envoyer l'ordre d’arrêter les moteurs lorsqu'un son est détecté.
Code : Fichier:Gueulard.rar
Le robot est alors capable de suivre la ligne, émettre une phrase lorsqu'il entend un bruit trop fort ainsi que se stopper lorsqu'un obstacle se trouve devant lui.
Vidéos :
Capteur couleur
Etape 0 : Test du capteur couleur
Cette étape permet de vérifier que le capteur fonctionne correctement. Le but du programme test est d'allumer la LED de la couleur du scotch détectée par le capteur. Nous avons deux LEDs, une rouge et une bleu.
Matériel :
- Une carte Teensy 3.1/3.2
- Un capteur couleur TCS3200
- Une LED rouge et une LED bleu
- Fils
- Scotch de couleur bleu et rouge
Mécanique :
- Il faut stabiliser le capteur à une distance constante du support sur lequel sera placé le scotch de couleur. Nous avons accroché le capteur couleur sous le robot (cf photo). Si cette étape n'est pas réalisée les valeurs ne seront pas stabilisées. Lors de l'étalonnage et lors de la mesure du test final, il y aura des valeurs trop éloignées les unes des autres ce qui impliquera un non fonctionnement du test.
- Il faut impérativement que la taille du scotch soit supérieure à la distance séparant les photodiodes. Sinon le capteur ne pourra pas fonctionner. Nous mesurons ??????mm.
Branchements :
- On choisit d'allumer la LED du capteur. La zone colorée est alors éclairée. On élimine ainsi les quelques problèmes liés à l'éclairage environnant non contrôlable qui influenceraient les données du capteur. On a donc une certaine constance dans les données couleur renvoyées par le capteur.
- Après avoir effectuer les branchements, vérifiez et téléversez le code suivant :
Code : Fichier:Test capteur couleur TCS3200.zip
- Il faut maintenant étalonner. Positionnez le capteur sur le scotch de couleur, ouvrez le moniteur série. Les quatre valeurs White, Red, Green et Blue s'affichent alors. Il y a un léger écart dû à la sensibilité du capteur entre deux mesures. C'est pourquoi il faut choisir une plage de valeurs pour chaque composante couleur : +/-5 de la valeur plus ou moins stable. Entrez ces valeurs dans le code (boucle if). Faites de même avec l'autre scotch coloré.
- Vous avez terminé.
Vous pouvez observer que lorsque la capteur se trouve au dessus du scotch de couleur, la LED de la même couleur s'allume.
Vidéo résultat:
Etape 1 : Mise en oeuvre du capteur couleur
Matériel :
- Une carte Teensy 3.1/3.2
- Un capteur couleur TCS3200
- Fils
- Scotch de couleur bleu et rouge
Mécanique :
- Comme vu dans l'étape précédente, le scotch doit être assez large pour que les photodiodes reçoivent les informations de la couleur. Nous décidons alors de réaliser un circuit de ce type :
Les scotchs de couleur rouge et bleu sont à différents endroits, de largeur suffisante (photodiodes) mais pas excessive (suivi de ligne) et d'une longueur choisie de telle façon que le capteur puisse détecter la couleur sachant que le robot est en marche.
Branchements :
- Reprendre les branchements entre le capteur de couleur et la carte Teensy "moteur" comme dans le test du capteur de couleur.
- Pluguer le shield audio sur la carte Teensy "audio".
- Brancher le haut parleur à la sortie Jack du shield audio.
- Relier la carte Teensy "audio" à la carte Teensy "moteur" (ports digitaux) de manière à pouvoir envoyer l'information sur la detection de couleur.
Code : Fichier:Test capteur couleur et audio.rar
Vidéo : Nous avons choisi d'attribuer la voix de Nicolas à la couleur rouge et la voix de Davy à la couleur bleue pour réaliser le test.
Robot opérationnel
Voici l'allure de notre robot final :
Voici la vidéo présentant notre robot suivant la ligne blanche. Lorsqu'il entend du bruit, il se stoppe et émet une phrase pré-enregistrée.
Scénario 3 : Chaud-Devant
Ce scénario a été réalisé par Fatima-Zahra Benhammou, Lucas Nahon , Sana Bousairi
Présentation du scénario
Le robot parisien "Chaud-Devant" est un robot suiveur de ligne qui va suivre un itinéraire tracé sur le sol jusqu'à ce qu'il rencontre un obstacle. Le robot va alors s'arrêter et diffuser des messages audios pour qu'on lui libère le passage. Une fois le passage libéré, "Chaud-Devant" reprend sa route.
Documentation technique
Ce robot, de la même façon que le robot Gueulard, aura besoin de deux cartes Arduino Teensy pour fonctionner : la première pour gérer la commande des moteurs, le suivi de ligne et la détection d'obstacles par capteurs ultrasons et une deuxième pour l'envoi de messages audio grâce à une audio-cape.
Partie Motrice
Le déplacement du robot se base sur le code Arduino présent au début du wiki. On utilise donc le suiveur de ligne avec la détection d'obstacles.
Partie Audio
Pour la partie audio, la solution retenue pour le moment est l'utilisation d'une teensy munie d'un shield audio pour la lecture et la diffusion du message audio. Le message audio, de type .wav, sera enregistré dans une carte SD.
Code pour lancer un message audio préalablement enregistré dans une carte SD (adapté pour le shield audio) : Fichier:Teensy audio.ino.zip
Code pour lancer différents messages audio depuis la carte SD : Fichier:WavFilePlayer.ino.zip
Etapes de réalisation
Montage global
Notre robot suiveur de ligne est composé de deux Teensy 3.2, un shield audio, 2 capteurs suiveur de ligne, 2 télémètres à ultrasons et d'un petit haut-parleur. Les datasheets des différents capteurs ainsi que les sketchs arduino sont disponibles dans la partie "Documentation technique".
- Voici le schéma pour relier les deux Teensy :
Faites bien attention d'avoir une masse commune.
Une Teensy va commander le robot et être connectée à tous les capteurs, c'est sur elle que l'on va uploader le programme servant à asservir les moteurs et qui traitera les différentes données communiquées par les capteurs. La deuxième Teensy sera munie du shield audio et connectée à la carte SD contenant les divers messages vocaux. La Teensy "moteur" va relayer l'information des télémètres via un port digital en émission et un port analogique en réception vers la Teensy "audio", cette information permettra de piloter la diffusion des messages audio.
Le shield audio occupe la majeure partie des pins de la Teensy, seul un port purement analogique est disponible (le port A14), ce qui explique qu'on traite le signal logique envoyé par la Teensy motrice de façon analogique. En pratique, on envoie donc des 0 et des 1 et on reçoit un signal valant approximativement 0 ou 1024. En somme, il y a donc deux fils reliant les teensy, un pour relayer l'information des capteurs et l'autre pour assurer une masse commune.
Etape 1 : Mise en place des capteurs à ultrasons
Tout d'abord, il est nécessaire de mettre en place vos capteurs à ultrasons afin que votre robot puisse détecter un objet se trouvant devant lui. Les capteurs doivent être reliés à l'aide d'une liaison I2C à la Teensy. Voir "Partie commune" pour plus de détails.
Etape 2 : Emission du message vocal
Pour cette partie, il est nécessaire d'avoir la librairie arduino "Audio", qui est normalement téléchargée lors de l'installation du logiciel Teensyduino cependant il peut arriver qu'elle ne se soit pas bien installée. Copiez aussi quelques fichiers .wav sur votre carte SD.
Une fois la Teensy connectée au shield audio, téléversez le code arduino "Teensy audio.ino" et testez la lecture d'un unique fichier .wav ainsi que la connexion à la carte SD. Si des erreurs surviennent, cela peut être dû à un problème lors du chargement des librairies Audio et SD ou dû au micro-contrôleur branché dans le mauvais sens. Votre fichier .wav doit durer plus de quelques secondes (au moins 5s) sinon il n'a pas le temps d'être traité par la Teensy. Si tout fonctionne, téléversez le sketch "WavFilePlayer.ino" qui permet de lire différents fichiers .wav (mais pas de façon simultanée). L'insertion de votre code dans des boucles if() permet de ne diffuser vos messages vocaux que si la Teensy audio reçoit un signal de la Teensy moteur.
Robot opérationnel
- Voici la vidéo qui résume ce scénario :
Scénario 4 : Hermès
Ce scénario a été réalisé par Imane El Ouadi, Davy Elle Mbeng et Maxime Vaidis
Présentation du scénario
Ce dernier robot est un robot porteur de messages. Le robot, tout comme les autres, se déplacera le long du parcours tracé avec une ligne blanche. Il sera en quête d'un client. Lorsque, à l'aide, de ses capteurs à ultrasons, il détectera une personne, il se dirigera vers elle. Il se stoppera alors et demandera s'il s'agit d'un client ou d'un serveur via un écran et il dictera la demande. Il recevra la réponse via un clavier. La commande sera enregistrée dans une base de données situé sur le serveur de la Raspberry. Il repartira ensuite. Deux possibilités s'offrent alors : - s'il a obtenu 4 commandes de la part de clients, il se mettra en quête d'un serveur pour lui restituer ces informations. - s'il a au moins une commande et qu'il n'a pas trouvé d'autre client au bout de 5 minutes, il recherchera là encore un serveur pour lui donner la commande.
Documentation technique
Nous allons donc avoir besoin de trois cartes pour ce robot : Une carte Raspberry Pi2 qui va se charger de la partie communication internet (implémentation d'un serveur web) et deux cartes Arduino Teensy : Une pour la commande moteurs, le suivi de ligne, la detection d'obstacle par capteurs ultrasons et le suivi de personnes par caméra (traitement d'images) et une pour l'enregistrement et l’émission de messages audio via une audio-cape Arduino.
Etapes de réalisation
Etape 1 : Créer une carte SD Raspbian (OS linux Debian pour Raspberry) pour notre Raspberry Pi
1) Choisir une carte SD pour la Raspberry de 8GO ou plus
2) Télécharger la dernière version de la distribution Raspbian (Jessie) 2016-05-10-rasbian-jessie.zip: https://www.raspberrypi.or/downloads/raspbian/
3) Télécharger et installer le logiciel Win32DiskManager qui va nous permettre d'installer Raspbian Jessie sur la carte SD: https://sourceforge.net/projects/win32diskimager/files/latest/download
4) Décompresser 2016-05-10-rasbian-jessie.zip: on obtient alors une un fichier ".img".
5) Insérer la carte SD dans le port de l'ordinateur et lancer Win32DiskManager. Préciser le chemin du fichier ".img" représentant l'image disque de l'OS Raspbian Jessie puis cliquer sur "write". Attendre.
6) L'écriture finie, éjecter la carte SD: elle est prête à être utiliser.
Source: http://raspbian-france.fr/creez-carte-sd-raspbian-raspberry-pi-windows/
Remarque: l'image de la raspberry sur la SD carte sera de 3.5Go à peu près. Pour pouvoir utiliser l'intégralité des 8Go de la SD carte, il faut procéder comme suit:
1) Entrer la commande $ sudo raspi-config
2) Valider le menu "Expand Filesystem" et répondre oui à tout les cadres qui apparaissent.
3) Rebooter la raspberry
Etape 2 : Connexion à la Raspberry
Soit on connecte la Raspberry à un écran d'ordinateur et on la munie d'un clavier et souris pour travailler directement dessus.
Soit on travaille en session ssh avec un logiciel comme MobaXterm. On procède comme ci-dessous:
1) On effectue une liaison ethernet avec la carte.
2) L'ordinateur va adresser automatiquement une adresse ip du même sous-réseau que la liaison ethernet à la carte. Pour connaître cette adresse ip, on peut effectuer un scan dans le sous-réseau avec le
Dans ce logiciel on inscrit dans cible le nom du sous-réseau, on choisit Ping scan et on clique sur scan. L'adresse ip de tout les périphériques connectés à ce sous-réseau va s'afficher. Une fois l'adresse obtenu, on ouvre une session ssh.
3) La session ouverte, un login est demandé. Par défaut il s'agit de "pi". Ensuite le mot de passe est par défaut "raspberry".
Etape 3 : Mise en place du serveur et de la base de données Mysql
1) Tout d’abord, nous allons installer Apache, qui est le serveur web en tant que tel.
Avant d’installer le serveur, nous devons mettre à jour notre carte, soit en utilisant les droits administrateur en étant connecté en root, soit via la commande sudo. $ sudo aptitude update $ sudo aptitude upgrade Puis $ sudo aptitude install apache2 . Lors de l'installation du package, répondez "y" à la question. On donne ensuite des droits au dossier d’apache qui vous permettra de facilement administrer les sites. Pour cela, lancez les commandes suivantes : $ sudo chown -R www-data:pi /var/www/html/ $ sudo chmod -R 770 /var/www/html/ Une fois l’installation terminée, nous pouvons tester qu’Apache fonctionne correctement en nous rendant sur l’adresse de la Raspberry. En ssh, on utilise la commande suivante: $ wget -O verif_apache.html http://192.168.137.227 Cette commande va enregistrer le code HTML de la page dans le fichier « verif_apache.html » dans le répertoire courant. Vous n’avez donc plus qu’à lire le fichier avec la commande $ cat ./verif_apache.html Si vous voyez marqué à un endroit dans le code « It works! », c’est qu’Apache fonctionne.
2) Pour envoyer des requêtes à la base de données, il faut installer PhP via la commande suivante:
$ sudo aptitude install php5 . Lors de l'installation du package, répondez "y" à la question. Pour vérifier que PhP a bien été installé, vous allez en premier lieu supprimer le fichier « index.html » dans le répertoire « /var/www/html » $ sudo rm /var/www/html/index.html Puis créez un fichier « index.php » dans ce répertoire, avec cette ligne de commande $ echo "<?php phpinfo(); ?>" > /var/www/html/index.php Ensuite effectuez les commandes $ wget -O verif_apache.html http://192.168.137.227 et $ cat ./verif_apache.html . Si vous voyez marqué à un endroit dans le code « PHP Version », c’est que PhP fonctionne.
3) Nous allons installer MySQL. Pour ce faire il faut exécuter la commande suivante:
$ sudo aptitude install mysql-server php5-mysql Pendant l'installation, on vous demandera de choisir un mot de passe pour pouvoir se connecter à la base de données. Retenez le bien. Une fois MySQL installé, nous allons construire notre base de données. Pour cela, en mode root taper la commande $ mysql -u root -p Le mot de passe demandé est le même que celui que vous avez rentré lors de l'installation. Pour créer une base de données nommée "commande", entrer "create databases commande;" Sélectionner ensuite la base avec la commande "use commande" Pour créer la table, entrer la commande "create table fichier (id INT, nom VARCHAR(20), date DATE, int numero);" Vous pouvez la visionner avec la commande "describe fichier;" Le numéro "id" servira à classer les commandes reçu par le robot. Le "nom" contiendra le nom du fichier wave de la commande vocale effectué par le client. La "date" contiendra l'heure de la commande et "numero" le numero de la commande durant la soirée où le robot est mis en marche. Voilà, la base de données est prête à être utilisé.
Etape 4 : Mise en place de l'écran LCD
Pour installer les programmes régissant l'écran, il faut exécuter les commandes ci-dessous: $ cd /home/pi/Desktop $ sudo git clone https://github.com/DexterInd/GrovePi Une fois les commandes effectuées, aller dans le répertoire $ cd /home/pi/Desktop/GrovePi/Script puis mettre le script "install.sh" exécutable via la commande $ sudo chmod +x install.sh Exécuter le script ensuite avec la commande $ sudo ./install.sh . Répondez "y" si on vous le demande. A la fin de l'installation, la carte va redémarrer. L'écran lcd doit être branché à l'un des ports i2C. Il faut également vérifié que le module gérant l'i2C est dans le noyau. Effectuer la commande $ raspi-config Allez dans "Advanced Options", "I2C" puis "yes", "ok", "yes" et "ok".
Etape 5 : Ajout des logiciels pour micro usb et enceintes
1) Pour activer le son sur la prise Jack, il faut effectuer les commandes suivantes:
$ sudo apt-get install alsa-utils
Créer un fichier avec la commande $ sudo nano .bashrc dont on écrira les commandes
$ sudo modprobe snd_bcm2835 pour intégrer le programme au noyau
$ sudo amixer cset numid=3 1 pour ressortir le son sur la prise Jack
2) Pour utiliser le micro, brancher celui-ci sur le port USB. Vous n'avez besoin d'aucun driver pour que ça marche.
Taper la commande $ alsamixer Vous arriverez sur cette fenêtre:
Taper sur F6 puis sélectionner votre micro. Pour pouvez augmenter ou diminuer le volume via la barre verticale du milieu.
Etape 6 : Ajout des codes sources
Pour faire démarrer le programme du robot, vous aurez besoin des codes sources suivants: - Ceux en python pour l'écran : Fichier:Python12.zip
- Celui en C pour le programme principal : Fichier:MainHermes.zip
- Les fichiers audio : Fichier:Audio12.zip
Les fichiers en python doivent être mis dans le répertoire $ cd /home/pi/Desktop/GrovePi/Software/Python/grove_rgb_lcd/ Pour les autres, créer un répertoire $ mkdir /home/projet/ et y mettre les fichiers audio et programme comme ils sont présents dans le fichier zip.
Pour compiler le programme en C, taper la commande $ gcc MainHermes.c -o MainHermes 'mysql_congfig --cflags --libs' . L'instruction entre guillemets sert à faire le lien avec la bibliothèque de requête en C de MySQL. Les étapes principales du programme sont commentées dedans.
Pour lancer le programme au démarrage, il faut ajouter la ligne ci-dessous dans le fichier $ /etc/rc.local Après #By default this script does nothing, "/home/projet/MainHermes" Ce script s’exécutera juste après le boot de la carte en mode root.
Etape 7 : Connection Teensy via le port série
Brancher la carte teensy au port serie ci-dessous:
Dès que le robot aura détecter une personne, il enverra via ce port un message que lira le code C et le robot commencera alors à poser ses questions.

