Aller au contenu


Photo

Robot Quadrupède Arduino Uno

Quadrupède Arduino Uno Mini Maestro

  • Veuillez vous connecter pour répondre
108 réponses à ce sujet

#61 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 28 juillet 2016 - 02:12

Désolée du retard !

  
/*****Mesure********* (cm)*/
const int COAX =3.6; 
const int FEMUR =5; 
const int TIBIAS=10; 
/**************************/
const int Y_LARGEUR=8.6;
const int X_LONGEUR=11.1;    
const int HAUTEUR=5;
const int HAUTEUR_CORPS=5.5;
const int EMPATTEMENT=8;
const int DISTANCE_patte_G=6;
void IK()
{
  //IK simple (hauteur , latéral , longitudinal ) :
  double deplacementcentreX;
  double deplacementcentreY;
  double deplacementcentreZ;
  
  double Offset_Y = (X_LONGEUR / 2) +  deplacementcentreY;
  
  double Offset_X = Y_LARGEUR / 2 +  deplacementcentreX;
  
  double Offset_Z = HAUTEUR - (HAUTEUR_CORPS / 2) + deplacementcentreZ;

  double L = sqrt(pow(HAUTEUR,2)+pow(EMPATTEMENT,2)); //Calcul de l'hypothénuse (Pythagore)
  Serial.print(L, DEC);
  Serial.println();
  
  /***Al-Kashi***/
  
  double alpha = acos((-pow(FEMUR,2) + pow(TIBIAS,2) + pow(L,2))/ (2*TIBIAS*L));  
  double beta = acos((pow(FEMUR,2) - pow(TIBIAS,2) + pow(L,2))/ (2*FEMUR*L));
  double gamma = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS));
  
   alpha = alpha*57.3;
   beta = beta*57.3;
   gamma = gamma*57.3;
  Serial.print(alpha, DEC);
  Serial.println();
  Serial.print(beta, DEC);
  Serial.println();
  Serial.print(gamma, DEC);
  Serial.println(); 
}

hypothenuse = 9.4339809417

//en degrée :
alpha = 29.6365776062
beta = 81.4718017578
gamma = 68.9048843383  
 

Quand pense-tu, cela te semble correcte ?

J'ai pris toutes les dimensions que tu m'a montrée sur t'es schéma :)

il y a juste hauteur_corps et hauteur la différence ou je suis pas sur, il s'agit de l’épaisseur du corps du robot !



#62 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 28 juillet 2016 - 09:56

Et on peut le voir sur le forum ?

Du moins y a un post à sont sujet ? :)

 

Edit : vu

 

Y'a une vidéo de sont robot a Vaelan sur la page 1 de mon post :)



#63 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 28 juillet 2016 - 09:37

 

 

Pas mal ! j'avoue, il y a beaucoup de travail !

Même si c est pas complet c est gentil ,merci.

 

 

 

se que je comprend pas c'est comment ensuite je met tout en relation ? comment je fait bouger mes pattes comme je veux ? comment je réutilise ces angles et le reste de ces mesures pour pouvoir enfin voir mon robot marcher normalement et non comme Frankenstein ^^

La je vois pas.......

meme si elle n est pas complete la cinématique calcule les angles, tu les applique a tes servo. C'est quoi la relation que tu comprends pas?

 

sans la cinématique inversé:

http://www.geogebra.org/m/apkw5gdx

 

Avec la cinématique inverse:

http://www.geogebra.org/m/mDdgAGPJ#material/zErDBVzc

 

Les curseurs programmés sont en VERT et il ne contrôle que le point "centre" en violet les angles étant obtenu avec la cinématique inversé . Malgré les mouvements que tu appliques au corps du robot l extrémité de la patte reste parfaitement à sa place sans mouvement à la "Frankenstein" ni glissement au sol .Tous les servo sont en mouvement quand tu bouge les commandes.

Après appliquer la valeur de la fonction "angle" à GAMMA de geogebra ou au servoTibia de ton robot je vois pas de différence à part un MAP de la valeur de l angle en PWM.

 

 

 

Moi mon problème n'est pas de reprendre ces calculs ou Al-kashi

As tu vraiment compris la cinématique inversé? comment elle fonctionne et à quoi elle sert?

 

 

 

il y a juste hauteur_corps et hauteur la différence ou je suis pas sur, il s'agit de l’épaisseur du corps du robot !

 

hauteur_corps est la hauteur physique du corps de ton robot

Hauteur est la distance entre le sol et le centre de ton robot

 

