Aller au contenu


Photo

Naissance de mon quadripède


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

#41 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 28 mai 2023 - 01:33

Et bien dans le deuxième liens, tu peux voir qu'avec Sandro et Patrick, nous avons été assez loin dans la recherche de la bonne trajectoire. C'est vrai qu'il y a 10 pages, mais je pense que cela vaut le coup de les feuilleter, pour avoir une idée de la technique.

En résumé, tu peux prendre la trajectoire de Patrick qui résulte d'étude assez poussé, ou la mienne, le rectangle, très simple, efficace et facile à mettre en oeuvre et à programmer.

 

Pour tester, tu devrais mettre ton quadrupède sur un piédestal, c'est plus pratique.

Merci je vais regarder ça.

 

J'ai rajouté une variable dans mes calculs qui est longueur du tibia à partir de son dernier point de fixation, longueur que je vais faire varier pour en voir les impacts.



#42 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 28 mai 2023 - 04:17

Et bien dans le deuxième liens, tu peux voir qu'avec Sandro et Patrick, nous avons été assez loin dans la recherche de la bonne trajectoire. C'est vrai qu'il y a 10 pages, mais je pense que cela vaut le coup de les feuilleter, pour avoir une idée de la technique.

En résumé, tu peux prendre la trajectoire de Patrick qui résulte d'étude assez poussé, ou la mienne, le rectangle, très simple, efficace et facile à mettre en oeuvre et à programmer.

 

Pour tester, tu devrais mettre ton quadrupède sur un piédestal, c'est plus pratique.

 

 

Vraiment très intéressant...

Pourquoi as-tu adopté une trajectoire rectangle suite à ces différentes études qui semblent donner des formes plus optimisées ?



#43 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 28 mai 2023 - 05:27

Pourquoi as-tu adopté une trajectoire rectangle suite à ces différentes études qui semblent donner des formes plus optimisées ?

Parce que j'ai un toc, la simplicité.

Jusqu'à maintenant, mes quadrupèdes ont une allure de trot. Actuellement, j'étudie la possibilité d'une allure de marche.

Quand je publierai le résultat, tout le monde trouvera cela évident. En attendant, même avec un rectangle, je galère.

De plus, avec des Lego et des servos à bas prix, je ne pense pas que la trajectoire soit le paramètre qui ait la plus grande incidence.



#44 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 28 mai 2023 - 06:09

Parce que j'ai un toc, la simplicité.

Jusqu'à maintenant, mes quadrupèdes ont une allure de trot. Actuellement, j'étudie la possibilité d'une allure de marche.

Quand je publierai le résultat, tout le monde trouvera cela évident. En attendant, même avec un rectangle, je galère.

De plus, avec des Lego et des servos à bas prix, je ne pense pas que la trajectoire soit le paramètre qui ait la plus grande incidence.

 

Sur ce point là je suis entièrement d'accord, inutile d'apporter une précision couteuse en temps et en complexité alors que le gain sera complètement annulé par des jeux ou autres impondérables.

Mais je trouve ça super intéressant.

Je vais programmer des demis ellipses (une demi ellipse pour l'aller et une pour le retour, avec des rayons différents et paramétrables, juste pour l'intérêt du calcul et de la programmation, mais il n'est pas impossible que je revienne à quelque chose de très basique ! 

En tout c'est très cool de découvrir ça.



#45 pat92fr

pat92fr

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 673 messages
  • Gender:Male

Posté 28 mai 2023 - 06:51

Pour appliquer une trajectoire, il y a quelques prérequis en termes de programmation à connaitre :

- savoir cadencer une boucle d'exécution avec un intervalle de temps constant (par exemple 20ms voire moins),

- invoquer une fonction de calcul qui retourne la position du pied dans un repère cartésien XYZ en fonction du temps qui passe

- invoquer une fonction de calcul de cinématique inverse, qui permet de convertir la position XYZ du pied en la position des servos de la jambe

- appliquer la position aux servo de la jambe (PWM ou autre).

 

La cadence de ta boucle est liée à la cadence de commande des servos. Si les servos sont standards, ce sera entre 50Hz et 333Hz. S'ils sont intelligents, faut voir en fonction de leur caractéristiques.

 

A chaque itération (Tick à 20ms ou moins), tu vas devoir dérouler les calculs pour les 4 pattes en parallèle. A chaque itération, invoquer 4 fois le calcul de trajectoire, et 4 fois le calcul de cinématique inverse et enfin commander les 8 ou 12 servos. Tu devras t'assurer que le temps des calculs tient dans l'intervalle de temps choisi.

 

Ensuite, tu devras fixer quelques paramètres (constantes ou contrôlables à distance) :

- la période d'un cycle complet du pied (exemple P=1s ou moins) 

- la position du pied au repos (z0)

- la hauteur de swing (h)

- la vitesse du robot (V)

 

Pour une démarche de type trot, il faudra appliquer un déphasage entre les pattes de 180° (ou une demie période) pour faire simple :

- Avant gauche et Arrière droit avec un déphasage nul

- Avant droit et Arrière gauche avec un déphasage de 180°

 

Chaque jambe alterne les phases de stance et de swing. Tu vas donc avoir deux fonctions de calcul de la position du pied, l'une pour la phase de stance (au contact) et une autre pour la phase de swing (en l'air). Tu passes de l'une à l'autre en fonction du temps qui passe, chacune travaillant pendant une demie période P, alternativement.

 

