Aller au contenu


Photo
* * * * - 1 note(s)

Bras robot BCN3D Moveo de Donovan

bras robot

348 réponses à ce sujet

#221 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 02 novembre 2017 - 11:37

Bon attendons les nouveaux tests =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#222 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 02 novembre 2017 - 09:04

Bon, j'ai refais de nombreux essais, pour pouvoir utiliser steppers[i] en tant qu'objet pour faire des .setAcceleration ou .moveTo ou autre mais sur mon programme ça ne marche pas alors que sur le tiens ça fonctionne. J'ai pourtant mis exactement les mêmes choses. Je me replongerais dedans se week-end car je commence à en avoir marre de bloquer la dessus.

#include <AccelStepper.h>


AccelStepper stepper_Rotation1(AccelStepper::DRIVER,2,5); // Driver X CNC Shield
AccelStepper stepper_Bras1(AccelStepper::DRIVER,9,10); //Limit X Axis et Limite Y Axis
AccelStepper stepper_Bras2(AccelStepper::DRIVER,3,6); // Driver Y CNC Shield
AccelStepper stepper_Rotation2(AccelStepper::DRIVER,4,7); // Driver Z CNC Shield
AccelStepper stepper_Bras3(AccelStepper::DRIVER,12,13); // Driver A CNC Shield 
AccelStepper steppers[5] = {stepper_Rotation1, stepper_Bras1, stepper_Bras2, stepper_Rotation2, stepper_Bras3};

int position_moteur[5];
int vitesse_steppers[5] = {1000, 1000, 1500, 250, 500};

void setup() {
  initialisation();

}

void loop() {
  // reste du programme avec les .run et tout et tout....

}

void initialisation(){
  for (int i = 0; i < 5; i++) {
   steppers[i].setMaxSpeed(vitesse_steppers[i]);
   steppers[i].setAcceleration(8000);
   position_moteur[i] = 0;
   }
}

en mettant tout manuellement genre :

stepper_Rotation1.setAcceleration(8000);
stepper_Bras1.setAcceleration(8000);
stepper_Bras2.setAcceleration(8000);
etc...

Le programme fonctionne mais pas lorsque que j'utilise le steppers[i].

Je tiens à pouvoir l'utiliser car c'est bien pratique pour la suite.



#223 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 03 novembre 2017 - 02:08

Parenthèse !

#include <AccelStepper.h>

const int enablePin = 8; //activer les moteurs du CNC Shield
AccelStepper stepper_Rotation1(1,2,5); // Driver X CNC Shield
AccelStepper stepper_Bras1(1,9,10); //Limit X Axis et Limite Y Axis
AccelStepper stepper_Bras2(1,3,6); // Driver Y CNC Shield
AccelStepper stepper_Rotation2(1,4,7); // Driver Z CNC Shield
AccelStepper stepper_Bras3(1,12,13); // Driver A CNC Shield 

AccelStepper steppers[5] = {stepper_Rotation1, stepper_Bras1, stepper_Bras2, stepper_Rotation2, stepper_Bras3};

(...)

Ce ne sont pas des copies mais les pointeurs des objets qui sont passés en paramètre.

Le code déclare les objects stepper_*, instances de la classe AccelStepper. Ce sont directement les objects, pas des pointeurs. Aucun des paramètres passés au constructeur n'est un pointeur (que des int).
En créant le tableau, on réserve l'emplacement pour la taille de 5 objets AccelStepper. On remplit ensuite le tableau en faisant copiant aux différents emplacements les objets créés précédemment.
Une modification d'un objet dans la liste ne modifie pas les objets initiaux. Pour s'en convaincre, voir l'exemple suivant (à compiler avec: g++ programmeprincipal.cpp -o monprogramme):
//programmeprincipal.cpp
//-----
#include <iostream>
#include <vector>
#include <string>

class DummyClass
{
    private:
        float dummyFloat;
        int dummyInteger;
        std::string dummyString;

    public:
        DummyClass(float fv=0.0, int iv=0, std::string sv=""): dummyFloat(fv), dummyInteger(iv), dummyString(sv) {}

