Bras Robotisé Cartésien

Abstract :

Nous sommes deux étudiants en 2e année de DUT génie électrique et BrasBleuinformatique industrielle à Mulhouse, Alexis ROSENKRANZ et Anthony WELTER.  Au début de la deuxième année, nous avions à choisir un projet à réaliser durant celle-ci. Après quelque temps de réflexion, nous avons choisi de réaliser un bras robotisé, projet que notre professeur accepta.

L’idée de réaliser un bras robotisé est pour nous un rêve d’enfant qui se concrétise…

Robot_enfant

 

Présentation du Sujet :

Piloter directement les moteurs n’a pas été notre premier but dans ce projet. Nous avions surtout l’envie de pouvoir piloter ce bras robotisé à l’aide de coordonnées cartésiennes, c’est à dire selon des axes que l’on nommera X, Y et Z.

Des calculs seront donc nécessaires dans le programme afin d’affecter les angles des moteurs de chaque axe à leur position pour que l’outil du robot soit à la position demandée dans le repère cartésien.

Coord_Cart

Imaginez que l’on veuille tracer une ligne, il sera donc nécessaire de calculer une multitude de points très proches puis d’affecter les moteurs à l’angle calculé pour chacun des points.

Il faut donc bien comprendre que pour réaliser un mouvement linéaire avec un bras robotisé, tous les axes devront bouger en même temps.

 

 

Bras_rotation

Si on veut rajouter une pince au bout d’un bras robotisé 3 axes, la pince restera fixe et l’on ne pourra pas choisir l’angle qu’elle aura par rapport au sol. C’est pour ces raisons que nous avons décidé de rajouter deux autres axes. L’un, pour que la pince soit toujours perpendiculaire par rapport au sol quelque soit l’inclinaison du bras.  L’autre axe, pour que la pince puisse réaliser une rotation sur elle-même, c’est-à-dire pour qu’on puisse attraper un objet face à elle-même et à 90 degrés.

Maintenant vous comprenez pourquoi notre bras robotisé est composé de 5 axes alors que l’on précise que uniquement 4 axes sont réellement pilotables.

 

Problématique :

La problématique qui se pose est donc :

ComProblématiquement pouvoir gérer en données cartésiennes un bras robotisé 4 axes ?

 

Cahier des Charges :

– Réaliser un bras robotisé 5 axes dont 4 réellement pilotablesCahier des charges

– Celui-ci devra pouvoir être pilotable dans un repère cartésien avec des déplacements linéaires

– La partie commande sera réalisée sur une carte type Arduino

– Le robot devrait pouvoir évoluer dans une demie sphère de 300 mm de rayon et prendre en compte les zones interdites

– La précision au bout du bras devrait être au moins de 4 mm

– Les coordonnées de position du robot devront pouvoir être entrées à l’aide d’un clavier

– Le robot devrait également être pilotable à l’aide d’une télécommande comportant 2 joysticks selon deux modes : angulaire ou linéaire.

– La position réelle du robot ainsi que les coordonnées tapées au clavier seront affichées sur un écran LCD.

– Les déplacements devront se faire en suivant une courbe d’accélération et de décélération.

– Le robot devra pouvoir se déplacer avec une charge d’au moins 200g dans sa pince.

– Le robot devrait comporter un bouton d’arrêt d’urgence de type coup de point.

 

Étude :

Nous avons commencé par vérifier si notre projet était réalisable à notre échelle. Pour ceci, nous devions réaliser plusieurs études notamment la manière à affecter la valeur à tous les angles en fonction des coordonnées cartésiennes. Nous avons principalement utilisé le théorème de Pythagore et le rapport entre le cosinus, les angles et l’hypotéCalculnuse afin de réaliser la conversion entre la position et les angles.

Exemple : pour calculer l’angle A (celui de la rotation de la tourelle), on utilise les coordonnées X et Y afin de calculer l’hypoténuse. Dans ce cas, l’hypoténuse correspond à la distance entre le bout de la pince et la base du robot. A partir de cet hypoténuse, on réalise le calcul suivant : cos-1 (X/hypoténuse). On obtient l’angle A.

