Contrôle de bras robotique, 2014/2015, TD1
Sommaire
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.
A la fin du projet, une archive sera mise à la disposition des professeurs. Cette archive contiendra tous les codes de notre projet (page HTML, script CSS, script du daemon, script du serveur WEBSOCKETS, etc ...)
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 (5V/µ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é monopolisé 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éutilisé le daemon du bras, réalisé un prototype de la page html en utilisant la bibliothèque jquery et testé 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 informatique
Nous avons mis en page la page web de contrôle du bras. Voici le résultat :
Nous avons également créer une communication série entre la Foxboard et l'Arduino afin de récupérer les valeurs des capteurs. Voici une partie du code utilisé dans la Foxboard:
Et le code de l'Arduino:
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.
Quelques explications s'imposent ...
Nous filtrons le signal PWM issu de la Nanoboard afin de récupérer sa valeur moyenne. Nous comparons cette valeur à la tension du capteur. Ensuite, le résultat de la comparaison est envoyé dans un CAN ADC0831CCN 8 bits à transmission série. La liaison est paramétrée à 9600 bauds. Nous avons choisi la transmission série pour éviter de devoir repasser par la nanoboard pour convertir la donnée transmise en parallèle vers une donnée transmise en série. Voici le schéma fonctionnel :
Voici quelques photos du montage :
Et voici le code permettant de faire fonctionner le tout :
Dernière semaine : Semaine du 9/3 au 13/3
Durant cette dernière semaine de projet, nous commençons à mettre en forme les codes (commentaires, etc...) et à réfléchir sur la configuration de la FoxBoard.
Pour configurer la FoxBoard, il faudra :
- Modifier le fichier /etc/network/interfaces de la FB pour lui affecter une adresse IP sur le réseau de l'école. Ce fichier aura la forme (supposée) suivante :
gedit /etc/network/interfaces
//Accès au fichier
auto eth0 iface eth0 inet static address 172.26.79.10 (10 : numéro de la machine) netmask 255.255.240.0 gateway 172.26.79.254 dns-nameservers 193.48.57.34
- Modifier le fichier /etc/rc.local de la FB. Ce fichier est lancé au démarrage de celle-ci et contient toutes les commandes à effectuer lorsqu'elle est mise en service. Nous pensons adopter les commandes suivantes :
gedit /etc/rc.local //Accès au fichier rc.local
/home/projet/daemon& //Lancement du daemon /home/projet/server& //Lancement du serveur
Le & signifie qu'on exécute les programmes en continu.
Ainsi, au démarrage de la FB, le démon et le serveur seront compilés et lancés. Si nous arrivons à disposer de la salle informatique le 12/3, nous pourrons transférer les fichiers sur la FB, la configurer, et tester. Nous transférerons les fichier sur la FB à l'aide de la commande scp:
scp <fichier local> root@172.26.79.10:<chemin>
Au 12/3, nous avons réussi à faire fonctionner le bras en plaçant le serveur sur la FB et en la configurant telle que précisé précédemment. Une vidéo de démonstration sera mise ultérieurement.
Le programme réalisant la communication série avec l'Arduino et récupérant les valeurs des accéléromètres afin de les afficher sur la page Web sera placé dans l'archive avec le reste des codes sources.
Mode d'emploi pour la Foxboard
Pour accéder a la page web pour contrôler le bras, se placer a l'adresse : http://172.26.79.10/application_bras.html Les fichiers web sur la Foxboard se trouvent dans le répertoire /var/www Les fichiers de commandes se trouvent dans le répertoire /server
Archive
Voici une archive contenant :
- La page HTML pour l'application de contrôle du bras
- Les scripts JS réalisant l'envoi des commandes (Websockets et JQuery)
- La feuille de style CSS pour l'application
- Le code "port-serie.c" qui récupère toutes les valeurs des accéléromètres et du potentiomètre
- Le code "capteurs.ino" pour l'Arduino afin de communiquer les valeurs des accéléromètres et du potentiomètre
Fichier:Archive RCP.zip