Enfin, pour la trajectoire basique :

- en phase de stance (au contact) = la trajectoire du pied est imposée par la trajectoire du robot. Si le robot avance à une vitesse linéaire V, les pieds reculent à la même vitesse, à plat. 

- en phase de swing (en l'air) = le pied avance à la vitesse V. La hauteur peut etre une formule simple de type "z0+h.sin(x)" avec z0 la hauteur au repose, h une constante de hauteur de swing et x variant de 0 à pi durant la phase de swing, proportionnellement au temps qui passe durant cette demi période.

 

Pour commencer, tu peux faire en sorte que le pied passe autant de temps en avant de l'épaule qu'en arrière, aussi bien en phase de swing que de stance.

 

Bon courage. 



#46 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 28 mai 2023 - 07:00

Pour appliquer une trajectoire, il y a quelques prérequis en termes de programmation à connaitre :

- savoir cadencer une boucle d'exécution avec un intervalle de temps constant (par exemple 20ms voire moins),

- invoquer une fonction de calcul qui retourne la position du pied dans un repère cartésien XYZ en fonction du temps qui passe

- invoquer une fonction de calcul de cinématique inverse, qui permet de convertir la position XYZ du pied en la position des servos de la jambe

- appliquer la position aux servo de la jambe (PWM ou autre).

 

La cadence de ta boucle est liée à la cadence de commande des servos. Si les servos sont standards, ce sera entre 50Hz et 333Hz. S'ils sont intelligents, faut voir en fonction de leur caractéristiques.

 

A chaque itération (Tick à 20ms ou moins), tu vas devoir dérouler les calculs pour les 4 pattes en parallèle. A chaque itération, invoquer 4 fois le calcul de trajectoire, et 4 fois le calcul de cinématique inverse et enfin commander les 8 ou 12 servos. Tu devras t'assurer que le temps des calculs tient dans l'intervalle de temps choisi.

 

Ensuite, tu devras fixer quelques paramètres (constantes ou contrôlables à distance) :

- la période d'un cycle complet du pied (exemple P=1s ou moins) 

- la position du pied au repos (z0)

- la hauteur de swing (h)

- la vitesse du robot (V)

 

Pour une démarche de type trot, il faudra appliquer un déphasage entre les pattes de 180° (ou une demie période) pour faire simple :

- Avant gauche et Arrière droit avec un déphasage nul

- Avant droit et Arrière gauche avec un déphasage de 180°

 

Chaque jambe alterne les phases de stance et de swing. Tu vas donc avoir deux fonctions de calcul de la position du pied, l'une pour la phase de stance (au contact) et une autre pour la phase de swing (en l'air). Tu passes de l'une à l'autre en fonction du temps qui passe, chacune travaillant pendant une demie période P, alternativement.

 

Enfin, pour la trajectoire basique :

- en phase de stance (au contact) = la trajectoire du pied est imposée par la trajectoire du robot. Si le robot avance à une vitesse linéaire V, les pieds reculent à la même vitesse, à plat. 