C’est le même principe pour trouver les angles B (épaule du robot) et C (coude du robot). Il suffit de calculer la deuxième hypoténuse qui prend cette fois ci l’axe Z en compte.  Avec cette hypoténuse 2 et les valeurs XYZ on peut retrouver les angles B et C. À l’aide des angles B et C, on peut retrouver l’ angle D afin que la pince soit toujours perpendiculaire au sol. L’angle E est la rotation de la pince sur elle-même et est égal à l’angle A, afin que la pince soit toujours face à nous quelque soit la rotation bras.

 

Une fois que nous savions comment trouver chaque angle en fonction des coordonnées cartésiennes, il fallait que l’on choisisse correctement tous les matériaux et le matériel que nous allions utiliser afin de réaliser le bras.

Pour la partie commande, nous voulions utiliser un microcontrôleur de la marque Arduino pour plusieurs raisons. La première étant le budget. Un Arduino en moyenne coûte 30 €. De plus, il possède une puissance de calcul suffisante ainsi qu’un grand nombre d’entrées/sorties. Nous avons choisi l’Arduino mega car :

– Il possède 54 entrées-sortiesArduinomega

– 16 entrées analogiques

– Un processeur 8 bits

– Une fréquence d’horloge de 16 MHz

– Alimenter en 12 volts, elle génère un 5 V et un 3 volts à l’aide de son régulateur interne

DriverPour la partie puissance, nous avons choisi d’utiliser des drivers de moteur pas à pas. On envoie dans ces drivers un signal carré ainsi qu’une entrée booléenne pour le sens. C’est-à-dire qu’à chaque fois que l’on envoie un front montant sur l’entrée du driver, il réalise un pas sur le moteur pas à pas dans le sens choisi par l’entrée booléenne.

 

Pour la partie commande, nous avons choisi d’utiliser un clavier, une Claviermatrice 4×4 pour rentrer les valeurs cartésiennes et de petits joysticks afin de piloter manuellement les coordonnées cartésiennes.

 

 

LCD

Afin de visualiser les coordonnées, nous avons choisi d’utiliser un écran LCD à 2 x 16 caractères qui nous permet d’afficher les valeurs XYZ en temps réel ainsi que les valeurs tapées au clavier lorsqu’on l’utilise.

moteurpap

 

Pour les actionneurs, nous avons choisi d’utiliser des moteurs pas à pas réductés. Avec des moteurs pas à pas réductés, on peut gérer facilement la vitesse ainsi qu’une position. On connaît la valeur de l’angle d’un pas. Le réducteur est nécessaire afin d’avoir assez de couple pour faire bouger chaque axe du robot.  Nos moteurs ont un couple de 30 kg/cm c’est-à-dire qu’au bout de 40 cm le moteur peut soulever 750 g. L’idéal aurait été des servomoteurs avec retour de la position mais ceux-ci n’étaient malheureusement pas dans notre budget.

20160128_065512Possédant personnellement une imprimante 3D, on choisira d’imprimer la plus grande partie des pièces nécessaires.

 

 

 

 

 

Tout d’abord, l’ensemble du robot à été modélisé en 3D sur SolidWORKS afin de vérifier le design et le fait que rien n’entre en collision.

Plan_3D_BrastenduPlan_3D_Pince

Plan_TransparentG

 

 

 

Plan_3D_Bras

 

Les pièces à imprimer ont été converties en format STL depuis cette modalisation.

 

 

 

Pour les pièces que nous avons fait usiner, on a réalisé une mise en plan de ces pièces toujours sous SolidWORKS.

Plan_2D                                                                                        Plan_2D2

Schéma de câblage simplifié :

 

 Schema cablage robot

Réalisation :