        ~DummyClass(){}
        void set(float v){ dummyFloat = v; }
        void set(int v){ dummyInteger = v; }
        void set(std::string v){ dummyString = v; }
        void get(){ std::cout << dummyString << ", " << dummyFloat << ", " << dummyInteger << std::endl; }
};


int main(int argc, char** argv)
{
    DummyClass elem0(0.,0, "apple");
    DummyClass elem1(0.0, 1, "banana");
    DummyClass elem2(23.18, -9, "cheese");
    DummyClass elem3(-3., 7, "coffee");

    DummyClass dummyList[4] = {elem0, elem1, elem2, elem3};

    std::cout << "------" << std::endl;
    std::cout << "elems:" << std::endl;
    elem0.get();
    elem1.get();
    elem2.get();
    elem3.get();
    std::cout << "------" << std::endl;
    std::cout << "dummyList:" << std::endl;
    for(int i=0 ; i < 4 ; i++)
    {
        dummyList[i].get();
    }
    std::cout << "------" << std::endl;
    std::cout << "elems:" << std::endl;
    elem0.get();
    elem1.get();
    elem2.get();
    elem3.get();

    std::cout << "------" << std::endl;
    std::string newname = "noname";
    std::cout << "set list strings to " << newname << std::endl;
    for(int i=0 ; i < 4 ; i++)
    {
        dummyList[i].set(newname);
        dummyList[i].set(0);
        dummyList[i].set(float(0.));
    }
    std::cout << "------" << std::endl;
    std::cout << "dummyList:" << std::endl;
    for(int i=0 ; i < 4 ; i++)
    {
        dummyList[i].get();
    }
    std::cout << "------" << std::endl;
    std::cout << "elems:" << std::endl;
    elem0.get();
    elem1.get();
    elem2.get();
    elem3.get();
    
    return 1;
}
Fin de la parenthèse.

Je ne pense pas que l'erreur soit à chercher de ce côté =) 
J'utilise cette méthode perso et j'ai jamais vu de problèmes jusqu'à maintenant =)

Ça par contre, je suis tout à fait d'accord !
Comme l'a suggéré Path sur le Discord, il y a un enable à mettre à true dans l'appel au constructeur pour que les pins soient en mode OUTPUT. Où est-ce que ça apparaît dans ton code, Donovan ? Il est possible que selon les versions d'AccelStepper que vous utilisez, il y ait des différences de comportement (ref: http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html )
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#224 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 03 novembre 2017 - 02:51

déjà j'ai repéré une différence dans l'initialisation des objets stepper , j'ai plus de paramètres, que j'ai mis à 0 par défaut ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#225 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 03 novembre 2017 - 03:30

@R1D1 : pourquoi n'as tu pas mis using namespace std; pour éviter de taper à chaque fois std:: (ok je sors en courant ----------------->:help:  :blind:


signature_01.png -->

 

Mon Tipeee
 


#226 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 04:13

Depuis ce matin j'ai réussi à utiliser le steppers[i], j'ai simplement ouvert un nouveau croquis, copié/collé mon programme par étape sans rien modifier et en essayant si ça fonctionne toujours et sa a re-fonctionné.  :Koshechka_08:

 

Donc je me suis re-penché sur le problème des vitesses pour que tous les mouvements arrivent en même temps.

J'ai toujours plus ou moins les mêmes résultats.

J'ai tenté une autre méthode qui fonctionne ainsi :

- Calcul des steps pour chaque moteur

- Calcul des temps pour arriver aux steps voulus en fonction de la vitesse max de l'articulation.

- Mise en tableau des temps et sélection du temps le plus long

- Assignation des nouvelles vitesses

 

La vitesse des autres articulations est fixée par rapport à la vitesse la plus longue. Donc la vitesse est réduite sur les autres.

 

Les calculs :