Dans ton code "const int et #define" toujours pas bon.

les longueur physique de ton robot sont invariable donc se sont bien des constantes

par contre hauteur et empattement sont des valeurs par défaut qui servent a initialiser des variables et que tu pourras changer dans l avenir donc tu dois les définir par des #define  



#64 Oliver17

Oliver17

    Pilier du forum

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

Posté 29 juillet 2016 - 09:11

Vu les videos, et merci pour les liens sur les calculs des anges etc etc, j'ai mis ça de coter :)

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#65 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 29 juillet 2016 - 11:23

J'ai essayé se que tu m'a dit de faire, j'ai mis l'angle alpha pour le FEMUR et l'angle Beta pour TIBIAS j'ai bien regarder que sa soit le bon angle !

Mais lorsque je modifie l(empattement ou la hauteur je comprend pas la logique je n'arrive pas a lever le robot plus haut ou étirer sa patte avec l'empattement..

je bug encore un peu sur le problème la lol



#66 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 29 juillet 2016 - 12:25

void IK()
{
  //IK simple (hauteur , latéral , longitudinal ) :
  
  L = sqrt(pow(HAUTEUR,2)+pow(EMPATTEMENT,2)); //Calcul de l'hypothénuse (Pythagore)
  Serial.print(L, DEC);
  Serial.println();
 
  /***Al-Kashi***/
   alpha = acos((pow(FEMUR,2)+ pow(L,2) - pow(TIBIAS,2))/ (2*FEMUR*L));
   beta = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS));
   
   Offset_Y = (X_LONGEUR / 2) +  deplacementcentreY;
   Offset_X = Y_LARGEUR / 2 +  deplacementcentreX;
   Offset_Z = HAUTEUR - (HAUTEUR_CORPS / 2) + deplacementcentreZ;
  
   alpha = alpha*57.3;
   beta = beta*57.3;
   //bet = 180 - beta;
   
   Serial.print(alpha, DEC);
   Serial.println();
   Serial.print(beta, DEC);
   Serial.println();

}


/**************Demarche*****************/

void Move()
{
    IK();
   delay(1000);
   alpha = alpha*16.6;
   beta = beta*16.6;
   Serial.print(alpha, DEC);
   Serial.println();
   Serial.print(beta, DEC);
   Serial.println();
  
   for(int i=0; i<=3 ; i++)
  { 
  Deplacement(16+3*i,NEUTRE,Temps); //coax
  Deplacement(17+3*i,alpha,Temps); //FEMUR
  Deplacement(18+3*i,beta,Temps); //TIBIAS
  }
 
}

/*****Mesure********* (cm)*/
const int COAX =4.5;
const int FEMUR =5.3;
const int TIBIAS=9.5;
/**************************/
const int Y_LARGEUR=8.6;
const int X_LONGEUR=11.1;     //centre vers l'extrémité des pattes
const int HAUTEUR_CORPS=5.5;
const int DISTANCE_patte_G=6;
/**********************/
#define HAUTEUR 5
#define EMPATTEMENT 8

Si je varie la HAUTEUR et L'empattement sa ne correspond absoluement pas si je mesure avec une regle ...

Je suis paumé la j'applique les angles au bon servo mais je n'arrive toujours pas a cerné la logique.

Je voit pas comment faire bouger le centre de mon robot ? vu que ces mes pattes que je doit faire bouger..... informatiquement parlant je voit pas du tout la ... même si j'ai compris que c'est le centre qui bouge et les pattes qui suivent c'est plus facile a dire qu'a faire xD



#67 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 30 juillet 2016 - 12:03

Apparemment tu veux faire très simple et le voir marcher rapidement donc oublis les Offset uniquement la marche (avancer et tourner ).Voila le principe et ou ça ne va pas , il faut rajouter l angle de COAX aussi.

 

 

 

 

alpha = acos((pow(FEMUR,2)+ pow(L,2) - pow(TIBIAS,2))/ (2*FEMUR*L));
beta = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS));

alpha est incomplet!..

 

principe.png

 

En faisant varier la longueur du Vecteur de  marche tu obtiendra le mouvement avant/arrière 

