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

De Wiki de Projets IMA

Introduction

Le projet est divisé en deux parties:

- La partie électronique sera réalisée par Quentin Gruson et Michel Mikhael
- La partie informatique sera réalisée par Julien Joignaux et Loïc Delecroix 

Pour la partie informatique nous allons devoir réaliser une application web qui nous permet de contrôler un bras robotique depuis une page internet. Nous allons devoir coder afin de pouvoir faire la liaison entre cette page et le bras robotique. Une fois que les programmes seront réalisés et fonctionneront nous pourront les implanter dans la FoxBoard afin d'effectuer le contrôle à distance.


Première séance

Partie informatique

Au cours de la première séance nous avons pris connaissance des différentes commandes du robot en mode manuel depuis le terminal. Ensuite nous avons pu créer un début de page HTML dite de 'test' qui est fourni dans les annexes afin de pouvoir tester les fonctions de Websockets. Afin de réaliser le système des Websocket nous avons ajouté au code déjà existant les différentes commandes présentes dans la source du démon. Ceci nous permet donc maintenant, depuis la page HTML de test, d'envoyer des commandes du type M1+ ou M4- off et de les send (envoyer) directement au bras robotisé sans repasser par le terminal.

Nous avons également décidé d'intégrer une photo du bras à la page HTML en l'annotant comme ceci: - M1 - M2 - M3 - M4 - M5 - LED Puis en ajoutant une légende avec pour chacune de ces annotations un bouton + et un bouton - sur lesquels l'utilisateur cliquera afin d'effectuer les opérations voulues. En ce qui concerne la LED, elle ne peut être éteinte ou allumée seulement si une commande est envoyée: les boutons + et - de la LED n'existeront donc pas car ils doivent être alliés à une autre commande moteur.

Comme solution a ce problème de LED nous avons: - Proposer les boutons + et - pour la LED et programmer par exemple un mouvement de moteur en plus -> M5+ on M5+ off Nous allons essayer toutes ces idées lors de la prochaine séance.

Pagehtml.png

Partie électronique

Lors de cette première séance, nous avons étudié la partie électronique du sujet et nous nous sommes intéréssés à la configuration des capteurs de pression. Ces capteurs de pression délivrent une tension qui est proportionelle à la pression calculée. Or cette tension est un signal analogique que la carte incluse sur la Nanoboard ne peut traiter directement. Nous avons donc conclue qu’il serait indispensable de passer par un convertisseur analogique numérique (CAN).

Pour mettre en place ce convertisseur, nous avons eu comme idée de créer un signal de tension créé à partir d’une valeur numérique en passant par une PWM. L’idée est ici de modifier le rapport cyclique du signal grâce à une commande codée sur 8 bits. Afin de nous familiariser avec le matériel et le logiciel Altium nous avons fait en sorte de visualiser un signal PWM, ce qui nous a donné l’oscillographe ci-dessous. Nous avons également visualisé l’évolution du signal en fonction de la commande sous 8 bits et remarquer que la fréquence n’était pas modifié.


Oscillo.jpeg


L'idée est désormais de transformer ce signal en un signal de rampe dont la valeur moyenne sera directement lié à la commande numérique sous 8 bits. Il nous suffira ensuite de comparer cette valeur à la tension que l'on veut mesurer et de récupérer la valeur numérique correspondante dès que la tension PWM est supérieur à la tension du composant.

Deuxième séance

Partie informatique

Lors de cette 2e séance, nous avons continué à tester le bras robotique à l'aide des commandes que nous lui envoyons manuellement. Ensuite, nous avons continué à construire la page web qui permettra de contrôler le bras via le réseau. Nous avons donc complété le code Javascript de la page HTML, afin de faire apparaître différents boutons qui permettent de bouger les différents moteurs.

