IOT Manager

IoT Manager

Introduction

Dans le cadre de l’ER2, nous avons du réalisé un projet, l’objectif étant de réaliser une chorégraphie NAO/Projecteur MAC 250, la prise en main de Node-RED, ainsi que la communication MQTT.

Ce projet consiste à promouvoir l’IUT de Mulhouse et en particulier le département GEII lors des portes ouvertes ou d’autres manifestations afin d’attirer de nouveaux étudiants.

NAO_IOTManager


Sommaire

Le Projet

Cahier des Charges

Ressources

Mise en oeuvre

Vidéo

Bilan

Conclusion

 


Le projet

Le but principal de notre projet consiste à établir une communication entres différents objets connectés. Le tout assuré par un serveur interne utilisant le protocole MQTT. Pour ce faire nous utilisons les outils mis à notre disposition ainsi que les travaux déjà effectués les années précédentes.

Notre objectif est d’établir une liaison entre NAO et les projecteurs MAC 250,grâce au nouveau protocole. De plus nous devons assurés la liaison entre le serveur MQTT via Node-RED et les projecteurs MAC 250. Pour cela nous devons créer une interface graphique nous permettant de contrôler les projecteurs depuis différents appareils (ordinateurs, smartphones, tablettes). Comme dans les projets précédents, une chorégraphie  NAO / Projecteurs est exigée.

Notre groupe de projet est composé de 3 membres. Alexandre MEYER, chef de projet chargé de la communication et de la synchronisation, Célestin HAGER chargé de la chorégraphie du NAO et de la synchronisation, ainsi que Benoît WITZ chargé de l’interface graphique et de la synchronisation.

Photo_de_groupe_iot_manager

 


Cahier des Charges

Les communication entre les différents terminaux (NAO, Projecteurs MAC 250, Ordinateur, etc …) doivent être établie suivant différents critères. Ainsi le projet est décomposé en plusieurs tâches importantes à respecter :

  • Permettre à NAO de pouvoir contrôler les projecteurs lors d’un mouvement précis.
  • Permettre à l’utilisateur de pouvoir contrôler les projecteurs grâce à une interface graphique.
  • Utiliser un Serveur MQTT pour la communication entre les objets.
  • Réalisation d’une chorégraphie ludique et éthique.

     Les fonctions du projet

Diagramme_fonctionnel

     Bête à Cornes

Bête_à_corne

     Diagramme de GANTT

GANTT

     Budget

Pour ce projet, l’IUT de Mulhouse nous a mis a disposition du matériel de pointe mais  très cher. En effet les robots NAO coûtes 5000€ pièce. À cela , il faut encore ajouter les 2 projecteurs coûtant 5000€ l’un donc 10000€ pour la paire. Comme nous avons 4 NAO , le coût total du matériel s’élève à plus de 30000€. Nous avons à notre disposition une somme de 200€ fourni par l’IUT, on  mais ne nous l’avons pas utilisée.

     Contraintes Robots NAO

Les NAO sont des objets fragiles , nous devons donc faire attention à ce qu’ils ne fassent pas de mauvais gestes ou qu’ils ne tombent pas. De plus, leurs autonomies sont assez faible (notice constructeur : 1h30 , réel : 30 minutes) ce qui nous obligent à souvent les charger.

Nous devons aussi faire attention quand nous testons de nouvelles positions, les 14 à 25° ne permettant pas de le faire bouger comme un être humain.

Avec un poids de 5kg, nous devons rester vigilant quand nous lui faisons faire des positions nécessitant un bon équilibre (le mettre sur une jambe par exemple) , le risque étant bien sur une bosse, voir pire comme son pouce ou son bras qui se casse.

Une dernière contrainte est le fait qu’il faut que le réseau wifi soit perpétuellement allumé , sans quoi ne pouvons pas nous connecter à un robot ou encore réaliser la communication (il est possible d’utiliser un câble Ethernet mais cela est beaucoup trop encombrant et non pratique).

     Contraintes Projecteurs MAC250