- en phase de swing (en l'air) = le pied avance à la vitesse V. La hauteur peut etre une formule simple de type "z0+h.sin(x)" avec z0 la hauteur au repose, h une constante de hauteur de swing et x variant de 0 à pi durant la phase de swing, proportionnellement au temps qui passe durant cette demi période.

 

Pour commencer, tu peux faire en sorte que le pied passe autant de temps en avant de l'épaule qu'en arrière, aussi bien en phase de swing que de stance.

 

Bon courage. 

Merci pour ces conseils !

 

Pour les fonctions de calcul, c'est OK, j'ai bossé aujourd'hui dessus... (en XY) pas en (XYZ) !

Pour le reste il faut que je comprenne tout, je parle à là des caractéristiques de la marche du quadrupède.

Pour la programmation, pure, je progresse et je pense savoir faire.

 

Pour l'instant j'ai tout fait dans excel, je vais passer au micro ptyhon et je progresserai par expérience.



#47 pat92fr

pat92fr

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 673 messages
  • Gender:Male

Posté 28 mai 2023 - 08:08

Si tu as la possibilité de coder en Python et d'utiliser des outils de visualisation, comme mathplotlib, cela te permet de valider tes algorithmes sur PC avant de les porter sur le robot. Ca peut faire gagner beaucoup de temps au final !



#48 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 29 mai 2023 - 06:02

Toute première marche, livrée telle quelle... avec les calculs de cinématique inverse et une trajectoire d'une demi-ellipse...

 

Il va beaucoup plus vite que le tout premier, mais il y a beaucoup d'améliorations à apporter , il s'effondre beaucoup sur ses pattes et saute aussi beaucoup trop...

 

Mais c'est sympa...

 

je suis content de ma journée...  :ignat_02:  content aussi de mes progrès en micro-python , je commence à maîtriser le Pico...

 



#49 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 29 mai 2023 - 08:16

Excellent !

Le reste va suivre.

Viens-tu à la TRR ?



#50 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 29 mai 2023 - 09:51

Excellent !

Le reste va suivre.

Viens-tu à la TRR ?

 

je serais venu en spectateur vraiment, mais j'ai une grosse fête ce WE...

 

L'année prochaine certainement, je commence à me prendre au jeu...

 

Et là je viens de comprendre pourquoi il fait des bonds, j'ai un problème de signe dans mes formules, du coup ma demi-ellipse est à l'envers (la partie bombée en bas !!!)  :(



#51 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 31 mai 2023 - 12:53

Je n'ai pas trop le temps en ce moment , mais j'ai commencé à faire varier quelques paramètres et à mesurer "la performance" du robot, avec juste l'objectif de voir les impacts des paramètres. Entre le nouveau-né et la version la plus rapide je suis passé de 80s pour faire 10 m (Oracid on ne se moque pas !  :laugh1: ) à 30s... Ce que j'ai constaté, pour l'instant, effectivement, c'est :

 

 * Que l'équation du mouvement a peu d'impact, voire au contraire, compte tenu de l'ensemble des jeux de ma construction, et que finalement le rectangle était le plus performant (pour l'instant)

*  Qu'il est plus facile de gagner en vitesse en augmentant la cadence plutôt que la foulée qui rapidement génère des problèmes liés à la construction. (tiens comme pour un coureur à pied !)

 

J'ai encore beaucoup de paramètres à tester, mais pour l'instant il faut que j'améliore la mécanique et la rigidité. Comme l'a suggéré Pat92fr, il faut que j'abaisse le centre de gravité, que j'augmente un peu sa largeur au niveau des pattes. Il faut que j'améliore la rigidité tout en réduisant son poids, j'attends des pièces pour cela. Mon objectif est de parvenir à 20s pour 10m. On verra après, je pense que j'ai des optimisations à faire au niveau de la programmation des mouvements, ce que je ne maîtrise pas encore...

 

TRR 2030, me voilà !  :yahoo:



#52 Mike118

Mike118

    Staff Robot Maker

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

Posté 31 mai 2023 - 03:58

Tu t'es trompé c'est pas 2030 c'est 2024 ;)


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  

 

 

 


#53 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 31 mai 2023 - 05:51

Pour appliquer une trajectoire, il y a quelques prérequis en termes de programmation à connaitre :

- savoir cadencer une boucle d'exécution avec un intervalle de temps constant (par exemple 20ms voire moins),

- invoquer une fonction de calcul qui retourne la position du pied dans un repère cartésien XYZ en fonction du temps qui passe

- invoquer une fonction de calcul de cinématique inverse, qui permet de convertir la position XYZ du pied en la position des servos de la jambe

- appliquer la position aux servo de la jambe (PWM ou autre).

 

La cadence de ta boucle est liée à la cadence de commande des servos. Si les servos sont standards, ce sera entre 50Hz et 333Hz. S'ils sont intelligents, faut voir en fonction de leur caractéristiques.

 

A chaque itération (Tick à 20ms ou moins), tu vas devoir dérouler les calculs pour les 4 pattes en parallèle. A chaque itération, invoquer 4 fois le calcul de trajectoire, et 4 fois le calcul de cinématique inverse et enfin commander les 8 ou 12 servos. Tu devras t'assurer que le temps des calculs tient dans l'intervalle de temps choisi. Que représente une itération ? un mouvement d'une paire de patte, stance ou swing, (si j'avance en mode trot ) ? ce qui voudrait dire que pour chaque mouvement de patte il faut seulement 4 angles donc 4 positions des servos ?

 

