Contrôle de bras robotique, 2012/2013, TD3
Sommaire
Evaluation informatique et électronique
Gestion de projet / rédaction Wiki
- Informatique :
- Electronique :
Note .
Test fonctionnels
- Sous-système.
- Sous-système informatique :
- Sous-système électronique :
Qualité de la réalisation
- Informatique : Note .
- procédure de test :
- pages HTML et Javascript :
- scripts PHP ou programmes C :
- installation sur FoxBoard :
- Electronique : Note .
- qualité de la réalisation :
- tests autonomes :
Bilan
Note finale :
Rapports des élèves
> INTRODUCTION ________________________________________________________________________________________________________________________________________________________________________
Dans le cadre des projets systèmes communicants de troisième année, nous avons été amenés à réaliser une interface Web permettant le pilotage d'un bras robotique. Les différents bras du robot devront pouvoir être commandés depuis l'interface Web. Il conviendra également de récupérer puis d'afficher les valeurs des capteurs afin de donner une idée précise de la position du bras.
> INFORMATIQUE ________________________________________________________________________________________________________________________________________________________________________
28/03 : Séance 1 > Découverte et analyse du projet, envoi d'informations au robot
- Installation de la librairie J-Querry
- Installation du paquetage libusb-1.0-0-dev mais était déjà installé.
- Analyse et exécution du programme C : demon.c
- Test des différentes commandes vers le robot (m1+, m1-, m2+...) en MODE_MANUAL puis en MODE_UDP.
- Début de création du site web de gestion du robot :
- Dans var/www/bras, création de la page commande.php
- Création d'une page HTML commande_bras_robot.html avec création de boutons et des commandes associées,
- Ajout d'une image du robot pour le site web, ajout du fichier jquery.js pour gestion des commandes.
03/04 : Séance 2 > Récupération des valeurs des accéléromètres sur l'interface Web
- Création de nouveaux fichiers à partir de codes existants.
- Création d'un fichier C permettant la configuration de la liaison série : serial.c avec inclusion de serial.h - Récupération des informations des accéléromètres via la liaison série et affichage dans un premier temps sur le terminal (création du fichier C lportserie.c).
- Identification des différents accéléromètres du robot à partir des valeurs reçues par la liaison série (quelques difficultés à réaliser cette partie).
- Récupération des 4 valeurs des 4 accéléromètres sous la forme d'une chaine de caractères qui sera ensuite utilisée dans l'interface Web.
- Création du dossier cgi-bin sur le serveur. - Modification du fichier commande_bras_robot.php pour affichage des valeurs des accéléromètres sur le site Web.
- Création de nouvelles fonctions display et charger pour récupérer les valeurs à partir du programme C.
- A la fin de la séance les valeurs sont bien affichées sur le site Web.
-> Il convient maintenant de trouver un moyen pour récupérer une à une ces valeurs à partir de la chaine de caractères (grâce à l'utilisation d'une fonction
- javascript (recherches sur internet). -> Il conviendra de convertir ces valeurs pour les rendre interprétables par l'utilisateur.
-> Il reste à terminer l'interface Web par l'ajout de schémas de variation des angles des accéléromètres.
-> Il faudra également terminer le placement des boutons aux endroits adéquats par rapport à l'image du robot sur le site Web.
11/04 : Séance 3 > Finalisation de l'interface Web, interprétation des valeurs récupérées, configuration de la FoxBoard, tournage de la vidéo
- Réalisation d'un dessin animé html avec <canvas> représentant le bras du robot. Ce dessin animé permettra de visualiser directement sur l'interface Web les mouvements du bras du robot.
- Apport de nouvelles fonctionnalités à l'interface Web :
- Récupération une à une des valeurs des différents accéléromètres : modification de commande_bras_robot.html
- Conversion des valeurs brutes en valeurs interprétables par l'utilisateur et affichage de ces valeurs sur l'interface Web. Voici le code source réalisé :
- Inclusion des boutons permettant de commander le robot à proximité des moteurs. Ces différents boutons (de la forme d'une flèche) permettent d'envoyer une impulsion aux moteurs dans un sens ou dans l'autre.
- Tournage de la vidéo finale du projet :
- Présentation générale du projet, axes suivis pour mener à bien sa réalisation, difficultés rencontrées.
- Démonstration : Pilotage du robot depuis les flèches présentes sur l'interface Web et observation des valeurs reçues par les accéléromètres.
- Configuration de la FoxBoard :
- Réalisation de la configuration IP afin que la carte FoxBoard puisse communiquer avec notre ordinateur (poste 13). On choisit donc cette adresse IP : 172.26.79.13
- Modification du fichier /etc/network/interfaces par les lignes précisées dans le tutoriel (configuration de la carte Ethernet).
- Utilisation du logiciel minicom
- Modification de la source des paquetages : modifications au fichier /etc/apt/sources.list
- Installation de la bibliothèque GD avec la commande apt-get install php5-gd. On doit réaliser des scripts CGI-BIN en C donc le paquetage cgilib a dû être installé.
- Connexion de la FoxBoard au PC et transfert des fichiers réalisés sur la FoxBoard avec la commande scp.
CONCLUSION : L'interface de type Web 2.0 est donc au final constituée d'une image du bras avec des boutons situés à côté des moteurs permettant de leur envoyer des impulsions. Des champs texte ont été inclus afin de contenir les valeurs provenant des divers capteurs de position. Une requête Ajax est générée vers le script CGI-BIN écrit en C afin de récupérer périodiquement les valeurs des divers accéléromètres. Ces valeurs sont ensuite affichées dans les champs texte prévus sur l'interface Web.
> ELECTRONIQUE ________________________________________________________________________________________________________________________________________________________________________
Description du système : Partie électronique
Ce système est constitué de deux sous-systèmes communiquant par le protocole série ; une carte FoxBoard et une carte FPGA incluse sur la NanoBoard.
Ce projet a pour but de mesurer la position de la boussole et la pression appliquée sur un capteur de pression. Les mesures se basent sur la conversion analogique-numérique de signaux.
La conversion analogique-numérique développée dans ce projet est basée sur la génération de signaux PWM (Pulse Width Modulation, ou Modulation de Largeur d'Impulsions) puis par leur filtrage (filtre passe-bas) permettant d'obtenir une tension continue variable représentant la valeur numérique.
Le capteur de pression donne une tension continue proportionnelle à la pression à laquelle il est soumis. Ce module est composé de deux parties : une partie implémentée dans la carte FPGA de la NanoBoard et une partie analogique réalisée sur une plaque d'essais.
28/03 : Séance 1 : Découverte et analyse du projet
-Prise en main de la Nanoboard grâce au tutoriel fourni.
Explication du fonctionnement :
Nous pouvons constater qu’en laissant votre doigt appuyé sur le bouton poussoir SW0, Le compteur compte à partir de la valeur fixée par le bus AOUT. En relâchant votre doigt, le compteur est en mode chargement.
-Prise de connaissance de la partie électronique du sujet.
- Recherche d'une solution mettre en place une PWM autrement qu'avec le "circuit tout fait" d'Altium.
- Objectif prochaine séance : Début de la conception de la partie FPGA.
03/04 : Séance 2 : Test de la partie FPGA
La partie implantée dans le FPGA a pour fonction de générer 2 signaux PWM dont la tension moyenne (après filtrage) varie de zéro volt jusqu'à la tension maximale des composants.
Le signal PWM est un signal de fréquence constante, mais dont on change le rapport cyclique grâce à une donnée de commande codée sur huit bits.
Ainsi, la donnée de commande correspond indirectement à la valeur moyenne du signal PWM.
-Partie FPGA: finie.
256*f=3,6312 MHz donc f=14,184 kHz
- Objectif prochaine séance : Conception de la partie analogique
11/04 : Séance 3 : Test de la partie analogique
La partie analogique permet de comparer la valeur moyenne du signal PWM (signal issu de la NanoBoard) avec la tension provenant des composants. Tant que la valeur moyenne du signal PWM (réglée par la donnée de commande V0) est inférieure à la tension provenant du composant, la sortie du comparateur est à 0V.
Lorsque la valeur moyenne du signal PWM devient supérieure ou égale à la tension du composant, la sortie du comparateur passe à +Vcc. À ce moment-là, la donnée de commande correspond à la représentation numérique de la tension du composant (conversion analogique-numérique).
L’écriture dans la mémoire ne se faisant que sur un seul octet, on mémorise le résultat de la Conversion Analogique Numérique dans une bascule de type D flip-flop version bus 8 bits.
On souhaite avoir une fréquence de coupure bien inférieure à 14,184 kHz ici R=47 kOhm et C= 15 nF. (au moins 10 dix moins, grâce à une valeur bien inférieur nous aurons peu de problème en ce qui concerne la comparaison)
Afin de simplifier la vérification du fonctionnement, nous avons utilisé l'analyseur logique.
-Test final de l'ensemble.
On peut voir :
D8 la PWM à rapport cyclique variable
En jaune la sortie du circuit RC
D10 V_0 Compare
D14 le signal de "flag" destiné à la communication série RS 232.
Et en blanc le bus avec le résultat de la CAN visible juste après un front mont montant sur V_0 compare (ici D10)
L'adaptation du capteur de pression/jauge de contrainte :
En fesant des mesures de résistance nous obtenons, 2,9 kOhms quant on appuie dessus et l'infinie sinon, on adopte donc le montage suivant :
On determine R2 = 4 kOhms pour avoir la tension de sortie entre 0 et 2.9 Volts.
Nous avons fait quelques points mais pas assez, voici un aperçu peu précis de la caractéristique de notre CAN :
Voir ci dessous, pour l'explication de la valeur non constante sur le BUS : (Quelques remarques et critique sur la solution)
On remarquera que l'on ne peut convertir que de 0 à 254, car D14 ici et le flag or nous n'avons pas le bon mot sur le bus :
Quelques remarques et critique sur la solution :
Nous avous pus constatez quelques problémes notamment sur le fait que la valeur sur le BUS "n'arréte pas de changer".
Ce probléme aurai pus étre regler avec la modification de la partie analogique en utilisant un étage de comparaison à cycle d'hystérésis. (un hystérésis de +0,3 Volt aurai suffit.)
Suivit d'un simple comparateur pour s'assurer que la tension peut étre supporter pour la nano-board.
Aussi on remarque que notre solution peut convertir une ten tension comprise entre 0.4 et 2.9-3.0V Volts.
Il faut donc rajouter un étage pour adapter la tension à convertir en 0-5 Volts pour qu'elle se situe entre 0.4 et 2.9-3.0V Volts celui-ci sera en amont de V_0.
Et quelques Quick Print montrant que cela fonctionne :
> CONCLUSION
________________________________________________________________________________________________________________________________________________________________________