Contrôle de bras robotique, 2013/2014, TD2 : Différence entre versions

De Wiki de Projets IMA
(La partie électronique)
m (Correction de quelques fautes d'orthographe)
Ligne 29 : Ligne 29 :
 
Le code source de l'Arduino est disponible [[Contrôle de bras robotique, 2013/2014, TD2, Code Source Arduino Mega|ici]].
 
Le code source de l'Arduino est disponible [[Contrôle de bras robotique, 2013/2014, TD2, Code Source Arduino Mega|ici]].
  
Le principe de fonctionnement est le suivant, l'utilisateur donne des ordres au bras, celui-ci les effectuent, et retourne toute les informations d'état.
+
Le principe de fonctionnement est le suivant : l'utilisateur donne des ordres au bras, celui-ci les effectue, et retourne toutes les informations d'état.
  
 
Et cela, en cliquant sur des boutons généré par un code HTML hébergé sur la FoxBoard, affiché par un serveur Web lighthttpd.
 
Et cela, en cliquant sur des boutons généré par un code HTML hébergé sur la FoxBoard, affiché par un serveur Web lighthttpd.
Ligne 35 : Ligne 35 :
 
Ces pages Web vont ordonner au bras de bouger, à travers l'interface USB-Série du bras robotique.
 
Ces pages Web vont ordonner au bras de bouger, à travers l'interface USB-Série du bras robotique.
  
Elle vont aussi, en meme temps, récupérer les valeurs des capteurs, à l'aide de l'Arduino Mega et de la carte de liaison.
+
Elle vont aussi, en même temps, récupérer les valeurs des capteurs, à l'aide de l'Arduino Mega et de la carte de liaison.
  
  
Ligne 41 : Ligne 41 :
 
Pour la seconde partie du projet, la carte Arduino a été abandonnée au profit d'une de la NanoBoard.
 
Pour la seconde partie du projet, la carte Arduino a été abandonnée au profit d'une de la NanoBoard.
  
L'objectif recherché est le suivant, pouvoir réaliser un circuit capable de remplacer l'ensemble Aduino Mega et Carte de liaison.
+
L'objectif recherché est le suivant : pouvoir réaliser un circuit capable de remplacer l'ensemble Aduino Mega et Carte de liaison.
  
  
 
==La partie informatique==
 
==La partie informatique==
L'objectif de cette partie est de créer une interface homme-machine permettant de controler le bras robotique, tout en récupérant les données des différents capteurs.
+
L'objectif de cette partie est de créer une interface homme-machine permettant de contrôler le bras robotique, tout en récupérant les données des différents capteurs.
 
===Frameworks===
 
===Frameworks===
 
Afin de réaliser l'interface utilisateur, ce projet utilise le framework [[http://getbootstrap.com Bootstrap]], qui permet en peu de lignes de créer un environnement simple et clair.
 
Afin de réaliser l'interface utilisateur, ce projet utilise le framework [[http://getbootstrap.com Bootstrap]], qui permet en peu de lignes de créer un environnement simple et clair.
Ligne 51 : Ligne 51 :
 
Ce framework utilise, pour son fonctionnement interne, le framework [[http://jQuery.com jQuery]].
 
Ce framework utilise, pour son fonctionnement interne, le framework [[http://jQuery.com jQuery]].
  
Quant aux requetes pour récupérer les capteurs, le site Web utilise une fonction permettant de lire le contenu d'un fichier mis en paramètre, dont le code source est disponible [[Contrôle de bras robotique, 2013/2014, TD2, Code Source fonction file|ici]].
+
Quant aux requêtes pour récupérer les capteurs, le site Web utilise une fonction permettant de lire le contenu d'un fichier mis en paramètre, dont le code source est disponible [[Contrôle de bras robotique, 2013/2014, TD2, Code Source fonction file|ici]].
  
 
Une fois ces frameworks installés, le système suit le schéma suivant.
 
Une fois ces frameworks installés, le système suit le schéma suivant.
Ligne 71 : Ligne 71 :
  
 
====La page du mode manuel====
 
====La page du mode manuel====
Le mode manuel à été le premier mode à être créer, puisqu'il a permis de vérifier que tous les autres modes fonctionnaient correctement (autant la partie électronique que les modes automatique et séquentiel).
+
Le mode manuel à été le premier mode à être créé, puisqu'il a permis de vérifier que tous les autres modes fonctionnaient correctement (autant la partie électronique que les modes automatique et séquentiel).
  
Il se compose 12 boutons ordonnées dans un tableau, chaque bouton permettant de tourner un moteur dans un sens ou l'autre, ou de serrer ou dé-serrer la pince, ou encore d'allumer ou d’éteindre la LED.
+
Il se compose de 12 boutons ordonnées dans un tableau, chaque bouton permettant de tourner un moteur dans un sens ou l'autre, ou de serrer ou dé-serrer la pince, ou encore d'allumer ou d’éteindre la LED.
  
 
Chaque bouton contient la propriété javascript <i>[[http://www.w3schools.com/jsref/event_onclick.asp onClick]]</i>, qui effectue une action javascript lors d'un clique sur le bouton.
 
Chaque bouton contient la propriété javascript <i>[[http://www.w3schools.com/jsref/event_onclick.asp onClick]]</i>, qui effectue une action javascript lors d'un clique sur le bouton.
Ligne 92 : Ligne 92 :
 
Il a été choisi de ne pas re-proposer à l'utilisateur de contrôler la DEL.
 
Il a été choisi de ne pas re-proposer à l'utilisateur de contrôler la DEL.
  
La position de repos est définis par les paramètres suivant:
+
La position de repos est définie par les paramètres suivants:
 
* Le moteur de la base est tel que la base et le bras forment un angle de 180°
 
* Le moteur de la base est tel que la base et le bras forment un angle de 180°
 
* Le premier moteur est réglé pour que le bras et la base forment un angle de 90° (sens des aiguilles d'une montre)
 
* Le premier moteur est réglé pour que le bras et la base forment un angle de 90° (sens des aiguilles d'une montre)
 
* Le deuxième moteur est réglé pour que l'avant-bras et le bras forment un angle de 90° (sens trigonométrique)
 
* Le deuxième moteur est réglé pour que l'avant-bras et le bras forment un angle de 90° (sens trigonométrique)
 
* Le troisième moteur est réglé pour que la pince et l'avant-bras forment un angle de 0°
 
* Le troisième moteur est réglé pour que la pince et l'avant-bras forment un angle de 0°
* La pince n'est ni dé-serrer ni re-serrer, elle reste dans son état précédent
+
* La pince n'est ni dé-serrée ni re-serrée, elle reste dans son état précédent
  
  
Ligne 105 : Ligne 105 :
  
 
# Lecture des valeurs de l'accéléromètre associé au moteur concerné (à l'aide de <i>serial.php</i>)
 
# Lecture des valeurs de l'accéléromètre associé au moteur concerné (à l'aide de <i>serial.php</i>)
# Rotation du moteur pour que la valeur lu se rapproche de la valeur de consigne
+
# Rotation du moteur pour que la valeur lue se rapproche de la valeur de consigne
# Si <math>\|Acc_{lu}-Acc_{consigne}\| < \triangle_{erreurAcceptee}</math> on passe au moteur suivant, sinon on repars à la première action
+
# Si <math>\|Acc_{lu}-Acc_{consigne}\| < \triangle_{erreurAcceptee}</math> on passe au moteur suivant, sinon on repart à la première action
  
 
La valeur <math>\triangle_{erreurAcceptee}</math> est une constante, valant 10 pour tout les moteurs, sauf pour la base, ou elle vaut 5.
 
La valeur <math>\triangle_{erreurAcceptee}</math> est une constante, valant 10 pour tout les moteurs, sauf pour la base, ou elle vaut 5.
Ligne 119 : Ligne 119 :
 
On notera que pour "Aller à la position de repos", le robot effectuera une opération supplémentaire avant toutes les autres étapes.
 
On notera que pour "Aller à la position de repos", le robot effectuera une opération supplémentaire avant toutes les autres étapes.
  
Le robot relévera le bras avant d'effectuer les autres étapes, pour éviter de traîner sur la maquette une éventuelle pièce.
+
Le robot relèvera le bras avant d'effectuer les autres étapes, pour éviter de traîner sur la maquette une éventuelle pièce.
  
 
====La page du mode automatique====
 
====La page du mode automatique====
Ligne 136 : Ligne 136 :
 
La troisième étape permet d'éviter de traîner les pièces sur la maquette.
 
La troisième étape permet d'éviter de traîner les pièces sur la maquette.
  
Ici, l'utilisateur n'a plus accès aux valeurs des capteurs, cette page est destinée au utilisateur lambda, désirant juste déplacer une pièce d'un point X à un point Y.
+
Ici, l'utilisateur n'a plus accès aux valeurs des capteurs, cette page est destinée à l'utilisateur lambda, désirant juste déplacer une pièce d'un point X à un point Y.
  
 
===Conclusion===
 
===Conclusion===
Ligne 149 : Ligne 149 :
  
 
==La partie électronique==
 
==La partie électronique==
Cette partie se découpe en deux subdivision, d'un premier coté, il y la partie "Carte de liaison", qui est la carte qui permet la réception correcte des capteurs de pression, des accéléromètre et du potentiomètre.
+
Cette partie se découpe en deux subdivisions :
 +
 
 +
D'un premier coté, il y la partie "Carte de liaison", qui est la carte qui permet la réception correcte des capteurs de pression, des accéléromètres et du potentiomètre.
  
 
Ensuite, il y a la partie "Convertisseur analogique/numérique", qui met en jeu la plateforme NanoBoard, qui permettra de remplacer l'Arduino Uno dans son rôle de transmetteur vers la FoxBoard.
 
Ensuite, il y a la partie "Convertisseur analogique/numérique", qui met en jeu la plateforme NanoBoard, qui permettra de remplacer l'Arduino Uno dans son rôle de transmetteur vers la FoxBoard.

Version du 1 mai 2014 à 16:51

Introduction

Bras Robotique

Le projet de contrôle du bras robotique a été le projet confiés à quatre élèves IMA du groupe de TD n°2, durant l'année 2014: Jean Wasilewski, Pierre Letousey, Mehdi Zeggai et Timothée Teneur.

Le projet vise à contrôler un bras robotique, ainsi qu'à en récupérer la valeurs des capteurs en temps réel.

Il se découpe donc en deux parties. Une première partie informatique, ayant pour objectif de créer une interface Web permettant de gérer les mouvements du robot.

Et une deuxième partie, électronique quant à elle, visant à assurer la communication entre les capteurs et l'interface Web.


Matériel utilisé

Pour parvenir à cet objectif, il a été nécessaire d'utiliser le matériel suivant:

  • Un bras robotique controlable par USB
  • Une FoxBoard
  • Un Arduino Mega (temporaire)
  • Une carte électronique de liaison entre l'Arduino et les capteurs
  • Une NanoBoard


Principe de fonctionnement

Schéma de fonctionnement du bras robotique, première version

Dans un premier temps, pour la partie informatique, la NanoBoard a été remplacé par un Arduino Mega.

L'Arduino a servi à effectuer les fonctions que la NanoBoard sera amener à faire dans la partie électronique.

Le code source de l'Arduino est disponible ici.

Le principe de fonctionnement est le suivant : l'utilisateur donne des ordres au bras, celui-ci les effectue, et retourne toutes les informations d'état.

Et cela, en cliquant sur des boutons généré par un code HTML hébergé sur la FoxBoard, affiché par un serveur Web lighthttpd.

Ces pages Web vont ordonner au bras de bouger, à travers l'interface USB-Série du bras robotique.

Elle vont aussi, en même temps, récupérer les valeurs des capteurs, à l'aide de l'Arduino Mega et de la carte de liaison.


Pour la seconde partie du projet, la carte Arduino a été abandonnée au profit d'une de la NanoBoard.

L'objectif recherché est le suivant : pouvoir réaliser un circuit capable de remplacer l'ensemble Aduino Mega et Carte de liaison.


La partie informatique

L'objectif de cette partie est de créer une interface homme-machine permettant de contrôler le bras robotique, tout en récupérant les données des différents capteurs.

Frameworks

Afin de réaliser l'interface utilisateur, ce projet utilise le framework [Bootstrap], qui permet en peu de lignes de créer un environnement simple et clair.

Ce framework utilise, pour son fonctionnement interne, le framework [jQuery].

Quant aux requêtes pour récupérer les capteurs, le site Web utilise une fonction permettant de lire le contenu d'un fichier mis en paramètre, dont le code source est disponible ici.

Une fois ces frameworks installés, le système suit le schéma suivant.

Bras Robotique

Interface

Pour l'interface, il a été décidé que l'utilisateur ne pourrait se déplacer que sur cinq pages :

  • La page d'accueil
  • La page "A propos de" (qui ne sera pas détaillé après puisque qu'elle ne contient pas de contenu apportant quelque chose au projet)
  • La page du mode manuel
  • La page du mode séquentiel
  • La page du mode automatique

La page d'accueil

Dans cette page, l'utilisateur a le choix entre les différents mode de fonctionnements du robot, accessible à l'aide de boutons.

La page contient une barre de navigation, qui sera commune à toute les pages, permettant de revenir à la page d'accueil, ou d'accéder à la page "à propos de".

La page du mode manuel

Le mode manuel à été le premier mode à être créé, puisqu'il a permis de vérifier que tous les autres modes fonctionnaient correctement (autant la partie électronique que les modes automatique et séquentiel).

Il se compose de 12 boutons ordonnées dans un tableau, chaque bouton permettant de tourner un moteur dans un sens ou l'autre, ou de serrer ou dé-serrer la pince, ou encore d'allumer ou d’éteindre la LED.

Chaque bouton contient la propriété javascript [onClick], qui effectue une action javascript lors d'un clique sur le bouton.

Plus précisément, chaque bouton a dans sa propriété [onClick] la fonction cmd, avec comme paramètre, la commande à envoyer au serveur UDP contrôlant le robot

La page du mode séquentiel

Le mode séquentiel permet à l'utilisateur d'effectuer des déplacements prédéfinis.

Ce mode offre 6 options à l'utilisateur:

  • Aller au point A
  • Aller au point B
  • Aller au point C
  • Aller à la position de repos
  • Serrer la pince
  • Dé-serrer la pince

Il a été choisi de ne pas re-proposer à l'utilisateur de contrôler la DEL.

La position de repos est définie par les paramètres suivants:

  • Le moteur de la base est tel que la base et le bras forment un angle de 180°
  • Le premier moteur est réglé pour que le bras et la base forment un angle de 90° (sens des aiguilles d'une montre)
  • Le deuxième moteur est réglé pour que l'avant-bras et le bras forment un angle de 90° (sens trigonométrique)
  • Le troisième moteur est réglé pour que la pince et l'avant-bras forment un angle de 0°
  • La pince n'est ni dé-serrée ni re-serrée, elle reste dans son état précédent


Lorsqu'un utilisateur clique sur une de ces options (une des 4 positions), le bouton appel la fonction goToPoint.

Cette fonction effectue 4 étapes, une pour chaque moteur, et chaque étape réalise les mêmes actions.

  1. Lecture des valeurs de l'accéléromètre associé au moteur concerné (à l'aide de serial.php)
  2. Rotation du moteur pour que la valeur lue se rapproche de la valeur de consigne
  3. Si \|Acc_{lu}-Acc_{consigne}\| < \triangle_{erreurAcceptee} on passe au moteur suivant, sinon on repart à la première action

La valeur \triangle_{erreurAcceptee} est une constante, valant 10 pour tout les moteurs, sauf pour la base, ou elle vaut 5.

Cette valeur correspond à l’imprécision maximale autorisée pour un moteur donné.

Cette imprécision est due à la fois à l'imprécision des moteurs, et aussi de l'accéléromètre.

La valeur maximale recevable étant 1023, au maximum, nous avons une imprécision de 0,98%, ce qui est acceptable.


On notera que pour "Aller à la position de repos", le robot effectuera une opération supplémentaire avant toutes les autres étapes.

Le robot relèvera le bras avant d'effectuer les autres étapes, pour éviter de traîner sur la maquette une éventuelle pièce.

La page du mode automatique

Le mode automatique repose essentiellement sur les fonctions du mode séquentiel, et du mode manuel.

Sur cette page, l'utilisateur choisit un point de départ, et un point d'arrivée, puis clique sur le bouton "GO".

Ce bouton appelle la fonction goToYFromX, qui effectuera les opération suivantes:

  1. Appel de la fonction goToPoint, avec comme paramètre le paramètre source de goToYFromX
  2. Appel de la fonction cmd, pour serrer la pince
  3. Appel de la fonction goToPoint, avec comme consigne "Aller à la position de repos"
  4. Appel de la fonction goToPoint, avec comme paramètre le paramètre destination de goToYFromX
  5. Appel de la fonction cmd, pour dé-serrer la pince

La troisième étape permet d'éviter de traîner les pièces sur la maquette.

Ici, l'utilisateur n'a plus accès aux valeurs des capteurs, cette page est destinée à l'utilisateur lambda, désirant juste déplacer une pièce d'un point X à un point Y.

Conclusion

Cette partie informatique nous a permis de mettre en place une application Web mettant en oeuvre plusieurs langages (HTML, PHP et Javascript).

Au terme du quota horaire alloué pour le projet, cette partie fonctionnait parfaitement, et remplissait l'intégralité des objectifs visés:

  • Contrôler le bras robotique
  • Récupérer les valeurs des capteurs (capteurs de pression, accéléromètres et potentiomètre)
  • Fournir une interface simple d'utilisation pour l'utilisateur
  • Permettre l'utilisation d'un mode automatique

La partie électronique

Cette partie se découpe en deux subdivisions :

D'un premier coté, il y la partie "Carte de liaison", qui est la carte qui permet la réception correcte des capteurs de pression, des accéléromètres et du potentiomètre.

Ensuite, il y a la partie "Convertisseur analogique/numérique", qui met en jeu la plateforme NanoBoard, qui permettra de remplacer l'Arduino Uno dans son rôle de transmetteur vers la FoxBoard.

Carte de liaison

Convertisseur Analogique/Numérique

Conclusion

Conclusion Finale