En faisant varier la longueur du Vecteur de direction tu le feras tourner et le pied suivra toujours le Vecteur de marche et donc pas de glissement ni mouvement bizarre(attention, la valeur ajouter ou soustraite au Vecteur de direction d'une patte dois toujours être l inverse de ces voisines)

pour lever une patte, on soustrait de la valeur Hauteur de l IK sur la patte voulu la hauteur a laquelle on veux qu elle se lève.

Ma cinématique ne fonctionne pas comme ça, je n ai donc pas testé cette version.Mais c est la plus simple qu on peux mettre en place (supprimer : longitudinal, latéral, roulis, tangage, Lacet) difficile de tester sans le faire marcher 

 

Niveau calcule tu m as dis que ça ne te posais pas de problème, je te laisse faire et je te corrigerais ;)



#68 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 30 juillet 2016 - 02:34

Non lol je veux pas aller super vite !
C'est juste que je veux comprendre la base pour pas galèrer ensuite..

le problème avec le alpha je l'avais remarquer et corriger mais merci ^^
Sinon normalement cette partie du programme est juste pour le coax c'est arctan(x/y) non ? Après pour les vecteur de direction il me faut tout de même les offset non ?
OffsetX =longueur/2 + deplacementX
Le déplacementenX je l'initialise à 0 au commencement non? Ensuite je ke modifierai pour lui dire de marcher dans un sens ou dans un autre en appelant une gait ?

#69 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 31 juillet 2016 - 01:32

je suis pas très bon pédagogue désolé.

 

je vais essayer de te donner mon raisonnement de programmation pour mon robot, ça t aidera peut être à comprendre ce qu est l'IK.

 

J'ai fait un parallèle avec le vivant:

 

Dans notre environnement on reçois des instructions de notre entourage(patron ,professeur,amis......)

Ça c est la partie communication du robot (télécommande, port série, bluetooth, wifi, certain capteur......)

 

Si on me demande d'avancer je décide consciemment comment (en marchant, en courant/ je commence avec le pied droit, le pied gauche/ j y vais a quatre patte.......)

Ça c est la partie Gaits de mon robot( on pourrais lui demander d'aller à l'endroit X au lieu de lui dire d'avancer , avec un système gps il pourrait le faire et c est ici que ça se passe aussi.

 

et pour finir quand tu marches tu ne décide pas consciemment de combien tes muscles doivent se contracter pour que tu puisse marcher on ne connais même jamais les valeurs associer.

Ça c est l IK (il gère tout les servo sans que l on ne connaisse jamais leurs valeurs)

 

pourquoi faire cette différence entre l IK et la marche ? Simplement parce que l IK peut être associer a tout ce qui concerne le robot , en plus de la marche on peut imaginer des réflexe lié a des capteur , des position à adopter..... ce système permet de combiné ce que tu veux.

 

exemple avec un IK complet : tu lui demande en posture de se pencher a gauche avec une torsion a droite en allant a telle endroit avec telle démarche ..... l ik va calculer tout les angles malgré tout ces paramètre venant de différent endroit de ton programme sans que tu ne connaisse jamais la valeur de tes servo 

dans se cas chaque nouveau paramètre appliqué à l IK dois prendre en compte la modification de  l Offset par le paramètre précèdent.

 

Dans le cas simplifié que je t'ai présenté plus haut l IK et la marche ne sont qu une seul chose et rien d autre ne sera appliqué dessus , demander au centre contrôlé ou a chaque patte d avancer c est pareil puisque tout les Offset sont ceux d'origine et ne peuvent pas être modifié par autre chose.

 

pour les angles, alpha beta gamma, sont indissociable. Chacun d eux modifie les autres, ainsi i1 a un empattement par défaut qui définit l emplacement du pied du robot (le vecteur de marche passera par la)  , si tu applique un latéral de 2 vers la gauche l Offset_X de droite sera a +2 et celui de gauche sera a -2, gamma et i1 seront modifiés et par conséquent alpha et beta aussi.Il n est pas question de marche mais bien de garder les pieds du robot à leur place alors que son corp se déplace!!

OffsetX =longueur/2 + deplacementX

 

lateral gauche.png

 

 

il en va de même pour la marche , le pied de ta patte devra courir le long de ton vecteur de marche et modifiera tout les angles en même temps (voir schéma IK simplifié plus haut)

 

ton IK connaissant l Offset et la position d origine du pied de ta patte peux calculer gamma et la longueur total de la patte, en soustrayant la longueur du coax il obtiens i1 avec i1 il peux calculer alpha et beta 

 

Voila pour le principe

 



#70 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 31 juillet 2016 - 02:22

void IK()
{
  //IK simple (hauteur , latéral , longitudinal ) :
  
  L = sqrt(pow(HAUTEUR,2)+pow(EMPATTEMENT,2)); //Calcul de l'hypothénuse (Pythagore)
  Serial.print(L, DEC);
  Serial.println();
 
  /***Al-Kashi***/
   gamma1 = atan(12/16); //Angle du COAX distance séparant le centre du robot et l'extrémité des pattes.

   alpha1 = acos((pow(FEMUR,2)+ pow(L,2) - pow(TIBIAS,2))/ (2*FEMUR*L)); //Angle du FEMUR
   beta1 = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS)); //Angle du TIBIAS
   
   Offset_Y = (X_LARGEUR / 2) +  deplacementcentreY;
   Offset_X = Y_LONGEUR / 2 +  deplacementcentreX;
   Offset_Z = HAUTEUR - (HAUTEUR_CORPS / 2) + deplacementcentreZ;
  
   alpha1 = alpha1*57.3;
   delay(50);
   alpha2 = 90 - alpha1;
   delay(50);
   alpha = alpha1 + alpha2;
   delay(50);
   beta=180-(beta1*57.3);
   gamma=(gamma1*57.3)+90;
   
   Serial.print(alpha, DEC);
   Serial.println();
   Serial.print(beta, DEC);
   Serial.println();
   Serial.print(gamma, DEC);
   Serial.println();
   
 
}