La contrainte la plus importante est le fait qu’il faut toujours penser à alimenter correctement les projecteurs afin d’éviter d’éventuelles cours-circuits ou surchauffes prématurées.

Ensuite au niveau technique , il faut bien comprendre comment fonctionne les projecteurs et comment les contrôler.

Pour une question de sécurité , il faut faire attention à ne jamais se trouver sous un projecteur au cas où l’un des deux se décroche de la barre métallique et faire attention à ne pas éclairer une personne directement. Cela peut nuire à sa vue.

      Contraintes Environnement de travail

Afin d’assurer le bon déroulement de la chorégraphie , il faut veiller à ce que la piste soit bien propre et qu’il n’y est pas de bosses ou de trous là où NAO se défoule.

Au niveau de la salle , il ne faut pas qu’il fasse trop chaud , les batteries des NAO chauffant beaucoup plus vite dans un environnement étouffant pour eux (et nous).

Bien sur , il faut aussi éviter de projeter des liquides sur les objets électriques afin d’assurer le bon fonctionnent de ces derniers.

     Contraintes Logiciel de programmation (Spyder)

Il faut importer tout les fichiers nécessaires ainsi qu’installer toutes les librairies permettant le bon fonctionnement du programme. Ceci ne s’installant que sur un ordinateur fixe , il n’est pas possible d’exécuter le programme sur tout les pc juste en lançant le logiciel Spyder.


Ressources

     Le robot NAONAO_présentation

NAO est une des pièces maitresses de notre projet avec les projecteurs. NAO est un robot humanoïde développé par la société Aldebaran.

Il possède plusieurs caractéristiques, 14 à 25° de liberté de mouvements , 2 caméras ou encore 4 microphones pour la reconnaissance vocale. Pour le projet, nous utilisons surtout l’émetteur wifi afin d’envoyer les trames au projecteur et permettre ainsi à NAO de contrôler les projecteurs. Le récepteur wifi NAO permet à celui-ci d’être contrôlé sans fils et de recevoir les « ordres » depuis chorégraphe.

     Le Logiciel « Chorégraphe »

Afin de gérer les déplacements de NAO , nous utilisons le logiciel « Chorégraphe »(version 2.1.3), lui aussi développé par Aldebaran. Plutôt facile dans sa prise en main , il permet par l’intermédiaire de « blocs » de piloter NAO.

Lien pour débuter avec le logiciel (attention , c’est en anglais)  : tutoriel chorégraphe

Choregraphe_tout

     Le boitier Open DMX Ethernet (ENTTEC)

Il nous sert à convertir le protocole Art-net qui permet la communication avec les projecteurs et ainsi pouvoirs les contrôler à notre volonté. Il faut cependant au préalable alimenter le boitier avec une tension de 7V DC à l’aide d’un générateur de tension.

     Les Projecteurs MAC250

Caractéristique d’un projecteur :

  • Lampe à décharge à haut rendement, 250 Watts, 2000 heures
  • 12 filtres dichroïques (permet de rendre une couleur plus saturée) interchangeables
  • 7 gobos rotatifs et indexables/interchangeables
  • Prismes tournant interchangeables à 3 facettes
  • Mise au net motorisée
  • gradateur intégral
  • noir ultra rapide et effet stroboscopique
  • optiques traitées
  • verrouillage de tilt

À l’aide d’un programme python , nous pouvons contrôler les projecteurs à l’aide de la fonctions  «  »NAOPJ », »‘eteindProjo’,’2′ », hostname= »10.95.11.3″ » , celle-çi qui nous permet d’éteindre les 2 projecteurs.

Il existe aussi d’autres fonctions permettant de régler la mise au net, la couleur ( 14 choix de couleur comme le jaune ou encore le magenta), les gobos intégrés au projecteurs (10 gobos fixes,  7 gobos rotatifs et  un gobo personnalisé GEII).

Projecteurs

     Node-RED

