Aller au contenu


Photo

Naissance de mon quadripède


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

#81 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 16 juin 2023 - 09:21

Même un quadrupède qui fonctionne très bien, se met à patiner si la cinématique n'est pas bonne. C'est très, très courant.

 

Il y a quand même quelque chose que tu peux faire.

Fait un jeu de tibias sans patins et refait un test sur le parquet.

 

Perso, je pense que c'est plutôt positif qu'un quadrupède soit capable de marcher sur un tapis.

j'ai refait l'essai, mais je confirme que les embouts apportent à chaque fois un plus (10 à 20%), même si je n'arrives pas à retrouver le niveau...

 

En revanche, j'ai rattrapé quelques jeux et à nouveau il change totalement de comportement ! il saute, et parfois tombe ! et même en applatissant la courbe du mouvement !

 

je dois dire que je suis un peu perdu. je vais le mettre sur un banc fixe.

 

une question, pour un mouvement de patte tu programmes combien de points ?



#82 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 17 juin 2023 - 07:25

Voici le type de mouvement que je fais.

Il s'agit d'un rectangle de 160mm de long. Pour plus de clarté, ici, il est symétrique par rapport à l'axe Y de la patte, mais habituellement, je fais un décalage de 20mm vers l'arrière du robot.

Le pas est de 10mm.


int FRx[]= { 80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70,    -80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70};
int FLx[]= { 80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70,    -80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70};
int BRx[]= {-80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70,     80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70};
int BLx[]= {-80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70,     80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70};
 
int FRy[]= {  0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10,      0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10};
int FLy[]= {  0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10,      0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10};
int BRy[]= {  0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10,      0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10};
int BLy[]= {  0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10,      0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10};
 

Avec une moulinette, je lis chaque position pour chaque patte en X et Y, je calcule les angles et j'envoie les ordres à tous les servos.

 

J'ai également une autre version qui donne les paramètres du rectangle, le pas et la translation à une moulinette, donc pas de tableau.

C'est moins rudimentaire. C'est un choix.

 

FRLS - Front Right Left Servo

FRRS - Front Right Right Servo

etc.

 

int Ax=90, Bx=-90, Y=15, stp=10, F_tr=-10, B_tr=-20;          // rectangle description
 
void Walk(){
  for( int i=Ax;i>=Bx;i=i-stp){ IK(+i+F_tr,-Y,FRLS,FRRS); IK(-i+B_tr,+Y,BRLS,BRRS); IK(+i-F_tr,+Y,FLLS,FLRS); IK(-i-B_tr,-Y,BLLS,BLRS); }
  for( int i=Bx;i<=Ax;i=i+stp){ IK(+i+F_tr,+Y,FRLS,FRRS); IK(-i+B_tr,-Y,BRLS,BRRS); IK(+i-F_tr,-Y,FLLS,FLRS); IK(-i-B_tr,+Y,BLLS,BLRS); }
}

 



#83 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 17 juin 2023 - 08:37

Voici le type de mouvement que je fais.

Il s'agit d'un rectangle de 160mm de long. Pour plus de clarté, ici, il est symétrique par rapport à l'axe Y de la patte, mais habituellement, je fais un décalage de 20mm vers l'arrière du robot.

Le pas est de 10mm.


int FRx[]= { 80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70,    -80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70};
int FLx[]= { 80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70,    -80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70};
int BRx[]= {-80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70,     80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70};
int BLx[]= {-80,-70,-60,-50,-40,-30,-20,-10,  0, 10, 20, 30, 40, 50, 60, 70,     80, 70, 60, 50, 40, 30, 20, 10,  0,-10,-20,-30,-40,-50,-60,-70};
 
int FRy[]= {  0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10,      0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10};
int FLy[]= {  0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10,      0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10};
int BRy[]= {  0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10,      0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10};
int BLy[]= {  0,-10,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-10,      0, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10};
 

Avec une moulinette, je lis chaque position pour chaque patte en X et Y, je calcule les angles et j'envoie les ordres à tous les servos.

 

J'ai également une autre version qui donne les paramètres du rectangle, le pas et la translation à une moulinette, donc pas de tableau.

C'est moins rudimentaire. C'est un choix.

 

FRLS - Front Right Left Servo

FRRS - Front Right Right Servo

etc.

 

int Ax=90, Bx=-90, Y=15, stp=10, F_tr=-10, B_tr=-20;          // rectangle description
 