Une fois ce travail fini, nous nous sommes attaqués à une autre partie du problème, que nous avons trouvé assez difficile : le port série. En effet, nous devons récupérer les valeurs du potentiomètre et des 3 accéléromètres présent sur le bras robotique, et les afficher sur la page web. Nous avons donc travaillé sur le fichier donné en exemple, qui permet d'envoyer un octet sur le port série, et d'en récupérer 8. Cependant, le code qui était présent sur la carte ARDUINO n'était pas le même que celui auquel nous nous attendions. Nous avons donc du modifier le code de façon à ce qu'il nous renvoie bien 8 octets après que l'on en ait envoyer un. Cette partie nous a occupé pendant une bonne partie de la séance. Nous avons également commencé à rechercher comment modifier le fond d'une page internet, bien que cette partie est purement esthétique, et donc facultative.

A la fin de la séance, nous avons également modifié le programme arduino déjà présent et nous l'avons téléversé afin de pouvoir récupérer les valeurs des capteurs par la suite.


Partie électronique

Lors de cette séance, nous avons mis en place la partie numérique sous Altium puis l'avons testé à l'aide de la Nanoboard.

A l'aide d'un compteur 8 bits, nous avons généré le signal PWM puis avons réglé les fréquences des générateurs d'horloge.

Le schéma de la partie numérique est le suivant :

600px


L'idée est désormais de filtrer le signal PWM (port HB2) afin d'obtenir un signal de rampe, pour cela, nous utiliserons un simple filtre RC passe bas. Ensuite, nous devrons comparer la valeur moyenne de ce signal avec la tension du capteur de pression pour obtenir le résultat de la comparaison sur le port HA2 (nous avons songé à utiliser un AOP en comparateur simple ou en comparateur à Hystérésis). Cela nous permettra de récupérer la valeur numérique directement visible sur les LEDS via le FD8B qui va enregistrer les 8 bits correspondant au signal analogique dès que la tension PWM sera égale à la tension du capteur.

Nous réaliserons la partie analogie lors de la prochaine séance.

Troisième séance

Partie informatique

Durant cette séance nous avons réussi à finir (ou presque) le projet. Tout d'abord nous avons réinitialisé la FoxBoard en supprimant les programmes du groupe précédent qui ne nous étaient pas utiles. Ensuite nous avons copié sur cette FoxBoard tous nos fichiers utiles au bon fonctionnement de notre projet grâce à la commande: "scp "nomdufichier" cheminFoxBoard"

Tous les fichiers .c ont été copié dans /root/server: webscoket.c port_serie.c demon.c serial.h puis nous avons compilé tous les .c

Tous les fichiers en rapport avec la page HTML ont été copié dans /var/www : index.html envoi.js jquery-2.1.3.min.js robot-372938.jpg jquery.js

Une fois la FoxBoard bien initialisée, nous sommes passée à l'étape qui nous posait le dernier problème, la récupération des valeurs de capteurs: Nous avons du modifié notre websocket.c, en créant un tableau de 12 cellules car il y a le potentiomètre et 3 accéléromètres, chacun d'entre eux sont référencés par un entier (61,62,63,64) puis par 2 mots de 16 bits. Nous ignorons donc les cases 0,3,6,9 qui correspondent aux références et la case 1 qui correspond au mot de poids fort du potentiomètre qui vaut toujours 0xff. Ensuite le but était de multiplier le mot de poids fort par 256 puis de lui ajouter celui de poids faible. Une fois ceci fait, nous devions afficher les 4 valeurs sur la page HTML comme un 'retour des valeurs', ce que l'on a réussi à faire. Il faut cependant rafraîchir la page à chaque mouvement du robot afin de recevoir les nouvelles valeurs.

Lors de l'initialisation de la FoxBoard nous n'avons pas eu à installer les bibliothèques car ceci était déjà fait.


Comment tester notre application?

Afin de tester le bras robotique commandé à partir de la page HTML, rendez-vous à cette adresse: http://172.26.79.3/

Les boutons vous serviront à commander le bras à distance.

Le tableau réfère les différentes valeurs des accéléromètres et du potentiomètre. (Appuyez sur F5 pour rafraîchir)