void Mouvements_moteurs(int Rotation1, int Bras1, int Bras2, int Rotation2, int Bras3){
 int nouvelles_positions[5];
     nouvelles_positions[0] = Rotation1;
     nouvelles_positions[1] = Bras1;
     nouvelles_positions[2] = Bras2;
     nouvelles_positions[3] = Rotation2;
     nouvelles_positions[4] = Bras3;

 float temps_mouvement[6];


for (int i = 0; i < 5; i++) {      // Calcul nouvelle position et temps de mouvement pour chaque articulation
        Calculs_step_moteur(nouvelles_positions[i], i);
        steppers[i].moveTo(calcul_step);
        temps_mouvement[i] = abs(calcul_step / vitesse_steppers[i]);
        position_moteur[i] = nouvelles_positions[i];
}
for(int i = 0; i <= 7; i++){   // trouve l'articulation qui mettra le plus de temps à faire le mouvement
    temps_mouvement[6] = max(temps_mouvement[6],temps_mouvement[i]);  
  }
for (int i = 0; i < 6; i++) {   // assigne la vitesse aux moteurs   
        Calculs_step_moteur(nouvelles_positions[i], i);
        steppers[i].setMaxSpeed(abs(calcul_step / temps_mouvement[6]));
}



     if(hors_limite == true){ // met en route le mouvement
    while (steppers[0].isRunning() || steppers[1].isRunning() || steppers[2].isRunning() || steppers[3].isRunning() || steppers[4].isRunning()){
           for (uint8_t i = 0; i < 5; i++) {
           steppers[i].run();
           }
        }  
    }
} 

Je lance avec une suite de fonctions comme ceci :

 Mouvements_moteurs(-100, 70, 20, 0, -80); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
 Mouvements_moteurs(120, -25, 42, 0, 50); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3 
 Mouvements_moteurs(-50, 10, -18, 0, -3); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  

Dans la première fonction, tout arrive en même temps (résultat voulu) et ensuite pour les deux autres, les mouvements vont bien comme il faut mais n'arrivent pas en même temps.



#227 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 04 novembre 2017 - 04:36

Je peux me tromper mais je crois que j'ai cerné le problème =) . 

Est ce que ça ne serait pas par ce que tu te bases uniquement sur les valeurs envoyé en paramètre de ta fonction et pas de la position courante du robot . 
Hors le moveTo est une commande " absolue " et non pas relative ! 

Et du coup ton premier calcul de vitesse qui se fait sur  " position souhaité - position_courante=0 "  est "juste", mais dans le deuxième calcul,  la position courante n'est plus égale à 0 ;) Je te laisse trouver la méthode dans la librairie pour récupérer la position courante ;) 

 

Sinon autre remarque comme ça : 

vitesse_steppers[i] => il doit être locale a cette fonction =) Pas global ça sera plus propre. Il doit donc être initialisé. =)
car faut éviter une possible division par zéro. 

 

 

Si tu veux vraiment réutilisé la même valeur que la valeur précedement utilisée/calculée dans le tour précédent tu laisses ta variable locale mais tu la déclare stactic ! =)

 

Allez t'y est presque lâche rien ! :P

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#228 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 04 novembre 2017 - 05:20

Du coup c'était quoi le pb ? J'ai rien compris.



#229 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 05:24

Avec mon code, le bras robot exécute parfaitement la première fonction en finissant toutes les articulations en même temps

 Mouvements_moteurs(-100, 70, 20, 0, -80); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3

et ensuite pour les autres fonctions

Mouvements_moteurs(120, -25, 42, 0, 50); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3 
Mouvements_moteurs(-50, 10, -18, 0, -3); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  

le robot ne termine pas les mouvements en même temps



#230 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 04 novembre 2017 - 05:30

Tu as compris ma réponse ? =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#231 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 05:35

Oui, je cherche du côté des distanceToGo () ou currentPosition ()

Je vais aller prendre ma douche pour réfléchir la dessus en me vidant le cerveau  :lol:  :lol:  :lol:



#232 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 04 novembre 2017 - 06:14

Tu peux utiliser l'un ou l'autre, tout dépend de si tu veux que les déplacements de ton bras soient absolus ou relatifs =) 

Si tu veux que les déplacements soient relatif tu remplaces juste moveTo par distanceToGo()      move()  =) 
Si tu veux que ça soit absolue tu as juste à faire  Nouvelleposition- positionCourante dans ton code actuelle au lieu de juste nouvelle position quand tu calculs les pas à faire =)

 

 

EDIT : j'ai corrigé mon message pour corriger la petite bêtise que j'avais dit ;)  


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#233 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 07:17