void Walk(){
  for( int i=Ax;i>=Bx;i=i-stp){ IK(+i+F_tr,-Y,FRLS,FRRS); IK(-i+B_tr,+Y,BRLS,BRRS); IK(+i-F_tr,+Y,FLLS,FLRS); IK(-i-B_tr,-Y,BLLS,BLRS); }
  for( int i=Bx;i<=Ax;i=i+stp){ IK(+i+F_tr,+Y,FRLS,FRRS); IK(-i+B_tr,-Y,BRLS,BRRS); IK(+i-F_tr,-Y,FLLS,FLRS); IK(-i-B_tr,+Y,BLLS,BLRS); }
}

 

 Merci. C'est sensiblement ce que je fais, donc pas de piste de ce côté... je programme les servos directement via une équation, j'avais débuté par une demi-ellipse et je suis revenu pour l'instant à un rectangle. J'ai une amplitude de 120 mm et un pas sensiblement équivalent à ce que tu fais.

En revanche quand je regarde mon robot à une fréquence de pas importante il ne semble pas déployer l'amplitude programmée et si je rajoute un délai pour chaque servo, il n'avance quasiment plus...



#84 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 17 juin 2023 - 11:25

si je rajoute un délai pour chaque servo, il n'avance quasiment plus...

Moi, je mets un delay() après un ordre d'une paire de servos.

L'idée, c'est que le mouvement aboutisse, avant d'entreprendre le mouvement pour autre patte.

Quand je parle de mouvement, c'est pour une seule position des tableaux.



#85 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 17 juin 2023 - 05:31

Rattrapage des jeux + amélioration programmation + changement revêtement mohair : 0.82 m/s !

 

 

mais toujours aussi nul sur parquet...



#86 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 17 juin 2023 - 06:32

C'est super bien !

 

Je me rappelle que Sandro m'avait conseillé de d'abord donner un ordre au 8 servos, puis de faire un delay().

Je l'avais fait, mais je ne sais plus pourquoi je n'avais pas retenu ce conseil, mais cela me semble assez logique, et je m'étais promis de revoir cela, puis j'ai oublié.

Peut-être devrais tu essayer.



#87 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 17 juin 2023 - 07:36

C'est super bien !

 

Je me rappelle que Sandro m'avait conseillé de d'abord donner un ordre au 8 servos, puis de faire un delay().

Je l'avais fait, mais je ne sais plus pourquoi je n'avais pas retenu ce conseil, mais cela me semble assez logique, et je m'étais promis de revoir cela, puis j'ai oublié.

Peut-être devrais tu essayer.

merci ! Je vais essayer, actuellement j'ai deux "delay", 1 après chaque paire de pattes



#88 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 23 juin 2023 - 03:14

Bonjour

 

C'est le moment du point hebdomadaire sur la croissance et les progrès de mon quadrupède... Voici la bête il ya quelques instants :

 

20230623_151620.jpg

 

Comme vous pouvez le voir, il y a quelque changement:

 

* Il a été baptisé: Jag'bot I

* Il a revêtu un beau pelage signe d'une grande pudeur

* L'ajout de pieds inclinés

* l'optimisation des temps servo

* La confirmation de la grande efficacité de la "peau de phoque" en mohair

 

Ses dernières performances:

 

* Sur tapis:                        0.93 m/s  (10.7s/10m)

* Sur terrasse composite: 0.89 m/s  (11.2s/10m)

* Sur parquet vitrifié:         0.82 m/s  (12.1s/10m)

 

Ca devient sympa et même sportif quand on veut le rattraper avant qu'il ne se prenne un mur ou autre obstacle !

 

 

 

Le travail des prochains jours avant d'attaquer la partie capteurs:

 

* Un travail sur les pieds il y a vraiment du potentiel de ce côté là

* Une amélioration de la séquence des mouvements

* Et toujours ces foutus jeux mécaniques

 

Pour finir, Jag'bot I allongé en toute intimité  :ignat_02:

 

20230623_162640.jpg



#89 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 23 juin 2023 - 06:35

Super !

L'allure sur le parquet est vraiment bien ! Peux-tu nous donner les détails du mouvement ?

 

Sa robe de chambre léopard est très sexy, voir torride . . .  :wub:



#90 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 23 juin 2023 - 11:14

Super !

L'allure sur le parquet est vraiment bien ! Peux-tu nous donner les détails du mouvement ?

 

Sa robe de chambre léopard est très sexy, voir torride . . .  :wub:

Amplitude 120 mm, pas 15 mm, position haute 18 mm, basse 0 mm, avec une pente pour pour passer de l'un à l'autre

