1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Bras robotisé 5 axes et ARDUINO

Discussion dans 'Robotique et Domotique' créé par floun, 24 Janvier 2015.

  1. floun

    floun Nouveau

    Messages:
    39
    Inscrit:
    20 Mars 2013
    Localité:
    Paris
    Bras robotisé 5 axes et ARDUINO
    Bonjour.

    Je réfléchis à concevoir un bras robotisé 5 axes. Cependant j'ai quelques questions concernant son contrôle avec ARDUINO.

    1/ Est il possible moyennant une programmation adéquat sur ARDUINO (au moyen d’équations qui me dépassent j'imagine) de voir la pince avancer ou reculer à l'horizontale lorsque je lui demande? De voir la pince monter ou descendre à la verticale lorsque je lui demande.

    2/ Est il possible de faire bouger manuellement le bras (à l'aide d'un joystick) et d'enregistrer ce mouvement afin de le répéter à la demande?

    Je demande simplement si tout ceci est possible avec ARDUINO et non pas comment le réaliser, ca viendra plus tard :wink: .

    MERCI D'AVANCE POUR VOS PRÉCIEUSES LUMIÈRES.

    PS : Je ne connais rien à ARDUINO, si ca se trouve on ne peut même pas procéder par équation...
     
  2. stanloc

    stanloc Compagnon

    Messages:
    4 367
    Inscrit:
    29 Octobre 2012
    Bras robotisé 5 axes et ARDUINO
    Je ne vois pas comment on pourrait dire que c'est possible si on ne sait pas comment le faire ou si on ne sait pas comment le faire que cela est possible de le faire. C'est indissociable.
    Il faudrait déjà préciser ce que tu entends pas 5 axes et ce que cela sous-entend comme nombre d'axes de rotation. Moi j'ai un énorme doute que ce soit possible compte tenu de l'importance des calculs que cela implique. Je pense qu'il faut commencer par résoudre le problème sur un PC et voir ensuite si le programme tient sur une arduino.
    Stan
     
  3. LETARTARE

    LETARTARE Ouvrier

    Messages:
    350
    Inscrit:
    27 Septembre 2010
    Localité:
    Haute-Savoie
    Bras robotisé 5 axes et ARDUINO
    Bonjour,
    il y a longtemps, j'avais réalisé la commande d'un robot 5 axes de démonstration très rustique, par le port parallèle d'un PC. Il servait à déplacer les pièces d'un échiquier.
    Donc ma réponse est : c'est possible si vous êtes un bon programmeur et que votre programme ne dépasse pas les capacités de votre carte 'Arduino'.
    Pour l'autre question, je ne sais pas.
    Bien cordialement.
     
  4. fredcoach

    fredcoach Compagnon

    Messages:
    622
    Inscrit:
    11 Janvier 2013
    Localité:
    Hautes Alpes
    Bras robotisé 5 axes et ARDUINO
    Je ne vois pas pourquoi l'une quelconque de ces fonctions ne serait pas possible.
    Il suffit de les programmer, et ça ne me semble pas très difficile.
    Pour enregistrer les mouvements, bien sûr, il faut disposer de suffisamment de mémoire, sur disque par exemple.
     
  5. louloute30

    louloute30 Compagnon

    Messages:
    1 569
    Inscrit:
    5 Juillet 2010
    Bras robotisé 5 axes et ARDUINO
    Salut,
    C'est tout à fait possible avec Arduino (avec les limites qu'elle présentera) mais peut être qu'il en faudra plusieurs suivant la motorisation que vous utiliserez.
    Mais je pense que la difficulté repose bien plus sur la qualité de fabrication du bras que sur la prog ! Un 5 axe, c'est pas rien !
     
  6. antoine_cvra

    antoine_cvra Apprenti

    Messages:
    74
    Inscrit:
    16 Avril 2013
    Bras robotisé 5 axes et ARDUINO
    C'est quand même relativement compliqué, surtout la partie génération de trajectoire. Il y a plusieurs approches possibles, mais obtenir une belle ligne droite pour le manipulateur est plutôt difficile d'un point de vue mathématique (algébre linéaire surtout). L'avantage par contre c'est que ca a été fait et refait. Trouver des exemples est donc assez facile.

    Est-ce que tu comptes utiliser des servos moteurs de modélisme ou des moteurs CC que tu asservis (ou encore autre chose) ? Les servos de modélisme sont plus simples à commander mais beaucoup moins précis.
     
  7. stanloc

    stanloc Compagnon

    Messages:
    4 367
    Inscrit:
    29 Octobre 2012
    Bras robotisé 5 axes et ARDUINO
    C'est même impossible ce ne sera qu'une ligne brisée approchant au mieux une ligne droite et cela d'autant que la résolution de chaque rotation des axes du bras sera très fine. Etant donnés les bras de levier qu'il va falloir mouvoir je crains que des servo de modélisme soient exclus.
    Attention ce genre d'équipement est rapidement d'un tel niveau d'exigences que seules des entreprises avec des équipes très expérimentées s'y aventurent.
    Stan
     
  8. Barbidou

    Barbidou Compagnon

    Messages:
    605
    Inscrit:
    1 Novembre 2012
    Localité:
    Yvelines
    Bras robotisé 5 axes et ARDUINO
    Bonjour,

    Autant commander 3 axes avec une Arduino, c'est relativement simple, autant pour 5 axes je suis plus sceptique...

    Il faut déjà déterminer les modèles géométriques directs et inverses, du point de vue des maths c'est vite complexe et les équations devienne rapidement tordues... L'Arduino est probablement capable de les calculer, mais de là à le faire en temps réel c'est une autre paire de manche...

    L'idée de commencer par le programmer sur un PC est certainement la meilleure. Une fois cet exercice réalisé, tu sauras exactement à quoi t'en tenir.

    L'avantage d'une simu sur un PC, c'est que les essais ne coûtent que du temps...
     
  9. louloute30

    louloute30 Compagnon

    Messages:
    1 569
    Inscrit:
    5 Juillet 2010
    Bras robotisé 5 axes et ARDUINO
    Après, ça dépend ce qu'il entend par reproduire les mêmes mouvements...
    On peut aussi comprendre par là qu'il souhaite passer d'un point A à un point B...
    En ce sens, on divise le mouvement en une somme de point étape à franchir.

    Voici un code basique qui peut être amélioré, et permet de passer d'un point A à un point B, et la chorégraphie entre A et B n'est pas forcément connu du demandeur, sera celle qui permet d'atteindre le point B le plus rapidement possible (du moins, avec la longueur de parcourt la plus courte):

    Ce code est valable pour des moteurs PAP ou des servomoteurs de modélisme; Ce sera bp plus complexe si vous utilisez des motoréduteurs asservis...

    Ce code détermine d'abord la vitesse maximum attribué à un moteur qui a le plus de "trajet" à effectuer, et en déduit alors la vitesse de rotation de chacun des autres moteurs.

    Code:
    void TroisMoteursPAP(long M1,long M2,long M3,long M4,long M5){ 
      // M1 nb de pas sur moteur 1, 
      // M2 nb de pas sur moteur 2,
      // M3 nb de pas sur moteur 3
    
      // Détermine et informe le driver du sens de rotation de chaque moteur:
      if (M1<0){DirectionM1(-1);}else{DirectionM1(1);}
      if (M2<0){DirectionM2(-1);}else{DirectionM2(1);}
      if (M3<0){DirectionM3(-1);}else{DirectionM3(1);}
      if (M4<0){DirectionM4(-1);}else{DirectionM4(1);}
      if (M5<0){DirectionM5(-1);}else{DirectionM5(1);}
      M1=abs(M1);
      M2=abs(M2);
      M3=abs(M3);
      M4=abs(M4);
      M5=abs(M5);
    
      // Recherche du nb d'impulsions maximum à réaliser sur un moteur parmi les 3
      long ImpMax=0; 
      if (ImpMax<M1){ImpMax=M1;}
      if (ImpMax<M2){ImpMax=M2;}
      if (ImpMax<M3){ImpMax=M3;}
      if (ImpMax<M4){ImpMax=M4;}
      if (ImpMax<M5){ImpMax=M5;}
      
      int i=0; // Nb d'impulsions effectuées sur le M1
      int j=0; // Nb d'impulsions effectuées sur le M2
      int k=0; // Nb d'impulsions effectuées sur le M3
      int l=0; // Nb d'impulsions effectuées sur le M4
      int m=0; // Nb d'impulsions effectuées sur le M5
      long TempsMinImpM1=0;
      long TempsMinImpM2=0;
      long TempsMinImpM3=0;
      long TempsMinImpM4=0;
      long TempsMinImpM5=0;
      
      if (M1>0){TempsMinImpM1=ImpMax*TempsMinImp/M1;}else{TempsMinImpM1=(ImpMax+1)*TempsMinImp;} // Temps en microsecondes entre 2 imp sur le moteur 1
      if (M2>0){TempsMinImpM2=ImpMax*TempsMinImp/M2;}else{TempsMinImpM2=(ImpMax+1)*TempsMinImp;} // Temps en microsecondes entre 2 imp sur le moteur 2
      if (M3>0){TempsMinImpM3=ImpMax*TempsMinImp/M3;}else{TempsMinImpM3=(ImpMax+1)*TempsMinImp;} // Temps en microsecondes entre 2 imp sur le moteur 3
      if (M4>0){TempsMinImpM4=ImpMax*TempsMinImp/M4;}else{TempsMinImpM4=(ImpMax+1)*TempsMinImp;} // Temps en microsecondes entre 2 imp sur le moteur 4
      if (M5>0){TempsMinImpM5=ImpMax*TempsMinImp/M5;}else{TempsMinImpM5=(ImpMax+1)*TempsMinImp;} // Temps en microsecondes entre 2 imp sur le moteur 5
    
      long timer=micros(); // attribut à "timer" le temps du début du déplacement
      do{ //TempsMinImp
          if (micros()>=timer+TempsMinImpM1*(i+1)){
            impulsionM1(); // Fonction qui envoie une impulsion sur le Moteur 1
            i++;
          }
          if (micros()>=timer+TempsMinImpM2*(j+1)){
            impulsionM2(); // Fonction qui envoie une impulsion sur le Moteur 2
            j++;
          }
          if (micros()>=timer+TempsMinImpM3*(k+1)){
            impulsionM3(); // Fonction qui envoie une impulsion sur le Moteur 3
            k++;
          }
          if (micros()>=timer+TempsMinImpM4*(l+1)){
            impulsionM4(); // Fonction qui envoie une impulsion sur le Moteur 3
            l++;
          }
          if (micros()>=timer+TempsMinImpM5*(m+1)){
            impulsionM5(); // Fonction qui envoie une impulsion sur le Moteur 3
            m++;
          }
      }while (i+j+k+l+m<M1+M2+M3+M4+M5);
    }
    Résultat en vidéo des impulsions par ex qui seront envoyées aux moteurs PAP ou des infos envoyés aux servo.
    La première led à gauche fait 200 impl, en attendant que la 2ème en fait 300, que la 3ème en fait 50, la quatrième 25, et la dernière 10.
    [BBvideo 425,350:2hmvo918]http://youtu.be/SFR7hkfZiOY[/BBvideo]
     
  10. antoine_cvra

    antoine_cvra Apprenti

    Messages:
    74
    Inscrit:
    16 Avril 2013
    Bras robotisé 5 axes et ARDUINO
    Je pense qu'avec un peu de théorie du contrôle on arrive à des résultats vraiment propres :) Et ca ne sera en tout cas pas une ligne brisée, qui demanderait des accélérations infinies.

    Pourquoi le faire en temps réel ? Il peut aussi précalculer sa trajectoire et simplement la "jouer" en temps réel. Pour la partie avec le joystick c'est une autre paire de manche, mais il y a surement moyen de faire un compromis.
     
  11. stanloc

    stanloc Compagnon

    Messages:
    4 367
    Inscrit:
    29 Octobre 2012
    Bras robotisé 5 axes et ARDUINO
    Peux-tu développer ta pensée car cela m'intéresse de connaitre ton approche du problème. Merci.
    Stan
     
  12. syoctax

    syoctax Apprenti

    Messages:
    198
    Inscrit:
    26 Janvier 2012
    Bras robotisé 5 axes et ARDUINO
    Peut-être une approche encore plus simple, et c'est utilisé pour certains bras robotisés industriels: enregistrer un mouvement et le rejouer.

    Il faut une mesure de l'angle de chaque axe, elle peut être repiquée sur les potentiomètres des servos de modélisme, ou bien lue avec des "smart servos" type AX-12. Il y a une phase d'apprentissage du mouvement ou l'utilisateur bouge manuellement le bras (moteurs éteints) et l'arduino enregistre à pas d’échantillonnage fixe les positions de chacun des axes, et les rejoue par la suite.

    Bien-sûr c'est limité à des gestes répétitifs et non calculés dynamiquement mais je trouve que c'est une approche qui permet de valider la partie mécanique et faire pas mal de choses.

    Pour moi partir dans des changements de repères et de calculs de trajectoires d'entrée de jeu, c'est un peu mettre la charrue avant les bœufs.
     
  13. fredcoach

    fredcoach Compagnon

    Messages:
    622
    Inscrit:
    11 Janvier 2013
    Localité:
    Hautes Alpes
    Bras robotisé 5 axes et ARDUINO
    C'est bien ainsi que je voyais les choses.
     
  14. louloute30

    louloute30 Compagnon

    Messages:
    1 569
    Inscrit:
    5 Juillet 2010
    Bras robotisé 5 axes et ARDUINO
    EDIT après le message de Stan
    En fait floun, si tu te poses la question du possible ou non, il faudrait nous dire quel type de motorisation vas-tu utiliser, et quelle qualité de déplacement t'attends tu (chirurgicale ou pas trop précis) ?
    - des Servo de modélisme
    - des moteur PAP
    - des Motoréducteurs avec encodeurs

    A partir de ça, tu as déjà des exemples qui utilisent une arduino:
    - Les petits bras motorisés
    https://www.youtube.com/watch?v=HpQH-ePQ4D4
    - Les imprimantes 3D DIY sont souvent gérées par des arduino (4 moteurs PAP en fonctionnement synchronisé) lisant des G-codes
    https://www.youtube.com/watch?v=xLYPwSA34cE
    - Par contre, jamais tu verras une seule arduino (sauf peut être la DUE) capable de gérer 5 motoréducteurs avec encodeurs de manière synchrone. En pratique, il te manquera des pins d'interruptions et tu verras vite que contrôler 1 seul motoréducteur ayant 18000impl / tour c'est la limite maxi qu'elle peut prendre (Mega 1280).

    Par contre, il existe d'autres cartes que les arduinos pouvant te conduire à une réalisation de ton souhait. Coté prog, ça reste un peu pareil...
     
    Dernière édition par un modérateur: 16 Avril 2015
  15. stanloc

    stanloc Compagnon

    Messages:
    4 367
    Inscrit:
    29 Octobre 2012
Chargement...
Articles en relation
  1. v tec
    Réponses:
    1
    Affichages:
    931
  2. v tec
    Réponses:
    211
    Affichages:
    26 121

Partager cette page