Dans les premières heures que nous avons consacrées au projet, nous avons réalisé plusieurs parties de programme, notamment le programme appelé calcul afin de réaliser des tests qui nous ont permis de vérifier la faisabilité du projet. Il faut savoir que tout le projet se base sur la conversion entre les données cartésiennes qui sont en mm et les angles de chaque moteur qui sont en radian. Par conséquent, sans ce programme calcul le robot ne fonctionnerait pas.

Image2

Bien sûr, le programme calcul n’est pas le seul programme que l’on utilise pour le fonctionnement du robot. Nous avons par la suite programmé plusieurs autres parties que nous avons bien sûr testé, comme le programme rampe qui permet quand nous sommes en mode clavier d’accélérer progressivement la vitesse du robot sur la moitié de la distance à parcourir et de le décélérer sur la deuxième moitié. Cela permet au bras d’atteindre une vitesse maximale lorsqu’il réalise de grandes distances et de rester à une vitesse faible pour des courtes distances. Nous avons continué à créer et tester des bouts de programmes notamment pour décoder la matrice 4 x 4 qui nous sert de clavier, ainsi que le programme clavier en lui-même avec un protocole : Ecrire la coordonnée puis ensuite appuyer sur moins. Exemple pour avoir la coordonnées – 200 il faut taper 2 puis 0 plus 0 puis – et valider. Et beaucoup d’autres programmes dans ce type.

Nous avons passé beaucoup d’heures à réfléchir pour les mouvements du robot ainsi que les programmes afin de trouver toutes les erreurs potentielles avant qu’elles se produisent. Une fois tous les programmes écrits, nous avons assemblé dans un programme principal le Main.

 

Pour la mécanique, nous avons réalisé tous les plans de chaque pièce sur Solidworks : chaque pièce à été réfléchi pour :

– Limiter les efforts2016-06-11 17.28.01

– L’ergonomie du bras

– La précision pour qu’elles correspondent aux angles calculés

 

On peut voir ici l’axe creux permettant le passage des fils :

 

2016-06-11 17.27.47Notre imprimante est une petite imprimante d’entrée de gamme, gérée par un Arduino. Elle fonctionne à l’aide de moteurs pas à pas et courroies. Elle procède un volume d’impression de 200*200*200 ce qui fait que certaines grandes pièces ont du être imprimées en deux fois.

 

Il faut compter une vingtaine d’heures pour imprimer un bras comme celui-ci.20160521_00352520160521_003501

 

 

 

Au fur et à mesure des tests avec un moteur puis deux, puis un moteur avec un bout de bras puis avec un switch de fin de course, le câblage devenait compliqué. Nous avons donc décidé de tout décâbler et de faire un câblage définitif sur une planche pour que ça soit clair et qu’il n’y ait pas de faux contact. L’idéal aurait ici été de réaliser un circuit imprimé supportant les drivers, et comprenant des résistances de tirages afin de limiter les problèmes des parasites.

20160612_15332020160612_163705

2016-06-11 17.31.18

Lors de la réalisation et des tests, nous avons rencontré plusieurs
problèmes notamment les moteurs pas à pas non reductés qui servent à l’angle D et E chauffaient beaucoup. Par conséquent, on ne pouvait pas les englober dans une pièce plastique. Ces moteurs sont donc fixés sur une plaque en aluminium.

 

Vu que nous utilisons des moteurs pas à pas réductés, l’angle qui correspond à un pas est très faible. Par conséquent, il faut faire beaucoup de pas pour réaliser un angle en sortie de réducteur. Le problème étant que même en envoyant une impulsion à chaque tour de cycle avec l’Arduino mega, nous ne pouvions pas utiliser les moteurs à leurs vitesses maximum. Nous avons donc décidé de changer d’Arduino et de prendre un due. C’est un Arduino qui remplit les mêmes caractéristiques que le Mega c’est-à-dire 54 entrées-sorties, mais il fonctionne en 3,3 volts au lieu des 5 volts du méga. Il possède un processeur 32 bits au lieu des 8 bits. C’est à dire qu’il va falloir beaucoup moins de temps  pour réaliser des calculs. Et enfin il est cadencé à 84 MHz au lieu des 16 MHZ du mega. Quelques temps après, nous nous sommes rendus compte que c’était la bibliothèque gérant l’écran LCD qui ralentissait beaucoup le programme. Nous avons donc limité l’affichage sur l’écran tous les 100 tours de cycles. Aujourd’hui avec l’Arduino due, on est capable d’aller plus vite que la vitesse des moteurs.