Ensuite, tu devras fixer quelques paramètres (constantes ou contrôlables à distance) :

- la période d'un cycle complet du pied (exemple P=1s ou moins) 

- la position du pied au repos (z0)

- la hauteur de swing (h)

- la vitesse du robot (V)

 

Pour une démarche de type trot, il faudra appliquer un déphasage entre les pattes de 180° (ou une demie période) pour faire simple :

- Avant gauche et Arrière droit avec un déphasage nul

- Avant droit et Arrière gauche avec un déphasage de 180°  c'est ce que j'ai fait

 

stance et swing se succèdent d'abord sur AvG + ArD puis sur AvD + ArG (ce que j'ai fait) ou alors pendant que  AvG + ArD stance,  AvD + ArG swing ?

 

Chaque jambe alterne les phases de stance et de swing. Tu vas donc avoir deux fonctions de calcul de la position du pied, l'une pour la phase de stance (au contact) et une autre pour la phase de swing (en l'air). Tu passes de l'une à l'autre en fonction du temps qui passe, chacune travaillant pendant une demie période P, alternativement.

 

Enfin, pour la trajectoire basique :

- en phase de stance (au contact) = la trajectoire du pied est imposée par la trajectoire du robot. Si le robot avance à une vitesse linéaire V, les pieds reculent à la même vitesse, à plat. 

