Un bras pour RobAIR

De fablab
Aller à : navigation, rechercher

Informations générales

Encadrants: Jérôme Maisonnasse, FabMSTIC

Ce projet est pour des groupes de 2 à 4 étudiants intéressés par le développement d'une application robotique.

Contexte

La robotique de service est en plein essor. Les robots de téléprésence en particulier se développent très vite car des besoins de dialoguer à distance et en mobilité sont importants pour les professionnels (économie et gain de temps) et pour les personnes à mobilité réduite en suite d'handicap. Bien que l'offre des robots commercialisée se développe, il reste encore de serieux challenges pour les utiliser dans nos contextes (Ecoles, Université, Hopitaux, etc.). Le challenge que l'on vous propose est de permettre à un robot de téléprésence opensource et openhardware de prendre l'ascenseur seul. Le défi consiste à pouvoir appuyer sur les boutons de l'ascenseur, d'entrer et de ressortir de façon autonome.

Sujet

Sur la base d'un robot de téléprésence existant et fonctionnel, nous vous proposons de créer un bras motorisé très simple pour appuyer sur les boutons d'ascenseur. Pour cela, vous aurez à faire de la vision par ordinateur (QR code recognition) et une application simple de navigation autonome pour entrer et sortir le robot. Vous pourrez découvrir opencv, ROS, et des outils de fabrication du fabMSTIC pour faire la mécanique du bras.


Problématique

RobAIR est un robot de télé-présence commandé à distance via le réseau Wi-Fi du bâtiment. L'objectif du projet est de permettre à RobAIR de prendre l'ascenseur seul. Pour atteindre cet objectif, il faut répondre à deux questions :

  • Comment RobAIR se déplace sachant que le réseau Wi-Fi n'est plus disponible une fois que la cabine d'ascenseur se ferme.
  • Comment contrôler l'ascenseur sachant que RobAIR ne dispose pas de bras ou autre dispositif capable d'appuyer sur les boutons d'ascenseur


Description d'un ascenseur

Les principaux élément composant un ascenseur sont les suivants :

  • La cabine dans laquelle l'utilisateur monte pour effectuer sont voyage d'un étage à l'autre.
Intérieur d'un cabine d'ascenseur
  • Le panneau de contrôle qui regroupe un ensemble de bouton à l'intérieur de la cabine pour sélectionner l'étage où l'on souhaite se rendre, actionner l'alarme en cas de panne, afficher des informations…
Exemple de panneau de contrôle
  • Le bouton d'appel. Situé à chaque étage, il permet à l'utilisateur d'appeler la cabine.
Exemple de bouton d'appel
  • Le local technique qui contient la machinerie, l'alimentation électrique et les élément de contrôle du système. Ce local est accessible uniquement par les techniciens chargés de l'entretien et des réparations.


Réflexion préliminaire et recherche de solutions possibles

Solution 1 : Installer un boîtier de commande dans le local technique de l'ascenseur

Cette première solution qui nous paraît être la plus efficace et la plus simple, consiste à installer un boîtier dans le local technique de l'ascenseur. Ce boîtier, connecté au réseau Wi-Fi du bâtiment, permet à la personne qui pilote RobAIR, de communiquer directement avec le contrôleur de l'ascenseur via une liaison série (ou autre) en utilisant un protocole propre au ascenseurs. Via ce module on peut donc appeler l'ascenseur à l'étage souhaité, définir l'étage destination, suivre la position courante de la cabine et d'autres informations utiles pour l'utilisateur.

Nous avons trouvé peu d'informations sur Internet, nous avons donc contacté un ascensoriste pour savoir ce qu'il est possible de faire, le solutions existantes, les protocoles utilisés…

Voilà un résumé de l'entretien que nous avons eu avec l'un d'entre eux :