Node-RED est une plateforme de gestion  graphique des IoT et permettant de « connecter »ensemble des objets connectés. C’est un projet open-source et gratuit et capable de fonctionner sur un raspberry pi, dans notre cas le raspberry pi 3. Nous utilisons Node-RED de telle sorte que nous pouvons diriger les projecteurs à l’aide d’une interface graphique . Pour exemple nous pouvons par changer les couleurs , éteindre un ou les projecteurs, changer de gobos, les déplacer selon un axe x et/ou y, etc.. Tout cela se fait par l’intermédiaire de node et des blocs fonctions (nous permettant d’écrire notre code relatif aux actions que nous voulons faire) que nous relions les uns aux autres. Afin de « sécuriser » lors des transmissions de trames , nous avons fait de telle sorte que nous devons d’abord lancer notre programme python et rendu la transmissions via Node-RED impossible quand NAO envoie des trames au boitier Open DMX Ethernet (lui même communicant avec les projecteurs).

 

Voici à quoi ressemble notre interface de programmation  ( au centre l’interface de programmation , à gauche les différents nodes , à droit la console de debug et ainsi que le bouton de déploiement permettant l’exécution du programme graphique).

Node_RED_Présentation

 

Lien vers le site de node-red (en anglais) : node-red

Lien vers un guide pour commencer avec Node-Red (en anglais) :  starter guide

 

      Le langage de programmation : Python

Python est un langage de programmation orienté objet conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Il existe  des bibliothèques qui aident le développeur à travailler sur des projets particuliers. Plusieurs bibliothèques peuvent ainsi être installées pour, par exemple, développer des interfaces graphiques en Python, faire circuler des informations au travers d’un réseau, dialoguer d’une façon avancée avec votre système d’exploitation, etc … Python est un langage de programmation interprété, c’est-à-dire que les instructions envoyées sont « transcrites » en langage machine au fur et à mesure de leur lecture, le défaut est qu’il faut installer Python sur le système d’exploitation que utilisé pour que l’ordinateur puisse comprendre le code.

     Le Logiciel de programmation : Spyder

Afin de programmer le code python permettant de contrôler les projecteurs , nous avons utiliser le logiciel Spyder. À gauche se situe l’environnement de programmation où l’on va écrire le code python. En bas à droite se trouve la console permettant de voir la bonne (ou non) exécution du programme. Pour lancer le programme , il faut le compiler puis appuyer sur Run (flèche verte).

Python_Présentation


Mise en oeuvre

Le schéma ci-dessous est un résumé de notre projet, il décrit les communication entre les différents outils connectés ainsi que les trois pôles important de notre projet. Nous allons voir à présent ces différentes caractéristiques.

Mise_en_oeuvre

     La Communication (MQTT)

Pour commencer parlons de la partie la plus importante de notre projet c’est à dire la communication entre NAO et les projecteurs. Pour cela nous utilisons le protocole MQTT, ce protocole MQTT est un service de messagerie TCP/IP simple et extrêmement léger dans le sens où des messages de toutes sortes peuvent être transmis. Les messages sont envoyés par des publieurs (les publishers) sur un canal appelé Topic. Ces messages peuvent être lus par les abonnés (les subscribers). Les Topics peuvent avoir une hiérarchie qui permet de sélectionner finement les informations que l’on désire. Pour plus de précisions sur ce protocole voici deux liens en anglais : https://www.ibm.com/developerworks/library/ws-mqtt/ / http://mqtt.org/documentation

Pour pouvoir utiliser ce protocole nous avons utilisé un Broker MQTT (serveur MQTT), il en existe pour tout type de langage de programmation. Ainsi dans notre cas le Broker est installé sur un Raspberry Pi 3 qui va faire office de Serveur.

Pour un exemple de communication on peut utiliser le serveur test d’un des plus grand Broker, test.mosquitto.org ,pour se faire il suffit d’installer une application sur son smartphone (ex: MyMQTT) et de se connecter à l’adresses donné précédemment ensuite de créer un topic puis de suivre ce topic.