1 delay après la commande des 8 servos



#91 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 24 juin 2023 - 06:46

avec une pente pour pour passer de l'un à l'autre

Aujourd'hui, je ne fais plus de positions intermédiaires pour entre la ligne basse et la ligne haute. Cela ne sert pas à grand chose et permet de gagner un peu de temps.

 

As-tu essayé un écart supérieur à 18mm ? Pourquoi 120mm, est ce le maximum que tu puisses faire ?

 

Au début de ta vidéo, alors que Jag'bot est immobile, on voit que la hauteur au garrot est à son maximum.

As-tu essayé d'augmenter la hauteur au garrot pendant la course ? Cela te permettra d'aller plus vite.

 

Je suppose donc que tu fais un rectangle.



#92 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 24 juin 2023 - 08:46

Aujourd'hui, je ne fais plus de positions intermédiaires pour entre la ligne basse et la ligne haute. Cela ne sert pas à grand chose et permet de gagner un peu de temps.

 

As-tu essayé un écart supérieur à 18mm ? Pourquoi 120mm, est ce le maximum que tu puisses faire ?

 

Au début de ta vidéo, alors que Jag'bot est immobile, on voit que la hauteur au garrot est à son maximum.

As-tu essayé d'augmenter la hauteur au garrot pendant la course ? Cela te permettra d'aller plus vite.

 

Je suppose donc que tu fais un rectangle.

 

Je trouve que l'intermédiaire entre le haut et le bas diminue un peu les sauts et du coup améliore la trajectoire qui est un de mes problèmes principaux

Il faut aussi que j'optimise les élastiques que j'ai mis pour réduire les jeux mais qui peuvent aussi entraver ou alors favoriser les mouvements.

 

Pour le reste je pense que j'ai beaucoup à tester, les paramètres sont nombreux et surtout dépendants les uns des autres. Sans me lancer dans des plans d'expérience mathématiquement très rigoureux, je fais beaucoup de tests.

Je suis limité à 140 mm en amplitude, mais je n'ai pas trouvé de gain à aller jusque là. Cette limite est probablement liée aussi aux autres paramètres, donc les choses peuvent évoluer.

Je ne suis pas allé non plus au-delà de 18mm en hauteur, il faut que j'essaie.

Je fais plus exactement un trapèze isocèle dont l'angle est proportionnel à la hauteur , ce qui me permet de le faire varier en ne faisant bouger qu'un paramètre.

 

Je vais voir ta suggestion sur le garrot. N'est-ce pas lié aussi à la force des servos de pouvoir être plus haut ?

 

Je passe beaucoup de temps à faire ces essais, en fait j'adore ça. 



#93 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 24 juin 2023 - 12:59

Je vais voir ta suggestion sur le garrot. N'est-ce pas lié aussi à la force des servos de pouvoir être plus haut ?

Bof ! Je n'en sais rien, mais intuitivement, je dirais que plus la patte est verticale et moins le servo soufre.

En tout cas, sur mes quadrupèdes, lorsque je baisse le garrot, c'est très net, ils sont moins rapides.

Donc, j'essaye de monter le garrot au maximum.

 

Dans mon code, j'ai un traitement des erreurs, des positions à ne pas dépasser. Puis quand le mouvement est validé, je mets cette portion de code en commentaire.



#94 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 24 juin 2023 - 03:52

Bof ! Je n'en sais rien, mais intuitivement, je dirais que plus la patte est verticale et moins le servo soufre.

En tout cas, sur mes quadrupèdes, lorsque je baisse le garrot, c'est très net, ils sont moins rapides.

Donc, j'essaye de monter le garrot au maximum.

 

Dans mon code, j'ai un traitement des erreurs, des positions à ne pas dépasser. Puis quand le mouvement est validé, je mets cette portion de code en commentaire.

Actuellement je suis à 15 cm au garrot en fonctionnement

 

La maximum est 17 cm (sécurisé aussi au niveau du code) , mais j'ai une perte de vitesse (0.15 s/m) . Je viens de faire une essai

 

Mon optimum est bien à 15 cm, et effectivement sous les 15 cm il y a une perte importante de vitesse.

 

Peut-être qu'avec d'autres paramètres, comme la hauteur du mouvement, je pourrais monter un peu. A voir.



#95 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 25 juin 2023 - 04:42

Aujourd'hui, je ne fais plus de positions intermédiaires pour entre la ligne basse et la ligne haute. Cela ne sert pas à grand chose et permet de gagner un peu de temps.

 