/**************Demarche*****************/

void avancer()
{  
   IK();
   delay(200);
   int i=0;
   alpha = alpha*16.6;
   beta = beta*16.6;
   gamma = gamma*16.6;
  
   for(i=0; i<=1 ; i++)
  { 
    Deplacement(21,beta,Temps);
    Deplacement(17+3*i,alpha+450,Temps);  //leve patte (j'ajoute une valeur en PWM pour soulever la patte)
    delay(Temps2);
    Deplacement(16+3*i,gamma+400,Temps); //avance en l'ai
    delay(Temps2);
    Deplacement(17+3*i,alpha,Temps);  //reviens au sol
    Deplacement(16+3*i,gamma-250,Temps3); //ramene la patte qui tire le corp
  }
    
   for( i=2; i<=3; i++)
  { 
    Deplacement(27,beta,Temps);
    Deplacement(17+3*i,alpha+450,Temps);
    delay(Temps2);
    Deplacement(16+3*i,gamma-400,Temps); 
    delay(Temps2);
    Deplacement(17+3*i,alpha,Temps);
    Deplacement(16+3*i,gamma+250,Temps3); 
  }    
}

Voila se que j'ai fait :  Tu pourra remarquer que dans avancer j'ai mis alpha, beta et gamma sur les servomoteur. Puis je fait moins ou plus une valeur pour monter, descendre avancer ou reculer les pattes.

 

dans void setup()  :

Mise en marche initialisation de tout les servomoteur a 90° ou 1500 PWM.

 

ensuite :

Lancement méthode IK :

 

Calcul...

Hypothénuse = 11

Alpha = 90

Beta = 93

Gamma = 90

 

Donc c'est bon ? il me retourne les vrai valeur des angles ? c'est correct ? (a part pour le tibias petit décalage du au dimensions peut etre)

 

Maintenant ou je fait intervenir les Offset dans mon programme ?

 

/*****Mesure********* (cm)*/
const int COAX =6;
const int FEMUR =7;
const int TIBIAS=9.5;
/**************************/
const int X_LARGEUR=8.6;
const int Y_LONGEUR=11.1;     //centre vers l'extrémité des pattes
const int HAUTEUR_CORPS=5.5;   //epaissseur du corps du robot
const int DISTANCE_patte_G=6; 
/**********************/
#define HAUTEUR 9   //distance entre le sol et le haut du robot
#define EMPATTEMENT 7

 

double deplacementcentreX=0; // je les initialises a 0 ?

double deplacementcentreY=0;

double deplacementcentreZ=0;

 

Offset_Y = (X_LARGEUR / 2) + deplacementcentreY;
Offset_X = Y_LONGEUR / 2 + deplacementcentreX;
Offset_Z = HAUTEUR - (HAUTEUR_CORPS / 2) + deplacementcentreZ;

 

Dans mon propre programme je voit pas ou faire intervenir les offset enfaite ^^



#71 Oliver17

Oliver17

    Pilier du forum

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

Posté 31 juillet 2016 - 05:54

Sans pourrir le post une nouvelle fois, mais cela s'adresse en fait aussi à un biped, non ???

 

Pour justement lui apprendre à marcher etc etc ???

 

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#72 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 31 juillet 2016 - 06:01

J'imagine que c'est possible :)