Les drivers pas à pas eux aussi chauffent beaucoup, ils délivrent le courant nécessaire au moteur seulement quand ils sont froids : par conséquent, on a installé un ventilateur pour faire circuler l’air. Une fois la maquette réalisée, le programme installé dans l’Arduino, on a pu réaliser des tests concrets avec un programme fini :  nous nous sommes rendus compte que les moteurs pas à pas saccadaient un peu, par conséquent nous avons passé les drivers en commande demi pas et le bras robotisé se comporte mieux depuis.

2016-06-11 17.40.12Par la suite, nous avons géré les temporisations et les vitesses afin d’avoir des mouvements fluides avec différentes positions au moteur pour un certains nombres de points. Nous avons aussi constaté des parasites au niveau de la télécommande constitué du joystick, c’est-à-dire que de temps en temps le robot se déplace légèrement, alors que nous n’avons pas touché au joystick. On pourrait régler la sensibilité des joysticks, mais dans ce cas on aurait plus la possibilité de le déplacer lentement quand on déplace à peine le joystick.

2016-06-11 17.42.00

 

 

L’utilisation des moteurs pas à pas nous oblige à utiliser des fins de courses sur tous les axes afin de fixer l’angle à une certaine valeurs lors de la mise sous tension du robot. Par exemple, à la mise sous tension de l’Arduino, on ne sait pas dans quelle position se trouve le moteur pas à pas. On lancera donc une séquence de calibration lors de la mise sous tension.

 

 

Nous avons rempli le cahier des charges. Nous pouvons déplacer un bras robotisé avec trois possibilités :

 

– A l’aide du clavier, on peut rentrer les valeurs XYZ et même la valeur de l’angle E, 2016-06-11 17.31.33si on veut que la pince se retrouve perpendiculaire à nous. Une fois que l’on appuie sur valider, le robot se dirige vers ces valeurs en ligne droite avec rampe d’accélération et de décélération.

Vidéo Mode cartésien clavier :

 

 

– À l’aide de la télécommande, chaque joystick est composé de deux axes, c’est-à-dire que l’on peut avec un joystick augmenter ou diminuer X et idem pour Y. Avec l’autre joystick, on fait de même avec les paramètres Z et E. Plus on incline le joystick, plus la valeur s’incrémente ou se décrémente rapidement, c’est-à-dire le bras ira plus vite. Si l’on incrémente seulement X, le bras réalisera une ligne droite sur X, sans changer la valeur Y et Z.

Vidéo Mode cartésien Télécommande :

 

 

– Avec la même télécommande, on peut en basculant un switch sur le premier joystick gérer l’angle à la rotation de la tourelle ainsi que l’angle B. Et avec l’autre joystick, on gère l’angle C ainsi que l’angle E. C’est comme sur le mode cartésien, plus on incline le joystick plus la décrémentation ou l’incrémentation sera rapide.

Vidéo Mode angulaire :

Si l’on demande au bras d’aller à une coordonnée impossible pour lui, il affichera erreur sur l’écran et ne bougera pas. Exemple, si on lui demande un Z négatif donc sous le sol, il n’essayera pas d’y aller.

Vidéo Erreur :

Afin de connaître la position du bras et donc la position de chaque angle après la mise sous tension, on réalise une séquence de calibration. À la mise sous tension de l’Arduino, le premier programme que l’on réalise est la calibration. Il demande à tous les moteurs de tourner dans le même sens jusqu’au fin de course. A partir de là, il s’arrête et dans les valeurs du programme, on affecte la position actuelle du robot. De là, on connaît la position du bras. Ensuite le programme calibration se termine sur l’envoi du bras robotisé sur une position « home ».