As-tu essayé un écart supérieur à 18mm ? Pourquoi 120mm, est ce le maximum que tu puisses faire ?

 

Au début de ta vidéo, alors que Jag'bot est immobile, on voit que la hauteur au garrot est à son maximum.

As-tu essayé d'augmenter la hauteur au garrot pendant la course ? Cela te permettra d'aller plus vite.

 

Je suppose donc que tu fais un rectangle.

@Oracid , tu avais raison , en montant la hauteur de 18mm à 24 mm j'ai gagné quelques 10ème (sauf sur tapis où j'ai légèrement perdu) :

 

* Sur tapis:                        0.92 m/s  (10.8s/10m)

* Sur terrasse composite: 1.06 m/s  (9.5s/10m)

* Sur parquet vitrifié:         0.88 m/s  (11.3/10m)

 

Si j'augmente encore je deviens trop instable, idem sur la hauteur au garrot optimale à 15 cm sur un maxi de 17cm. (ce que j'appelle garrot est la cote du sol à l'axe des servos)

je ne suis pas loin de l'optimum en vitesse, il me reste à travailler sur les pieds.

 

Et surtout de lui donner des sens, la vue, l'ouïe et le toucher... 

 

A la semaine prochaine !  :) 



#96 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 27 juin 2023 - 10:18

Bonjour

 

J'ai un problème, peut-être allez vous pouvoir me renseigner.

 

J'utilise une carte pour piloter mes servos qui utilise le protocole I2C. j'ai zéro problème

 

J'ai une carte qui utilise les signaux PWM, j'ai voulu essayer et là c'est la cata. J'imagine que je programme mal ? Les servos fonctionnent correctement même si je n'arrive pas à les actionner aussi rapidement qu'avec ma carte I2c et d'un seul coup (au bout d'une vingtaine de secondes) ils se mettent à faire n'importe quoi. J'arrête la carte, je remets en route et rebelotte ! voilà ce que ça donne sur mon quadripède. le mouvement qu'il fait en se baissant est totalement involontaire !!!

 

Une piste ?

 

https://youtube.com/...o?feature=share



#97 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 28 juin 2023 - 05:57

Aucune idée.

Pourrais-tu nous mettre les 2 codes ?



#98 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 28 juin 2023 - 06:07

Aucune idée.

Pourrais-tu nous mettre les 2 codes ?

ce sont exactement les deux mêmes codes pour la programmation des mouvements, j'ai dû juste augmenter les tempos delay et même en mettre une après chaque commande de servo, sinon ça ne fonctionnait pas.

 

Dans le cas de l'i2c j'utilise la fonction fournie par le fabriquant de la carte

Dans le cas du PWM j'utilise la fonction classique qu'on retrouve dans toutes les demos, kits et aussi préconisée par le vendeur de la carte :

 

defmouvt_servo(broche,angle)

       pwm=PWM(Pin(broche))

       pwm.freq(50)

      angle_pwm=int(1638+36.41*angle)

      pwm.duty_u16(angle_pwm)

 

ce que je trouve étonnant :

 

* Dans le cas du pwm je suis obligé de mettre un delay beaucoup plus élevé, avec le même que mon code actuel, ça ne marche pas.

* Et même avec un delay élevé, le mouvement est correct une vingtaine de seconde et ensuite il rentre dans un cycle régulier mais dégradé où on a l'impression que les servos s'interrompent, ce qu'on voit sur le mouvement du quadripède.

 

Après c'est juste une curiosité , parce que ma carte i2c est top, je continuerais avec ce modèle. Ne vous prenez donc pas la tête avec ce problème, c'est juste au cas où vous auriez déjà rencontré le phénomène. cela peut-il être lié au type de servo ?

 

Voilà les deux cartes en question:

 

la carte "i2c", marque kiktronic

 

la carte "pwm" marque waveshare



#99 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 28 juin 2023 - 08:39

Pourrais-tu m'expliquer cette instruction : angle_pwm=int(1638+36.41*angle)



#100 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 165 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 28 juin 2023 - 08:45

je ne comprends pas trop ta remarque " carte i2C " / "carte PWM" ... 

De ce que je vois, ces cartes sont juste des cartes pour faciliter le câblage du pico avec des servo, mais ce sont directement les broches du pico qui pilotent les servo. Il n'y a pas de composants intermédiaire. 

Par contre la différence entre les deux c'est que c'est pas forcément les même broches qui sont utilisées dans les deux cartes ... 
 


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  

 

 

 





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

0 members, 0 guests, 0 anonymous users