- en phase de swing (en l'air) = le pied avance à la vitesse V. La hauteur peut etre une formule simple de type "z0+h.sin(x)" avec z0 la hauteur au repose, h une constante de hauteur de swing et x variant de 0 à pi durant la phase de swing, proportionnellement au temps qui passe durant cette demi période.

 

Pour commencer, tu peux faire en sorte que le pied passe autant de temps en avant de l'épaule qu'en arrière, aussi bien en phase de swing que de stance.

 

Bon courage. 

 Hello, tu peux détailler , j'ai mis en rouge des questions, j'ai un peu de mal à comprendre... Merci !



#54 pat92fr

pat92fr

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 673 messages
  • Gender:Male

Posté 31 mai 2023 - 07:32

Une façon de programmer, en temps discret. Mettons que tu retiennes un Tick à 20ms.

 

En Arduino, ca donnerait par exemple :

 

unsigned long last_time_ms {millis()};
unsigned long dt_ms {20};
void loop()
{
  unsigned long const current_time_ms {millis()};  
  if(current_time_ms >= last_time_ms + dt_ms )
  {
    last_time_ms += dt_ms;
   
    // calculer la position des quatre pieds en fonction du temps courant : f(current_time_ms)

    // calculer la consigne de position des servos pour les quatre jambes

    // envoyer la consigne position aux servos (8)

  }

  // sinon, patienter...
  delay(1);
}

 

Ca signifie que tu sais calculer la position 2D ou 3D des pieds en fonction du temps qui passe (en ms par exemple), et ce temps est discret. Il s'incrémente de la valeur du Tick (20ms dans cet exemple). Au final, les servos vont recevoir une nouvelle consigne toutes les 20ms.

 

A l'échelle de la seconde, cette façon de programmer donne l'impression que tous ces traitements s'exécutent de manière concurrente. Ca permet de maitriser la vitesse de déplacement des pattes et de mieux maitriser la trajectoire des pieds.

 

Si ton but est d'aller le plus vite possible tout le temps, tu as certainement une façon plus simple de programmer. 



#55 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 31 mai 2023 - 09:17

Une façon de programmer, en temps discret. Mettons que tu retiennes un Tick à 20ms.

 

En Arduino, ca donnerait par exemple :

 

unsigned long last_time_ms {millis()};
unsigned long dt_ms {20};
void loop()
{
  unsigned long const current_time_ms {millis()};  
  if(current_time_ms >= last_time_ms + dt_ms )
  {
    last_time_ms += dt_ms;
   
    // calculer la position des quatre pieds en fonction du temps courant : f(current_time_ms)

    // calculer la consigne de position des servos pour les quatre jambes

    // envoyer la consigne position aux servos (8)

  }

  // sinon, patienter...
  delay(1);
}

 

Ca signifie que tu sais calculer la position 2D ou 3D des pieds en fonction du temps qui passe (en ms par exemple), et ce temps est discret. Il s'incrémente de la valeur du Tick (20ms dans cet exemple). Au final, les servos vont recevoir une nouvelle consigne toutes les 20ms.

 

A l'échelle de la seconde, cette façon de programmer donne l'impression que tous ces traitements s'exécutent de manière concurrente. Ca permet de maitriser la vitesse de déplacement des pattes et de mieux maitriser la trajectoire des pieds.

 

Si ton but est d'aller le plus vite possible tout le temps, tu as certainement une façon plus simple de programmer. 

Ok compris... merci !



#56 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 02 juin 2023 - 01:38

Bonjour,

 

Encore une question...

 

Dans le trot (pattes diagonales en même temps), il y en principe deux phases de suspension . Est-ce comme cela qu'il faut le programmer ? Pour ceux qui ont choisi le trot vous avez fait quoi comme séquence ?



#57 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 02 juin 2023 - 06:04

 il y en principe deux phases de suspension .

Je ne vois pas ce que tu veux dire, mais oui, il y a deux pattes en l'air et deux pattes qui touchent le sol.

Dans la réalité, je doute que ce soit tout à fait comme cela . . .

 

Je pense que la majorité utilise le trot, mais peut-être sans le savoir.

Dans la marche, il y a trois pattes qui touchent le sol et une en l'air. C'est super. Perso, je ne suis pas encore parvenu à faire quelque chose de satisfaisant, mais j'aborde à peine, le sujet.



#58 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 945 messages
  • Gender:Male

Posté 02 juin 2023 - 06:48

Je ne vois pas ce que tu veux dire, mais oui, il y a deux pattes en l'air et deux pattes qui touchent le sol.

Dans la réalité, je doute que ce soit tout à fait comme cela . . .

 

Je pense que la majorité utilise le trot, mais peut-être sans le savoir.

Dans la marche, il y a trois pattes qui touchent le sol et une en l'air. C'est super. Perso, je ne suis pas encore parvenu à faire quelque chose de satisfaisant, mais j'aborde à peine, le sujet.

 

 

Je suis tombé sur une thèse :  https://docplayer.fr...e-la-video.html

 

 

 

Il y a ce chronogramme :

 

trot.jpg

 

Qui montre deux phases de suspension... 

 

la marche semble plus compliquée.

Le trot est beaucoup plus rapide, chez l'animal en tout cas.



#59 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 03 juin 2023 - 07:27

Merci pour ton lien, je vais regarder ça à tête reposée.

 

Là, je suis à la TRR et aujourd'hui, ça va chauffer ! :Koshechka_08:



#60 pat92fr

pat92fr

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 673 messages
  • Gender:Male

Posté 04 juin 2023 - 05:46

 

 

Je suis tombé sur une thèse :  https://docplayer.fr...e-la-video.html

 

 

 

Il y a ce chronogramme :

 

attachicon.giftrot.jpg

 

Qui montre deux phases de suspension... 

 

la marche semble plus compliquée.

Le trot est beaucoup plus rapide, chez l'animal en tout cas.

Mes réalisation à base de servo et même de moteurs brushless ne peuvent pas exécuter le véritable trot avec phase de suspension. C'est un trot "petite vitesse" que j'implémente, sans phase de suspension.

Lorsque le robot démarre et marche, il y a meme une phase de recouvrement, de l'ordre de 5 à 10% du temps d'un cycle complet, pendant laquelle tous les pieds touchent le sol pour améliorer la stabilité du robot.

Cette phase de recouvrement se réduit avec la vitesse de marche et disparait complètement à vitesse maximale. C'est la fonction qui donne la position XYZ des pieds en fonction du temps qui implémente ce mécanisme.

 

Patrick.






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

0 members, 0 guests, 0 anonymous users