Revenons à notre Projet, dans notre cas nous utilisons le protocole MQTT pour la communication entre NAO et le PC (programme Python) grâce au Raspberry Pi3 qui sert de Serveur MQTT. Pour se faire NAO envoie grâce à la liaison WIFI une trame MQTT qui va passer par le Serveur MQTT puis arriver sur le PC où le programme python va convertir le message en Art-net et l’envoyer vers le boitier ENTTEC qui converti cela en DMX (protocole Projecteur).

     NAO/Choregraphe (Bloc Bleu)

Pour la programmation de NAO nous utilisons Choregraphe, l’utilisation de ce logiciel est très simple, c’est un outils graphique et intuitif.

Choregraphe_tout

La photos ci-dessus présente notre programme final de la chorégraphie de NAO. On y retrouve plusieurs parties (Bleu, Rouge et Vert).

Partie Bleu NAO

Voici dons la partie Bleu l’ensemble de ces blocs chorégraphe décrivent la choregraphie finale de NAO pour ce faire nous sommes passé par plusieurs étapes décrite ci-dessous.

Partie Rouge NAO

Ici nous voyons dans le bloc rouge, il contient les différents blocs principaux qui décrivent chacun un mouvement précis de NAO (ex: se mettre debout,assis, sur un pied etc…), nous les avons tous programmé puis nous les avons utilisé pour la choregraphie.

Partie Verte NAO

Et enfin voyons précisément un blocs Chorégraphe (voir photo ci-dessous).

Choregraphie_bloc_python

Sur cette photos nous voyons l’exemple du bloc principal pour se mettre Debout, on constate qu’il est composé de deux sous bloc Debout et Python. 

Pour se faire chaque blocs principaux contiennent un bloc Python qui va permettre à NAO de publier sur un topic un message indiquant se que le projecteur doit faire. En effet la partie la plus importante du code sont les commande publish.single(… ,hostname=…) qui vont envoyer les message MQTT.

Par exemple : publish.single(« NAOPJ »,« ‘NAOSTART’,’eteindProjo’,’2′ »,hostname=« 10.95.11.3 »)

Cette commande va envoyer sur le topic NAOPJ  le message ‘NAOPJ », »‘NAOSTART’,’eteindProjo’,’2′ . Ici hostname=« 10.95.11.3 » veut simplement dire que le message va au serveur MQTT.

Au final chaque blocs principaux sont organisés de la même façon avec deux sous bloc un Python et un de Mouvement. (prérequis pour l’utilisation : installation de la librairie paho-mqtt 1.1 dans choregraphe).

     Raspberry Pi 3 /Node-Red (Bloc Rouge)

Voici le bloc fonction principal, puisqu’il gère toutes les entrées du dashboard, grâce à différents topics MQTT. Bien sûr lors de l’envoie des infos au programme principal il utilise notre sécurité afin que lorsque qu’un utilise les projecteurs il ne soit pas dérangé par NAO. Sur l’image ci-dessous , nous pouvons voir que nous avons utiliser des structures en « if ».  Dans l’exemple ci-dessous , un message est posté dans le topic « NAOPJ » , si les « switch » des  projecteur1 et  projecteur2 du dashboard sont à 1 ou 0, un message de leur état  va être envoyé sur le topic précédement cité cette valeur va être récupérer par le serveur mqtt puis l’information va être envoyé vers les projecteurs. Nous pouvons faire la même chose avec les couleurs par exemple. Chaque couleurs à son propre numéro. Si nous sélectionnons par exemple le vert , le numéro correspondant va être publié sur le topic « NAOPJ » et reçu sur le serveur mqtt puis envoyé vers les projecteurs qui vont prendre la couleur correspondante.

Fonction_Node-RED