C'est plutôt, moveTo() (absolu) et move() (relatif) je crois ==>  http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html

En relatif j'ai de bons résultats mais va falloir que je modifie la manière de comment interpréter les angles.

Le problème avec le calcul Nouvelleposition- positionCourante, c'est que lorsque l'on mélange les angles positif et négatif, c'est merdique.



#234 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 04 novembre 2017 - 07:57

Pourquoi c'est merdique avec des angles négatifs ? 

ça marche bien ... 

exemple

si tu es à -10 et que du dois aller à 50   => 50 - (-10 ) = 60 

si tu es à -10 et que du dois aller à -20   => -20 - (-10 ) = -10 

si tu es à 10 et que du dois aller à 50   => 50 - (10 ) = 40 

si tu es à 10 et que du dois aller à 20   => 20 -(10 ) = 10 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#235 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 08:49

Je crois que le miracle vient d'arriver!  :yahoo:



#236 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 04 novembre 2017 - 09:05

Souvent la difficulté c'est pas de résoudre le problème mais c'est de comprendre le problème ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#237 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 09:15

Voici la vidéo (en cours d'upload) :

 

La séquence 2 et 5 bug un peu et lorsque je met des delay entre les séquences, le robot s’arrête quelque fois.

 

Voici mon code :

 //Lancement des séquences comme ceci :

 Mouvements_moteurs(-100, 70, 20, 0, -80); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
  Mouvements_moteurs(120, -25, 42, 0, 50); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3 
  Mouvements_moteurs(-50, 10, -18, 0, -3); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
  Mouvements_moteurs(-80, 28, -50, 0, 33); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
  Mouvements_moteurs(122, -42, 52, 0, 90); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
  Mouvements_moteurs(50, 4, 23, 0, -80); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  
  Mouvements_moteurs(70, 20, -22, 0, -85); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3 
  Mouvements_moteurs(0, 0, 0, 0, 0); //Rotation 1, Bras 1, Bras 2, Rotation 2, Bras 3  

void Mouvements_moteurs(int Rotation1, int Bras1, int Bras2, int Rotation2, int Bras3){
 int nouvelles_positions[5];
     nouvelles_positions[0] = Rotation1;
     nouvelles_positions[1] = Bras1;
     nouvelles_positions[2] = Bras2;
     nouvelles_positions[3] = Rotation2;
     nouvelles_positions[4] = Bras3;

 float temps_mouvement[6];


for (int i = 0; i < 5; i++) {      
        Calculs_step_moteur((nouvelles_positions[i] - position_moteur[i]), i);
        steppers[i].move(calcul_step);
        temps_mouvement[i] = abs(calcul_step / vitesse_steppers[i]);
}
for(int i = 0; i <= 7; i++){  
    temps_mouvement[6] = max(temps_mouvement[6],temps_mouvement[i]);  // Compare les valeurs pour connaitre la plus grande variation.
  }
for (int i = 0; i < 6; i++) {      
        Calculs_step_moteur((nouvelles_positions[i] - position_moteur[i]), i);
        steppers[i].setMaxSpeed(abs(calcul_step / temps_mouvement[6]));
}


     if(hors_limite == true){
    while (steppers[0].isRunning() || steppers[1].isRunning() || steppers[2].isRunning() || steppers[3].isRunning() || steppers[4].isRunning()){
           for (uint8_t i = 0; i < 5; i++) {
           steppers[i].run();
           position_moteur[i] = nouvelles_positions[i];
           }
        }  
    }
}

Je regarderais pourquoi il se comporte comme ça des fois (séquence 2 et 5)



#238 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 04 novembre 2017 - 10:02

Sympa !

Tu comptes lui faire jouer la Marche Impériale avec le bruit que font ses moteurs ? :D
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#239 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 04 novembre 2017 - 10:51

Arrête il est top ce bras !!

#240 Donovandu88

Donovandu88

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 680 messages
  • Gender:Male

Posté 04 novembre 2017 - 10:52

Sympa !

Tu comptes lui faire jouer la Marche Impériale avec le bruit que font ses moteurs ? :D

Le pire c'est qu'on peut  :lol:  :lol:

J'ai déjà fait chanter mon ancienne imprimante ^^





Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : bras robot

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users