mais encore en pire, je pense que, plus il y a de pattes plus c'est dure !



#73 Oliver17

Oliver17

    Pilier du forum

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

Posté 31 juillet 2016 - 06:23

Bon de toutes façons je ne suis pas encore, mais ça sent la galère encore lol :)


signature_01.png -->

 

Mon Tipeee
 


#74 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 31 juillet 2016 - 07:29

en faite moins il y a de patte plus c est dure sur mon hexapode j ai juste le risque que les patte se touche mais l IK peut définir les limites des pattes vu qu elle calcul les angles .

 

Sur un quadrupède dans l idéale il faut que le point centre se déplace selon le centre de gravité donc des Offset en changement permanent, bon je veux pas effrayer AlexBotMaker c est pas obligatoire ça dépendra des performance que tu recherches pour ton robot.

 

Pour un bipède sauf surdimensionner ses pieds il faudra obligatoirement un accéléromètre et un gyroscope et je ne pense pas que ma méthode soit la bonne approche;) j essayerais peut être un jour .

 

sur le même principe ça peut aussi s appliquer a un bras articulé

 

je vais essayer de te faire un petit truc sur géogébra avec les paramètre de ton robot et comment mettre en place l IK mais ne connaissant pas le sens ni les angle de montage des servo Coax il faudra que tu corriges .



#75 Mike118

Mike118

    Staff Robot Maker

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

Posté 31 juillet 2016 - 07:43

@Vaelan
En fait si tu en refais un le top serait que tu te film en le faisant comme ça ça fera un super tuto et pour ceux qui voudront reprendre le même genre de méthode pour un bras articulé ou bien un jambe ou je ne sais pas quoi encore et bien ils auront ton tuto comme base pour faire leur modélisation ;) 


Bonne continuation en tout cas ;) 


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  

 

 

 


#76 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 31 juillet 2016 - 08:38

Justement j'aimerai aussi faire un vrai tutoriel bien expliquer pour le quadrupède sa se fait quand même beaucoup plus maintenant se type de robot.

J'aimerai refaire le mien en plus petit et le moins chère possible pour que n'importe qui puisse le refaire se serait cool !

Du début à la fin la mécanique, les branchement, la prog...etc



#77 Mike118

Mike118

    Staff Robot Maker

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

Posté 31 juillet 2016 - 11:06

Justement j'aimerai aussi faire un vrai tutoriel bien expliquer pour le quadrupède sa se fait quand même beaucoup plus maintenant se type de robot.

J'aimerai refaire le mien en plus petit et le moins chère possible pour que n'importe qui puisse le refaire se serait cool !

Du début à la fin la mécanique, les branchement, la prog...etc

 

Peut être que tu pourrais travailler avec jekert  voir le sujet ici 

à voir ce que vous en pensez tout les deux =) 

PS : Quoi qu'il en soit sachez que même si je ne participe pas forcément, je suis vos sujets ( comme tout ce qui se passe sur le forum ;) ) c'est juste qu'en général je ne participe pas sur un sujet quand je vois qu'il " avance bien sans moi " (sauf si je peux faire de petites précisions importante ou corriger une eurreur ou autre =) )  Donc voilà. Bonne continuation ;)  


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  

 

 

 


#78 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 01 août 2016 - 11:12

J'ai regardée le sujet ! il est pas mal avancée et ces programmes sont plus structurées que les miens ^^

Je vais voir avec lui quand il se lancera plus en détails dans la prog ! :)

Moi je galère la mais je compte en faire un pareil mais avec une base toute carrée et des système de rack pour les cartes mon idées de base pour mon robot mais pas top puis alléger le poids aussi :)

 

Mais la, ce qui me rend dingue c'est la cinématique ! xD

J'ai l'impression de comprendre quelque chose un jour puis le lendemain je comprend plus rien... lol

 

@Vaelan

J'ai commencée à faire se que j'ai cru comprendre de se que tu m'a dit :

/*****Mesure********* (cm)*/
const int COAX =6; 
const int FEMUR =7; 
const int TIBIAS=9.5; 
/**************************/
const int X_LONGEUR=11.1;
const int Y_LARGEUR=8.6;     //centre vers l'extrémité des pattes
const int HAUTEUR_CORPS=5.5;
const int DISTANCE_patte_G=6;
/**********************/
#define HAUTEUR 9+deplacementcentreZ        //que j'ajoute a l'un ou a l'autre ne changera que la valeur de lhypothénuse...
#define EMPATTEMENT 7+deplacementcentreX 


