Contrôle de bras robotique, 2013/2014, TD2
Introduction
Le projet de contrôle du bras robotique a été le projet confiés à quatre élèves IMA du groupe de TD n°2, durant l'année 2014: Jean Wasilewski, Pierre Letousey, Mehdi Zeggai et Timothée Teneur.
Le projet vise à contrôler un bras robotique, ainsi qu'à en récupérer la valeurs des capteurs en temps réel.
Il se découpe donc en deux parties. Une première partie informatique, ayant pour objectif de créer une interface Web permettant de gérer les mouvements du robot.
Et une deuxième partie, électronique quant à elle, visant à assurer la communication entre les capteurs et l'interface Web.
Matériel utilisé
Pour parvenir à cet objectif, il a été nécessaire d'utiliser le matériel suivant:
- Un bras robotique controlable par USB
- Une FoxBoard
- Un Arduino Mega (temporaire)
- Une carte électronique de liaison entre l'Arduino et les capteurs
- Une NanoBoard
Principe de fonctionnement
Dans un premier temps, pour la partie informatique, la NanoBoard a été remplacé par un Arduino Mega.
L'Arduino a servi à effectuer les fonctions que la NanoBoard sera amener à faire dans la partie électronique.
Le code source de l'Arduino est disponible ici.
Le principe de fonctionnement est le suivant, l'utilisateur donne des ordres au bras, celui-ci les effectuent, et retourne toute les informations d'état.
Et cela, en cliquant sur des boutons généré par un code HTML hébergé sur la FoxBoard, affiché par un serveur Web lighthttpd.
Ces pages Web vont ordonner au bras de bouger, à travers l'interface USB-Série du bras robotique.
Elle vont aussi, en meme temps, récupérer les valeurs des capteurs, à l'aide de l'Arduino Mega et de la carte de liaison.
Pour la seconde partie du projet, la carte Arduino a été abandonnée au profit d'une de la NanoBoard.
L'objectif recherché est le suivant, pouvoir réaliser un circuit capable de remplacer l'ensemble Aduino Mega et Carte de liaison.
La partie informatique
L'objectif de cette partie est de créer une interface homme-machine permettant de controler le bras robotique, tout en récupérant les données des différents capteurs.
Frameworks
Afin de réaliser l'interface utilisateur, ce projet utilise le framework [Bootstrap], qui permet en peu de lignes de créer un environnement simple et clair.
Ce framework utilise, pour son fonctionnement interne, le framework [jQuery].
Quant aux requetes pour récupérer les capteurs, le site Web utilise une fonction permettant de lire le contenu d'un fichier mis en paramètre, dont le code source est disponible ici.
Une fois ces frameworks installés, le système suit le schéma suivant.
Interface
Pour l'interface, il a été décidé que l'utilisateur ne pourrait se déplacer que sur cinq pages :
- La page d'accueil
- La page "A propos de" (qui ne sera pas détaillé après puisque qu'elle ne contient pas de contenu apportant quelque chose au projet)
- La page du mode manuel
- La page du mode séquentiel
- La page du mode automatique
La page d'accueil
Dans cette page, l'utilisateur a le choix entre les différents mode de fonctionnements du robot, accessible à l'aide de boutons.
La page contient une barre de navigation, qui sera commune à toute les pages, permettant de revenir à la page d'accueil, ou d'accéder à la page "à propos de".
La page du mode manuel
Le mode manuel à été le premier mode à être créer, puisqu'il a permis de vérifier que tous les autres modes fonctionnaient correctement (autant la partie électronique que les modes automatique et séquentiel).
Il se compose 12 boutons ordonnées dans un tableau, chaque bouton permettant de tourner un moteur dans un sens ou l'autre, ou de serrer ou dé-serrer la pince, ou encore d'allumer ou d’éteindre la LED.
Chaque bouton contient la propriété javascript [onClick], qui effectue une action javascript lors d'un clique sur le bouton.
Plus précisément, chaque bouton a dans sa propriété [onClick] la fonction cmd, avec comme paramètre, la commande à envoyer au serveur UDP contrôlant le robot
La page du mode séquentiel
Le mode séquentiel permet à l'utilisateur d'effectuer des déplacements prédéfinis.
Ce mode offre 6 options à l'utilisateur:
- Aller au point A
- Aller au point B
- Aller au point C
- Aller à la position de repos
- Serrer la pince
- Dé-serrer la pince
Il a été choisi de ne pas re-proposer à l'utilisateur de contrôler la DEL.
La position de repos est définis par les paramètres suivant:
- Le moteur de la base est tel que la base et le bras forment un angle de 180°
- Le premier moteur est réglé pour que le bras et la base forment un angle de 90° (sens des aiguilles d'une montre)
- Le deuxième moteur est réglé pour que l'avant-bras et le bras forment un angle de 90° (sens trigonométrique)
- Le troisième moteur est réglé pour que la pince et l'avant-bras forment un angle de 0°
- La pince n'est ni dé-serrer ni re-serrer, elle reste dans son état précédent
Lorsqu'un utilisateur clique sur une de ces options (une des 4 positions), le bouton appel la fonction goToPoint.
Cette fonction effectue 4 étapes, une pour chaque moteur, et chaque étape réalise les mêmes actions.
- Lecture des valeurs de l'accéléromètre associé au moteur concerné (à l'aide de serial.php)
- Rotation du moteur pour que la valeur lu se rapproche de la valeur de consigne
- Si on passe au moteur suivant, sinon on repars à la première action
La valeur est une constante, valant 10 pour tout les moteurs, sauf pour la base, ou elle vaut 5.
Cette valeur correspond à l’imprécision maximale autorisée pour un moteur donné.
Cette imprécision est due à la fois à l'imprécision des moteurs, et aussi de l'accéléromètre.
La valeur maximale recevable étant 1023, au maximum, nous avons une imprécision de 0,98%, ce qui est acceptable.
On notera que pour "Aller à la position de repos", le robot effectuera une opération supplémentaire avant toutes les autres étapes.
Le robot relévera le bras avant d'effectuer les autres étapes, pour éviter de traîner sur la maquette une éventuelle pièce.
La page du mode automatique
Le mode automatique repose essentiellement sur les fonctions du mode séquentiel, et du mode manuel.
Sur cette page, l'utilisateur choisit un point de départ, et un point d'arrivée, puis clique sur le bouton "GO".
Ce bouton appelle la fonction goToYFromX, qui effectuera les opération suivantes:
- Appel de la fonction goToPoint, avec comme paramètre le paramètre source de goToYFromX
- Appel de la fonction cmd, pour serrer la pince
- Appel de la fonction goToPoint, avec comme consigne "Aller à la position de repos"
- Appel de la fonction goToPoint, avec comme paramètre le paramètre destination de goToYFromX
- Appel de la fonction cmd, pour dé-serrer la pince
La troisième étape permet d'éviter de traîner les pièces sur la maquette.
Ici, l'utilisateur n'a plus accès aux valeurs des capteurs, cette page est destinée au utilisateur lambda, désirant juste déplacer une pièce d'un point X à un point Y.