Vidéo Calibration :

L’outil de notre robot est une pince.

Vidéo montrant le fonctionnement de la pince :

Gestion de Projet

Image3

Nous avons pris du retard sur la partie mécanique du robot, et nous avons perdu du temps à régler des problèmes de parasite sur le signal envoyé aux drivers pas à pas mais malgré cela le projet a été fini dans les temps.

 

Perspectives

14473-4001971Le bras robotisé est composé de 4 axes complètement automatisés et nous lui avons rajouté un cinquième axe qui correspond à la rotation du poignet sur un bras humain. Nous utilisons uniquement cet axe afin que la pince soit toujours perpendiculaire au sol. Nous pouvons l’utiliser pour donner un angle à la pince par rapport au sol mais dans ce cas-là, les calculs des angles deviendraient beaucoup plus lourds à réaliser car cela voudrait dire qu’il y aurait plusieurs possibilités d’angles pour la même position. C’est pour cette raison que nous gardons la pince perpendiculaire au sol. Il y a donc une évolution à ce niveau-là pour rendre le robot en 5 axes. Il suffirait de réaliser les calculs nécessaires. Dans cette optique, nous pourrions même le rendre mobile sur 6 axes afin de donner à l’outil une position mais également un angle dans l’espace.

 

Aujourd’hui le bras robotisé est pilotable de deux façons. activar-wifi-telefono-celular-ventjas-desventajasL’une avec le clavier en rentrant des coordonnées cartésiennes sur X,Y et Z et l’autre, avec la télécommande constituée de deux joysticks pour faire varier directement les coordonnées X,Y et Z. Il y aurait une évolution au niveau de la manière de piloter le robot car on pourrait très bien imaginer pouvoir le piloter à l’aide d’une interface web ou d’autres moyens de communication sans fil.

 

Bilan

Bilan

 

– Réaliser un bras robotisé 5 axes dont 4 réellement pilotables

canstock15025439 Le robot comporte ses 5 axes dont 4 pilotables

– Celui-ci devra pouvoir être pilotable dans un repère cartésien avec des déplacements linéaires

canstock15025439

– La partie commande sera réalisée sur une carte type Arduino

canstock15025439

– Le robot devrait pouvoir évoluer dans une demi sphère de 300 mm de rayon et prendre en compte les zones interdites

canstock15025439Le robot peut se déplacer dans une zone de 400mm autour de sa base et prend en compte les zones interdites

– La précision au bout du bras devrait être au moins de 4 mm

Afficher l'image d'origine Le jeu dans les réducteurs des moteurs pas à pas ne nous permet pas d’atteindre cette précision quelque soit la position du robot dans l’espace.

– Les coordonnées de positions du robot devraient être entrées à l’aide d’un clavier

canstock15025439

– Le robot devrait également être pilotable à l’aide d’une télécommande comportant 2 joysticks selon deux modes : angulaire ou linéaire.

canstock15025439

– La position réelle du robot ainsi que les coordonnées tapées au clavier seront affichées sur un écran LCD.

canstock15025439

– Les déplacements devront se faire en suivant une rampe d’accélération et de décélération.

canstock15025439

– Le robot devrait pouvoir se déplacer avec une charge de 200g max dans sa pince.

canstock15025439Le robot peut soulever environ 500g

– Le robot devrait comporter un bouton d’arrêt d’urgence de type coup de point.

canstock15025439

 

Conclusion

20160612_163604Voilà un petit extrait de notre projet, qui vous montre notre implication. On pourrait l’expliquer pendant des heures mais ce n’était pas le but, par conséquence on s’est contenté de vous expliquer les parties les plus intéressantes.

Le projet a été très intéressant, il nous a permis d’acquérir et de mettre en pratique beaucoup de connaissances. Aujourd’hui nous pouvons être fiers de notre réalisation car le bras robotisé fonctionne correctement. Il a été un projet complexe qui a demandé beaucoup d’heures de travail.