void IK()
{
  //IK simple (hauteur , latéral , longitudinal ) :
  
  L = sqrt(pow(HAUTEUR,2)+pow(EMPATTEMENT,2)); //Calcul de l'hypothénuse 
  Serial.print(L, DEC);
  Serial.println();
 
  /***Al-Kashi***/
   gamma1 = atan(X_LONGEUR/Y_LARGEUR);   //L'angle gamma est'il bon ? est-ce normal que je doivent rajouter 45°?????
   alpha1 = acos((pow(FEMUR,2)+ pow(L,2) - pow(TIBIAS,2))/ (2*FEMUR*L));
   beta1 = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS));
  
   alpha1 = alpha1*57.3;
   delay(50);
   alpha2 = 90 - alpha1;
   delay(50);
   alpha = alpha1 + alpha2;
   delay(50);
   beta=180-(beta1*57.3);
   gamma=(gamma1*57.3)+45;
   
   Serial.print(alpha, DEC);
   Serial.println();
   Serial.print(beta, DEC);
   Serial.println();
   Serial.print(gamma, DEC);
   Serial.println();
   
}

void Offset()
{
   Offset_X = (Y_LARGEUR / 2) +  deplacementcentreX;
   Offset_Y = (X_LONGEUR / 2) +  deplacementcentreY;
   Offset_Z = HAUTEUR - (HAUTEUR_CORPS / 2) + deplacementcentreZ;
   delay(50);
   IK();
}

/**************Demarche*****************/
void Move()
{
  deplacementcentreX=0;
  deplacementcentreY=0;    // modifier les valeur ici revient a modifier l'hypothénuse donc l'extrémité de la patte...
  deplacementcentreZ=0;
  Offset();
  delay(2000);
  
   alpha = alpha*16.6;  //degrée -> PWM
   beta = beta*16.6;
   gamma = gamma*16.6;
   
    Deplacement(16,gamma,Temps);  //test sur une patte pour voir la reaction
    Deplacement(17,alpha,Temps);  
    Deplacement(18,beta,Temps);
}

Le problème c'est que sa n'a pas véritablement de sens se que je fait, que j'agisse sur l'empattement ou sur la hauteur ne change rien.... Sa modifie effectivement l’hypoténuse mais je peux pas gérer la hauteur a proprement dit... Donc je comprend pas comment je peux faire interagir mes offset avec mes angles ...... Puis y'a gamma aussi au quel je doit rajouter 45° sans savoir pourquoi ?

c'est bien atan(x/y);
Donc voila euh je suis a nouveau paumé xD



#79 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 223 messages
  • Gender:Male

Posté 01 août 2016 - 08:46

Salut :)

Je veux bien travailler avec toi pour le tutoriel mais j'ai beau suivre ton sujet avec attention, je ne comprend pas encore...

Je viens de finir de monter la version métal, je vais d'abord essayer de programmer une marche sans cinématique inverse. Puis m'y essayer...

Si tu cherches un modèle de structure, ALLBOT met à disposition les fichiers 3D qui permettent de construire des quadrupèdes simples et modulable ici. Si ça peut te donner des idées.


Mon blog  ------  101robotics.com

Ouvrage    -----  Guide pour débuter avec Arduino

Ancien Blog  --  Journal d'un Arduinaute


#80 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 01 août 2016 - 09:26

Salut Jekert ! Ce serait cool que tu mette quelques photos de ton robot, la mécanique m'intéresse beaucoup aussi !

Surtout quand c'est en métal ;) Tu as une fraiseuse numérique ?

 

Ne tqt pas comme ta pu le remarquer moi-même je suis loin du compte avec la cinématique inverse ! lol

 

Je vais jeter un coup d'oeil, je ne connaissait pas ALLBOT !

Moi je projette de refaire un robot carré, totalement carré avec un système de rack pour ranger les cartes,  quelque chose de simple à réaliser et peut chère pour que se soit accessible pour un grand nombre, un matériaux léger et qu'on peut découpé au cutter.

Sa permettra aux fan de robotique de s'en procurer un pour pas chère même si ils ont d'autre projets en cours en ayant qu'a prendre ma cinématique de base et la retravailler a leurs façon. Je vais faire un document PDF complet du montage etc.. peut être plus vidéo. A voir !

 

Voila, en tout cas si ta des question sur le quadrupède demande ! après je suis pas un pro surtout en prog.

Sinon poste ton robot ;)







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

0 members, 0 guests, 0 anonymous users