Contrôle de bras robotique, 2014/2015, TD1
Sommaire
Personnes participant au projet
ROJ Thomas
PIEKACZ Geoffrey
CASIER Corentin
Introduction
Ce projet SC a pour but de manipuler un bras robotique via une interface web afin de faire bouger des blocs.
Au travers de ce projet, nous utiliserons des appareils tels que des accéléromètres, la NANOBOARD (FPGA), la FOXBOARD (système embarqué) ou encore de l'ARDUINO (Microcontrôleur).
Le projet est composé d'une partie informatique et d'une partie électronique.
La partie informatique sera composée de l'interface web maniée par l'utilisateur, d'un serveur websocket sur la foxboard qui assurera le contrôle des moteurs à partir de l'interface web et l'envoi des informations des capteurs vers cette interface.
La partie électronique a pour but de récupérer et de traiter en partie les informations des capteurs avant de les envoyer à la foxboard.
Cette partie est censé être assurée par la nanoboard et de l'électronique analogique, mais en pratique nous utiliserons une carte Arduino Mega.
Séance 1 : 13/02/2015
Partie Informatique
Pour cette partie, nous avons fortement étudié le cahier des charges et le fonctionnement des différents code sources mis à notre disposition. Nous avons réfléchis à la manière dont nous allons traiter les informations issus de l'ARDUINO. Nous avons décidés de créer dans notre code un vecteur qui serait utilisé pour stocker les différentes positions que pourrait atteindre le bras. A l'aide de ces positions de référence, nous pourrons ainsi déterminer les mouvements simples que devrait effectuer le bras pour attraper la pièce et aller la positionner à un autre endroit.
La séance suivante, nous essaierons de manipuler manuellement le bras en compilant le code source du démon et en y utilisant la fonction de contrôle manuel que nous avons repérés en l'étudiant.
Partie électronique
Dans un premier temps, nous avons longuement étudié le cahier des charges, afin de bien comprendre ce qui nous était demandé.
Puis, nous avons commencé à réfléchir sur l'architecture de notre générateur de signaux MLI (Modulation à Largeur d'Impulsion ou PWM).
Nous avons penser mettre en place l'architecture suivante :
Il se présente sous la forme d'un amplificateur opérationnel utilisé en mode comparateur. Nous comparons un signal triangulaire à une constante. Si le signal triangulaire dépasse la constante, le signal de sortie Vm passe à +Vcc (ou 1 logique), sinon le signal passe à 0.
Nous remarquons que si nous faisons varier la constante, les largeurs du signal de sortie grandissent, faisant varier le rapport cyclique et la valeur moyenne. Finalement, le comportement serait le suivant :
Nous comptons créer le signal triangulaire à l'aide de VHDL s'il nous est impossible d'implémenter un générateur de signal triangulaire à l'aide du logiciel Altium Designer.
Par la suite, nous avons réfléchis à la partie analogique, c'est-à-dire la comparaison de nos signaux aux valeurs réelles des capteurs pour réaliser l'asservissement du bras. Nous pensons réaliser l'architecture suivante :
Le filtre RC est utilisé ici comme intégrateur. A sa sortie, nous récupérons la valeur moyenne du signal de MLI. En faisant varier le signal de MLI, nous modifions son rapport cyclique donc sa valeur moyenne. Nous comparons ensuite cette tension à la tension issu de capteur pour récupérer un nouveau signal MLI.
Séance 2 : 20/02/2015
Partie électronique
J'ai commencé par utiliser la nanoboard pour générer un signal créneau. Voici le schéma :
Voici la paramétrisation de la fréquence du créneau :
Nous obtenons le créneau suivant (visualisation à l'aide de l'analyseur logique) :
Ensuite, nous sommes passés sur la réalisation de notre signal triangulaire qui servira pour notre MLI. Comme nous ne pouvons pas le générer grâce au FPGA, nous optons pour passer à de l'electronique analogique. Nous avons utilisés, pour la simulation : - 1 Générateur de fonctions à fréquence variable - 1 oscilloscope - 1 alimentation stabilisée +25/-25V Le signal triangulaire sera obtenu avec un signal créneau que nous ferons passer par un intégrateur à Amplificateur Opérationnel. Nous avons choisis l'amplificateur opérationnel LM318 pour notre montage au vu de sa grande bande passante (15Mhz) et de son faible Slew Rate (5µV/s). Voici la vue d'ensemble de la paillasse :
Et voici le schéma :
Malheureusement, nous avons rencontrés quelques problèmes avec la réalisation de notre signal triangulaire. Le montage est à revoir.
La séance suivante, nous finirons notre montage analogique, et nous finirons la partie FPGA (image du rapport cyclique du signal de MLI pour l'envoyer à la foxboard).
Partie Informatique
Dans un premier temps nous avons modifier le câblage du potentiomètre du robot.
Le reste de la séance a été monopoliser afin d’appréhender le daemon du bras, le serveur websocket et pour mettre à jour les diverses bibliothèques utilisées.
Séance supplémentaire : 26/02/2015
Partie informatique
Nous avons finalisé notre serveur Websocket, réutiliser le daemon du bras, réalisé un prototype de la page html en utilisant la bibliothèque jquery et testeé la commande du bras à l'aide de l'application html.
voici le code de la page html:
Et voici la vidéo de démonstration : Media : demo.3gp
Partie électronique
Nous avons continués de réfléchir sur la génération du signal triangulaire. Le problème était le suivant : Pour que le montage qui, de base, est à un montage inverseur, fonctionne en intégrateur, il nous fallait travailler après la fréquence de coupure du montage. Nous avons donc opté pour la solution suivante : avoir les bonnes valeurs de R et de C pour avoir la plus petite fréquence de coupure possible afin que le montage travaille toujours en intégrateur.
Séance 3 : 27/02/2015
Partie électronique
Durant cette séance, nous avons poursuivis notre génération de notre signal triangulaire, que nous avons obtenu en envoyant un créneau de 50Hz à l'entrée du montage.
Si nous diminuons la fréquence, nous obtenons cette courbe, caractéristique de la charge/décharge du condensateur :
Même pendant les vacances, on travaille ...
Partie électronique
Notre montage purement analogique n'ayant pas abouti, nous avons pris un autre chemin : Générer le signal PWM avec la Nanoboard et traiter le signal avec de l'analogique.
Le principe de la génération du signal de MLI est le suivant : Nous avons 2 compteurs, un qui compte à une fréquence f, et l'autre qui compte (ici par exemple) à f/256. Nous comparons les 2 valeurs issus du compteur et nous sortons cette valeur qui est notre signal de MLI. Le schéma est le suivant :
Ensuite, nous traitons ce signal ... Pour la partie analogique, n'ayant pas de nanoboard dans nos chambres pour générer le signal MLI, nous utilisons un Arduino UNO. Celui ci nous servira a générer le signal de MLI, à générer la clock pour le convertisseur et à recevoir et lire les données issues du convertisseur pour vérifier le bon fonctionnement. Voici quelques photos du montage :
Et voici le code permettant de faire fonctionner le tout :