Contrôle de bras robotique, 2014/2015, TD1

De Wiki d'activités IMA

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.

Schema 2015.jpg

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 :

Mli1 m.jpg

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 :

Mli2 m.jpg

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 :

Ets m.jpg

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 :

Sch creneau.JPG

Voici la paramétrisation de la fréquence du créneau :

Clk gen.JPG

Nous obtenons le créneau suivant (visualisation à l'aide de l'analyseur logique) :

Creneau.jpg

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 :

Ens mli.jpg

Et voici le schéma :

Cch mli.jpg

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.

Cablage modifier.jpg

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:

Code html.jpg

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.

Triangle.jpg

Si nous diminuons la fréquence, nous obtenons cette courbe, caractéristique de la charge/décharge du condensateur :

Triangle 2.jpg

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 :

Page web.jpg

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 :

Mli nano.JPG

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 :

Sch traitement.jpg

Voici quelques photos du montage :

Traitement1.jpg
Traitement2.jpg

Et voici le code permettant de faire fonctionner le tout :

Code traitement.jpg

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/serveur& //Lancement du serveur
   /home/projet/daemon& //Lancement du daemon

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.

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. De plus, l'archive est en cours de construction.

Nous avons aussi réalisés un 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. Il sera placé dans l'archive avec le reste des codes sources.