Voici à quoi ressemble notre interface graphique (le dashboard) avec les différents outils de commande des projecteurs. Nous avons par exemple utiliser le node « switch » pour la sélection des projecteurs ou pour les éteindre/allumer  , le node »slider » pour le contrôle des axes x et y ainsi que la netteté ,  le node « liste déroulante » pour choisir la couleur et les gobos et enfin le node « bouton » pour la réinitialisation des projecteurs (les éteins et les remet en position x:y 0:0).

Node-RED_Dashboard

 

     Programme Python (PC)

Programme central du projet, il gère toutes les entrées MQTT qui viennent soit de NAO, soit de l’interface graphique et les convertit grâce au programme de l’an dernier en trames envoyé au boitier ENTTEC qui lui les convertira en DMX.

Python_Début

B Rouge Prog

Cette partie de programme permet d’initialiser les projecteurs lors de la connexion. (mise en position initiale)

 

B Jaune Prog

 

Deuxième partie importante du programme qui lorsqu’un message est reçu va le mettre en forme pour que la suite du programme puisse l’analyser et envoyer les bonnes informations  aux projecteurs.

 

B Vert Prog

 

 

Nous avons mis en place une petite sécurité qui fait en sorte que lorsque le programme est utilisé il ne puisse pas être perturbé par une autre entré. (ex : lorsque NAO envoie des infos , une personne depuis le dashboard ne pourra pas contrôler les projecteurs).

 

 

 

B Violet Prog

Pour cette dernière partie nous voyons un exemple de traitement des informations contenue dans le message pour les adapter à la fonction final qui est ici bougeProjo(channels,ip,x0,y0,PanProjo00,TiltProjo00,OP0,OP1,pas,vitesseSec,x1,y1,choixProjo) 

Pour la mise en forme des paramètres de la fonction nous transformons le format des variables pour pouvoir en extraire les informations voulu jusqu’à ce que nous pussions les réutiliser.

Ces fonctions proviennent des projets des années passées (dans notre cas du fichier fonctionProjecteur1 ).


Vidéo


Bilan

Pendant les heures de projet , nous avons rencontrés différents problèmes , les principaux venant des robots NAO.

Concernant les projecteurs , ils nous a fallu du temps pour comprendre comment les faire fonctionner, savoir les positionner comme nous le voulions, comprendre comment marche les paramètres des fonctions que nous utilisons pour les contrôler. Nous avons pu grâce à ce projet , comprendre comment fonctionnait les projecteurs utilisés par les professionnels ainsi qu’une introduction au langage python.

Concernant les robots NAO, nous avons rencontrés de multiples problèmes : robots qui ne se connectait pas ou qui se déconnectait en pleine séance de test, qui ne prenait pas en compte les positions faites, 2 NAO n’ont plus de pouce, robots instable qui pouvait perdre le contrôle et tomber à la renverse n’importe quand. De plus , l’autonomie des batteries étaient très faible  et les moteurs NAO chauffait très vite entraînant des problèmes dans nos différents tests (danse, communication NAO/projecteurs).

Un autre problèmes fut pour l’installation de l’interface graphique avec Node-RED, il a fallu faire une réinstallation complète du Raspberry Pi.  Nous avons du aussi comprendre comment fonctionnait Node-RED, comment créer des programmes et l’utilisation de chaque node mise à notre disposition.


Conclusion

Notre but lors de ce projet était de réaliser  une chorégraphie synchronisée alliant NAO et les projecteurs  et de faire communiquer ces deux derniers, cela a été compliqué et nous a pris beaucoup de temps  mais nous y sommes parvenus. Ce projets nous a permis d’en apprendre plus sur la programmation, sur comment fonctionne NAO mais surtout nous a permis de mettre un premier pas dans le monde des objets connectés. Nous remercions l’IUT de mulhouse et le département GEii de nous avoir mis à disposition le matériel nécessaire au projet, aussi cher soit-il.


Remerciement

Mme.KohleriutCouleur

M.Cudel

M.Wira

M.Roth

M.De Sabbata

IUT de Mulhouse

PicturalThings