« Le marché des ascenseurs est très concurrentiel, aucune entreprise ne communique car les informations sont confidentielles. Il y a trois constructeur principaux, chacun développe son propre matériel avec des protocoles de communication propriétaire. La tendance est au développement d'application mobiles, d'ascenseur connecté et de solution de supervision (pour l'exploitation), il n'est donc pas envisageable d'avoir des informations sur les protocoles utilisés. La société contactée nous a également indiqué qu'elle avait collaboré avec une entreprise pour un projet similaire [1], projet pour lequel elle a développé et fourni la carte qui permet de contrôler ses ascenseur via Wi-Fi. »

La personne contactée nous a également fourni des informations qui pourraient être utiles par la suite :

« L'installation d'une borne Wi-Fi au sommet de la cage d'ascenseur permet de bénéficier du réseau à l'intérieur de la cabine. Enfin, si nécessaire, il est possible de tirer un câble Ethernet jusqu'au panneau de commande (dans la cabine)».

Après avoir effectué des recherches complémentaires, il existe bien un protocole ouvert pour les ascenseurs, CANopen-Lift mais comme il n'est pas utilisé par les plus grand constructeurs il est inutile pour notre projet.

Cette solution n'a pas été retenue.


Solution 2 : Boîtier de commande avec des relais contact sec

Cette solution, est une variante de la première et peut se décliner suivant deux configurations. Dans ce cas, plutôt que communiquer directement avec le contrôleur d'ascenseur via une liaison série, on utilise des relais contact sec en parallèle des boutons du panneau de commande, dans le local technique ou dans la cabine, pour envoyer le signal d'appui sur un bouton.

Pour la première variante, l'installation est identique à celle de la solution 1. On place un boîtier connecté au réseau Wi-Fi du bâtiment, dans le local technique, et le pilote de RobAIR lui envoi ses ordres.

Pour la seconde variante, on installe le boîtier dans la cabine à coté du panneau de commande (ou intégré si possible). Dans ce cas la communication se fait directement avec RobAIR en utilisant un réseau local type Bluetooth. Cette deuxième méthode a l'avantage de donner de l'autonomie à RobAIR mais nécessite l'installation de boîtiers additionnels sur chaque bouton d'appel (à chaque étage) pour que RobAIR puisse appeler l'ascenseur.

Cette solution, bien que séduisante aussi, n'a pas été retenue, car elle nécessite d'avoir une autorisation pour tester et installer le dispositif. De plus, il peut avoir des problèmes d'assurance dans le cas ou le système endommagerait l'ascenseur.


Solution 3 : Bras motorisé installé sur RobAIR

Comme suggéré dans le sujet, la troisième solution, consiste à mettre au point un bras motorisé pour appuyer sur les boutons d'ascenseur. En complément de ce bras, il est nécessaire de mettre au point une application de navigation autonome pour entrer et sortir de l'ascenseur ainsi qu'un système de vision par ordinateur pour reconnaître les boutons et guider le robot.

Cette solution est intéressante car elle permet à RobAIR d'utiliser les ascenseurs de manière autonome, et ce quel que soit le bâtiment où il se trouve. Mais après avoir étudié très attentivement cette piste, nous l'avons abandonné pour plusieurs raisons expliquées ci-après.

Tout d'abord, concernant la vision par ordinateur :
Échantillon de boutons d'ascenseur existants
  1. La vision par ordinateur nécessite d'avoir un système dédié (RaspberryPi) utilisé seulement pour cette application. De plus même s'il existe beaucoup d'outils, ça reste une technique difficile à mettre en oeuvre dans notre cas.
  2. OpenCV dispose de tous les outils nécessaires pour la lecture de QR code et reconnaissance de boutons... La difficulté réside dans la variété des type de boutons, il existe une multitude de formes, de positions, et de configurations .Ceci rend difficile la reconnaissance des boutons, des numéros et empêche l'utilisation de QR codes.
  3. Pour les QR codes, la plupart du temps, il n'y a pas suffisamment de place pour les coller et il est impossible d'avoir une position relative au bouton, identique pour chaque type de bouton. Nous avons envisagé de créer notre propre format de code (type QR code) mais les contraintes précédentes empêchent de le mettre en œuvre.
  4. Les conditions d'éclairage dans les ascenseurs ne sont pas toujours idéales, ce qui peut rendre aléatoire la vision par ordinateur. On ne peut pas se permettre de faire des erreurs à ce niveau là car le robot peut se retrouver coincé dans la cabine pour une durée indéterminée, obligeant une personne extérieure à intervenir.

D'un point de vu mécanique :

  1. Le positionnement des boutons est tellement différent d'une cabine à l'autre qu'il est très difficile de mettre au point une solution simple pour appuyer sur les bouton (La hauteur mini et maxi est variable et il existe également des panneaux de commande horizontaux incliné à 45°…).
  2. En configuration verticale « classique », la hauteurs des boutons peut atteindre 1m20 voire plus, ce qui oblige à avoir un bras capable d'aller plus haut que la tête de RobAIR, d'avoir une caméra dédié pour cette application.
    Nous avions réfléchi à la création d'un bras simple basé sur une structure fixe, sur laquelle un chariot, supportant une caméra et un « doigt », se déplace verticalement. Le problème d'une telle structure fixe réside dans le fait qu'elle gène la vision de RobAIR (caméras de tête).
Bras.jpg
  1. Dernier point non négligeable, nous n'avions pas à disposition tout le matériel nécessaire à la construction du bras (courroie crantée, roulements, équerres...).

D'un point de vue technique :

  1. Le positionnement de RobAIR dans la cabine est difficile car la taille de cabine est variable, la position du panneau de commande change (coté droit, coté gauche, centré, à coté de la porte...).
  2. Bien que RobAIR soit maniable, nous avons remarqué que si on s'approche trop près de la parois de la cabine, la tablette gène la rotation sur place à 360°.
  3. Enfin, il peut y avoir des ascenseurs avec entrée et sortie sur une face différente, ce qui complique les choses.


Conclusion de la réflexion préliminaire

Après avoir exploré toute ces solutions, ce que nous pouvons retenir de cette phase exploratoire, c'est qu'il est difficile de trouver une solution idéale. En compilant les différentes propositions faites, en oubliant le côté autonome et avec plus de temps, on pourrait installer d'une borne Wi-Fi dans la cage d'ascenseur et mettre au point un bras 3 axes (ou plus) avec le système de commande correspondant pour le pilote. Ceci permettrait de garder le contrôle sur le robot à l'intérieur comme à l'extérieur de la cabine afin de pouvoir gérer l'appui sur les boutons.

Par manque de temps et de moyen, nous avons finalement adopté une autre solution que nous allons décrire dans le chapitre suivant.


Solution retenue

Explication du concept

L'idée que nous avons choisi de mettre en oeuvre est simple; On ajoute sur le bouton d'appel de l'ascenseur, à chaque étage, un boîtier qui contient un mécanisme permettant de déclencher l'appui à distance.

Lorsqu'on souhaite déplacer RobAIR d'un étage à un autre :

  1. On appuie à distance sur le bouton de l'étage courant pour appeler l'ascenseur.
  2. Lorsque la porte de l'ascenseur s'ouvre on conduit RobAIR à l'intérieur de la cabine.
  3. On appuie à distance sur le bouton de l'étage où l'on souhaite emmener RobAIR.
  4. Quand l'ascenseur est s'arrête et que la porte s'ouvre, la connexion Wi-Fi est rétablie. On peut donc reprendre le contrôle de RobAIR
  5. On vérifie alors qu'on est bien au bon étage, grâce à la caméra. Si c'est le cas on sort RobAIR de l'ascenseur sinon on continue jusqu'à arriver à l'étage voulu.


Description du boîtier

Pour mettre en oeuvre notre idée nous avons construit un prototype. Notre boîtier comporte :

  • Un bouton pour que les utilisateurs habituels puissent continuer à appeler l'ascenseur manuellement, même en cas de panne de notre système.
  • Un Servomoteur avec un doigt qui appuie sur le bouton
  • Une carte Adafruit HUZZAH ESP8266 pour actionner le Servomoteur et communiquer via Wi-Fi.


Vue 3D du boîtier contenant les différents éléments décrits ci-dessus Vue de face du boîtier contenant les différents éléments décrits ci-dessus

Conception mécanique

Le système comporte différents éléments qui ont été imprimés en 3D ou découpé au laser.

Fichier svg pour la découpe de la boite
Tout d'abord, il y a la boite qui contient l'ensemble des composants. Elle mesure 8cm de coté par 5cm de hauteur et à été découpée dans du PMMA transparent de 3mm d'épaisseur.

Pour la découpe, nous nous sommes basés sur un modèle de boite standard (fichier au format svg), et nous avons ensuite rajouté les différents éléments spécifiques.

Notre boite comporte donc :

  • Un trou circulaire, de 3cm de diamètre, sur le couvercle supérieur pour y loger le bouton poussoir.
  • Un trou sur le fond de la boite qui pourra être de forme et de taille variable pour s'adapter aux différents types de bouton d'appel. Le boite étant fixées par de l'adhésif double face il est important d'avoir une bonne surface de contact avec le support.
  • A l'intérieur, il y a une plaque qui sert de support au Servomoteur, afin que celui-ci soit bien positionné par rapport au bouton. Nous avons utilisé pour notre prototype, un Servomoteur de type SG90; La taille du boitier est donc adapté à ce modèle là, il faudra éventuellement prévoir de modifier les dimensions en cas d'utilisation d'un autre matériel.


Ensuite, il y a tous les éléments imprimés en 3D, en commençant par le bouton poussoir. Celui-ci est composé de deux parties :

  • La bague, fixée sur le couvercle, elle même composé de deux élément qui viennent s'insérer l'un dans l'autre, de part et d'autre du couvercle. La bague ainsi installée sert de guide pour le poussoir.
Bagues.png
La partie plus longue (à gauche) s'enfile par dessus le couvercle et la partie courte (à droite) par dessous.


  • Le poussoir lui aussi composé de deux parties. Les parties plus larges servent d'arrêt pour empêcher que le poussoir ne sorte de sont guide. La partie moins large qui va appuyer sur le bouton d'ascenseur, elle peut être rallongée au besoin en fonction du type de bouton d'appel, on peut aussi prévoir un ressort de rappel.
Bouton.png
Ces deux éléments sont ajustés et doivent être emmanchés de force, il faut donc prévoir une remplissage suffisant lors de l'impression pour ne pas les casser au moment de l'assemblage. Comme vous pouvez le remarquer, nous avons dessiné des créneau sur la partie femelle pour faciliter l'insertion.


Les autres éléments importants de notre conception sont les bras. Il servent à rallonger le bras d'origine fournis avec les Servomoteurs pour pouvoir appuyer correctement sur le bouton d'appel. Ces éléments ont aussi été imprimé en 3D. Comme pour la bague et le bouton poussoir, cet élément est composé de deux coques qui s'emboîtent l'une dans l'autre.

Bras dessus.png Bras dessous.png
A gauche la partie externe du bras (ou dessus), à droite la partie interne (côté Servomoteur).

Ces deux éléments forment une une coque qui prend en sandwich la tige d'origine. Ce système a été mis au point pour allonger la tige d'environ un centimètre (pour atteindre le bouton d'appel), et faire cohabiter les deux modes d'appui. Ainsi chaque demi coque passe d'un coté de la tige du bouton poussoir sans la toucher.

En cas de modification de ce mécanisme, il ne faut surtout pas allonger d'avantage le bras car la force délivrée par le Servomoteur deviendrais insuffisante.


L'ensemble des pièces ont été dessinées grâce au logiciel libre Freecad, vous trouverez dans cette archive les fichiers nécessaires à la réalisation de la partie mécanique.


Matériel électronique

Nous avons utilisé un carte Adafruit HUZZAH ESP8266 qui comporte un microcontrôleur avec une connexion WIFI. la carte en soit est un outil de developpement très puissant et qui devient de plus en plus répandu parmi la communauté des programmeurs et des amateurs d’électronique, tout cela pour les fonctionnalités qu'elle offre (connexion au WIFI en tant que client ou serveur, Ports d'entrés sorties pour commander des actionneurs ou interfacer avec d'autres microcontrôleurs). Dans le cadre de notre projet on a utilisé l'IDE d'Arduino pour écrire l'application qui gère l'envoi des bonnes requêtes au serveur web et la gestion du mouvement du servo moteur. Pour expliquer brièvement le principe de l'environnement de travail, la carte HUZZAH d'Adafruit contient le microcontrôleur d'Espressif qui est le cœur de la carte, le code inséré dans ce microcontrôleur est écrit sur l'IDE d'arduino utilisant la librairie ESP8266Wifi qui contient un certain nombre de fonctions permettant par exemple de créer un serveur web local, d'envoyer des requetes HTML et plein d'autres.

Contrôle des servo-moteurs:

le contrôle des servo-moteurs se fait par le biais de la librairie Arduino crée pour la tache, cette librairie a l'avantage d'être disponible et fonctionnelle sur l'ESP8266 aussi bien que sur les cartes Arduino. Le principe de contrôle des servo moteur est que le microcontrôleur envoie un signal à Modulation de Largeur d'Impulsion (PWM) pour positionner le servo moteur au bon angle, dans notre cas on a du ajuster l'angle de position d'appui du servo moteur pour ni appuyer trop fort sur le bouton de peur d'endommager un des composants du projet ou de bloquer le bouton d’ascenseur, on a donc adopté une approche expérimentale pour déterminer précisément l'angle approprié, 18 dégrées pour le cas des boutons du bâtiment de l'ENSIMAG, mais on pense que cet angle variait selon la forme , l'inclinaison du bouton et la profondeur d'appui, donc une légère modification sur le code est nécessaire lors de l'installation du dispositif sur un autre site. Les servo moteurs utilisés sont SG90 ayant un couple de 9g


Pour ce qui concerne l'étape de développement on a branché l'esp via un cable ft232 qui permet d'émuler un port série sur l'usb et donc on arrive à interfacer la carte esp 8266 avec l'ide arduino.

Principe du Code

Initialisation:

-Creation de serveur web sur le port 80. -Association du servo moteur à la bonne GPIO. -Connexion sur le réseau wifi. -Envoi des informations à propos du seveur web sur le port série pour débogger.

Boucle de fonctionnement:

-Attente de connexion d'un client : navigateur web ouvrant la page web de l'esp en saisissant l'adresse IP de ce dernier. -Vérification de la valeur envoyé par le navigateur pour gérer l'appui sur le boutton d'ascenceur. -Envoi de la page présentant l'interface d'appel de l'ascenceur.

Améliorations envisagées:

possibilité de se connecter a wifi campus, cette fonctionnalité requiert que l'est puisse ouvrir la page d'authentification au réseau puis envoyer via une requête POST html le login et le mot de passe afin de se connecter proprement au réseau wifi, on a réussi a implémenter cette portion du code on arrive donc a avoir accès à internet depuis l'esp en se connectant sur wifi campus. Le souci qu'on a eu c'est que sur le réseau wifi campus on ne peut se connecter depuis qu'un seul client avec le meme login et en se connectant avec deux logins differents on n'arrive pas a accéder à la page de l'esp, on a donc abandonné cette idée. Une deuxième amélioration pourrait être de rajouter la possibilité de détecter l'arrivée de l’ascenseur avec l'effet sonore ou lumineux présent sur la plupart des systèmes d’ascenseur déjà en place. Et pour finir on a pensé a rajouter un système de récupération de l'adresse ip via un broadcast sur toutes les machines connectées su le réseau dont parmi elles est présent le serveur de ROBAIR, une solution plus rudimentaire a été téstée permettant de renvoyer l'adresse IP via mail mais cette solution n'avait pas énormément d'utilité vu que l'adresse IP de l'ESP n'a pratiquement pas changé depuis les premiers tests.