Contrôle de bras robotique, 2012/2013, TD3

De Wiki de Projets IMA
Révision datée du 26 juin 2013 à 12:15 par Rex (discussion | contributions) (Evaluation informatique et électronique)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


Vidéo HD


Evaluation informatique et électronique

Gestion de projet / rédaction Wiki

  • Informatique : Rapport de type chronologique, très complet, bien rédigé, pas de coquilles. Vous auriez pu mieux utiliser les possibilités de mediawiki. Une excellente vidéo de présentation de la partie informatique (attention, le bras est instrumenté avec 3 accéléromètres et une boussole , non pas avec 4 accéléromètres). Note : 100%.
  • Electronique : rapport bien détaillé avec illustrations, le synoptique est insuffisamment renseigné mais a le mérite d’exister. En revanche, les schémas électriques (numérique et analogique) sont bien décrits. Note : 95%.

Note : 97.5%.

Test fonctionnels

  • Sous-système. Note : 100%.
    • Sous-système informatique : Pas d'interconnexion avec la nanoboard mais le sujet ne le permet pas trop. Le système informatique marche au-delà de ce qui était attendu, le bras est correctement commandé mais surtout le retour des accéléromètres est illustré sur un schéma dessiné dynamiquement. Note : 120%.
    • Sous-système électronique : Sous système quasi-fonctionnel (qq bugs). Présentation d’une caractéristique de transfert (valeur CAN versus tension capteur). Note : 95%.

Qualité de la réalisation

  • Informatique : Note : 95%.
    • procédure de test : Aucun fichier de description du système. Test sur le banc d'essai par les élèves OK. Test par l'enseignant OK (après avoir lancé le serveur série et le serveur du bras). Note en l'état 80%.
    • pages HTML et Javascript : Page HTML tout à fait correcte (image du bras et icônes pour déplacer le bras), un très joli CSS d'accompagnement de la page HTML. Excellent code Javascript avec dessin du schéma du bras en Canvas. Note 120%.
    • scripts PHP ou programmes C : Scripts PHP et C corrects. Note 100%.
    • installation sur FoxBoard : Implantation effectuée, application web fonctionnelle, pas de lancement des serveurs au démarrage de la FoxBoard. Note 80%.
  • Electronique : Note : 100%.
    • qualité de la réalisation :Conception correcte. Des compteurs basiques (sans entrée de chargement) auraient suffi pour cette conception. Note : 100%.
    • tests autonomes :Plusieurs tests avec analyseur logique et oscilloscope ont été entrepris. Note : 100%

Bilan

Note finale : 100% => 20/20.

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-Query

- Installation du paquetage libusb-1.0-0-dev mais il était déjà installé.

- Analyse et exécution du programme C fourni dans les annexes : demon.c

- Dans var/www/bras, création de la page commande.php

- Test des différentes commandes vers le robot en MODE_MANUAL puis en MODE_UDP :

  • Recherche des commandes à envoyer au robot dans le demon.c pour le MODE_MANUAL puis test : envoi de m1+, m1-, m2+, m2-, m3+...

La photographie ci-dessous montre la partie de code de demon.c utilisée pour faire cette manipulation.

Partie de code dans demon.c fournissant les commandes à envoyer au robot en mode manuel


  • Compilation du fichier demon.c en mode UDP avec la ligne de commande adéquate : gcc demon.c -o demon -Wall -l usb-1.0 -DMODE_UDP

Lancement du binaire par ./demon et envoi des commandes depuis la barre d'adresse de l'interface Web. Par exemple, pour actionner le moteur M1 et le faire bouger vers la droite on a lancé : localhost/bras/commande.php?cmd=A L'ensemble des commandes (a, A, b, B...) a été fourni par le fichier demon.c :

Partie de code dans demon.c fournissant les commandes à envoyer au robot en mode UDP


- Création d'un fichier HTML commande_bras_robot.html afin de commencer à créer l'interface Web pour la gestion du robot : création de boutons et des commandes associées,

Partie de code dans commande_bras_robot.html permettant la création des boutons et les commandes associées afin d'agir sur les moteurs du robot


- 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 3 valeurs des 3 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.

-> Pour la dernière séance du 11/04, il conviendra de réaliser les points suivants :

  • 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).
  • Convertir ces valeurs pour les rendre interprétables par l'utilisateur.
  • Terminer l'interface Web par l'ajout de schémas de variation des angles des accéléromètres.
  • Terminer également 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é :
Partie de code dans commande_bras_robot.html permettant la récupération des valeurs des capteurs puis le découpage et enfin l'affichage


  • Création de champs texte sur l'interface web pour l'affichage des valeurs et de titres qui apparaîtront :
Partie de code dans commande_bras_robot.html permettant la création des champs texte et l'affichage


- 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.

Aperçu de l'image du robot et des boutons associés


- 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.

Schéma tutoriel

-Prise de connaissance de la partie électronique du sujet.

Principe général de fonctionnel inter-mini-projet
Schéma général du CAN

- 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.

Schéma de la partie numérique/FPGA
Schéma de la partie numérique avec explication/FPGA

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.

Schéma de la partie analogique
Test de la partie analogique

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.

Système complet

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 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 :

Adaptation en tension du capteur de pression/jauge de contrainte

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 :

Test 4 : résultat 2D


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 :

CAN de 0-254


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".

Attendu
Inattendu

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 :

Test 1 : résultat 26 ou 27
Test 2 : résultat 8E
Test 3 : résultat 8E
Test 4 : résultat 2D


> CONCLUSION ________________________________________________________________________________________________________________________________________________________________________


Ce projet de trois séances nous a donc permis de mieux appréhender la filière systèmes communicants. Il nous a permis de travailler simultanément sur deux matières : l'électronique et l'informatique. Nos connaissances acquises tout au long de cette année ont pu être mises à profit dans la réalisation de ce projet. En ce qui concerne la partie informatique, nous sommes parvenus à réaliser l'interface Web permettant la gestion du bras de robot par l'envoi de commandes et la réception des valeurs des capteurs. Des difficultés ont été rencontrées au niveau de la configuration de la FoxBoard mais aussi pour la récupération puis la conversion en valeurs compréhensibles des valeurs des capteurs. Au niveau du développement Javascript, nous avons également rencontré quelques difficultés. Ce projet nous a permis d'apprendre à utiliser des démons mais également à créer des images animées avec <canvas>.

Au niveau de l'électronique, nous avons été amenés une nouvelle fois à utiliser le logiciel Altium Designer, logiciel déjà utilisé au semestre 5. Nous avons pu nous intéresser à la conversion analogique numérique avec la génération de signaux PWM.