Aller au contenu


Photo

FourBarQuad525 - Toujours plus rapide


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

#81 Oracid

Oracid

    Pilier du forum

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

Posté 01 décembre 2020 - 07:31

J'ai augmenté la taille des tibias de 104mm à 112mm, soit 8mm de plus (1L, unité Lego).

J'ai testé avec le Chapeau Chinois 11-1, résultat :

 

                     4m en 5s !!!



#82 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 01 décembre 2020 - 08:00

Bravo!

 

Du coup j'ai commencé à travailler sur des données pas tout à fait à jour, mais ça fait rien

Je te mets en pièce jointe une V3 de l'excel, avec en plus une grande figure à droite qui regroupe tout (position x et y, angle des servos et vitesse, le tout en fonction du numéro de point (donc indirectement du temps)

 

Voici ce que ça donne (j'ai rajouté les rectangles ensuite à les rectangles sous "paint"):

chapeau_chinois_normal___excel_v3_annoté.png

Zone 1: on voit que les deux moteurs vont assez lentement : du coup il est pprobablement possible d'augmenter leurs vitesses (en gardant la même proportion, ie on modifie la longueur des segments mais pas leur pente). Après, il faut faire attention, on est au milieu du stance, là où il y a probablement le plus de poids sur la jambe: donc il faudra faire attention de ne pas vouloir aller trop vite (les servos étant plus lents sous un grand couple)

Zone 3: on est dans le swing, donc pas beaucoup d'efforts à fournir. Si les moteurs arrivent à suivre ce pic de vitesse, alors on peut augmenter les vitesses des zones 2 et 4 (de nouveau, en allongeant les segments en gardant leur pente)

 

 

Je te suggère de mettre à jour l'excel avec tes nouveaux paramètres (longueur du fémur et trajectoire en chapeau chinois 11.1) et de poster la figure résultante : on verra alors où on peut espérer grater un peu de vitesse

Fichier(s) joint(s)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#83 pat92fr

pat92fr

    Membre passionné

  • Membres
  • PipPipPip
  • 796 messages
  • Gender:Male

Posté 01 décembre 2020 - 08:06

La vitesse maximale estimée est de 1500 degrés par seconde ?



#84 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 01 décembre 2020 - 08:13

Pour la vitesse, pour l'instant c'est plus une vitesse relative (il faudrait mettre la vrai valeur de "dt" dans le tableau pour avoir une vitesse à la bonne échelle (à priori dt devrait être plus grand que les 2ms que j'ai mis, donc les vitesses sont moindres)

 

Savoir si on peut augmenter la vitesse globale ne peut je pense que se faire par l'expérimentation (ou de la simulation méca très complexe). Après, c'est facile à tester, il suffit de modifier la durée du delay dans le code arduino.

 

De mon coté, en observant la courbe des vitesses, et en supposant que la courbe actuelle est respectée, j'ai essayé de déterminer les endroits où on vas plus lentement que le reste du temps, et où donc on peut accélérer.

NB : un paramètre qui m'échappe (il nécessiterait une étude plus poussée), c'est le couple à exercer par les servos (qui limite la vitesse atteignable) : je fais donc l'hypothèse simplificatrice qu'on a une vitesse max en swing, et une autre plus faible en stance


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#85 pat92fr

pat92fr

    Membre passionné

  • Membres
  • PipPipPip
  • 796 messages
  • Gender:Male

Posté 01 décembre 2020 - 09:12

Dans un précédent message, Oracid mesurait la période d'un cycle complet à 448ms. Il y avait 66 points, soit 6.8ms par itération. Il y avait une pause totale de 4ms, donc 2.8ms de temps de calcul qui s'ajoutait au temps de pause.

 

Je suis curieux de voir la vitesse max des servos. Mes mesure sur un MG90s n'amène à penser qu'il sera difficile de dépasser 800°/s. Est-ce que tu saurais ajouter le calcul de l'accélération dans le tableur (et la limite de 12000°/s²) ?

 

Beau boulot pour les courbes.

 

Patrick.



#86 Oracid

Oracid

    Pilier du forum

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

Posté 01 décembre 2020 - 09:33

Je te suggère de mettre à jour l'excel avec tes nouveaux paramètres (longueur du fémur et trajectoire en chapeau chinois 11.1) et de poster la figure résultante : on verra alors où on peut espérer grater un peu de vitesse

Ne serait-il pas préférable, dans un premier temps, de garder le même mouvement avec un pas de 10mm, au lieu de 5mm et les mêmes paramètres en entrée. Ainsi, on pourra déjà comparer ces 2 pas dans la V10-1.

Puis, on fera la même chose pour la V11-1 .

 

Cela tombe bien, c'est ce que je voulais tester demain. 

Le pas de 10mm, c'est celui que j'utilise le plus souvent. Ne vous attendez pas à un miracle, mais sait-on jamais.



#87 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 01 décembre 2020 - 09:36

Merci, j'ai donc prix un temps de 6.8ms par itération (@Oracid : ce serait plus propre d'utiliser micros() et d'attendre de manière active jusqu'à la fin de la durée souhaitée : comme ça, tu es sur de la période)

La vitesse la plus importante obtenue est 700°/s (en swing) et de l'ordre de 600°/s enstance

 

J'ai rajouté aussi l'accélération (courbes en bas à droite, une fois avec tous les points visibles (mais ça écrase tout), et une fois en faisant un zoom verticalement). Il y a quelques valeurs extrêmes ateignant les +- 100 000°/s², mais la quasi totalité sont en dessous de 12 000 °/s², et la grande majorité sont en dessous de 5000°/s

Il y a donc de petits pics (lors des "coins" du chapeau) qui sont probablement irréalisables, mais le moteur rattrapera un peu après

 

Voici la version mise à jour :

Fichier(s) joint(s)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#88 pat92fr

pat92fr

    Membre passionné

  • Membres
  • PipPipPip
  • 796 messages
  • Gender:Male

Posté 01 décembre 2020 - 09:50

Bien !

 

Il faudrait essayer avec une période 5ms, et une implémentation bien cadencée. Difficile de dire si le couple va suivre. Faut expérimenter !

 

Patrick.



#89 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 01 décembre 2020 - 09:50

Ne serait-il pas préférable, dans un premier temps, de garder le même mouvement avec un pas de 10mm, au lieu de 5mm et les mêmes paramètres en entrée. Ainsi, on pourra déjà comparer ces 2 pas dans la V10-1.

Puis, on fera la même chose pour la V11-1 .

Tu veux qu'on optimise d'abord la V10.1? C'est bien ça?

 

Pour le pas, passer d'un pas de 5mm à un pas de 10mm de manière systématique ne fait pas beaucoup de sens :

- soit tu gardes ton delay pareil, dans ce cas tu demande à tes servos d'aller deux fois plus vites : s'ils y arrivent jackpot (tu ira assez précisément 2 fois plus vite), mais j'en doute

- soit tu modifie le delay pour adapter au fait que tu ais deux fois moins de segments. Mais vu que tu utilise un delay plutôt que de calculer le temps qu'il te manque pour avoir une période bien définie, tu ne pourra pas trouver facilement pile le bon délai pour laisser 2 fois plus de temps à chaque segment. Du coup, tu aura des résultats difficiles à comparer

 

 

 

Ma suggestion est au contraire d'abandonner la longueur de segment fixe (ou la durée fixe par segment, mais c'est plus dur à implémenter), et d'adapter la longueur de chaque segment pour augmenter la vitesse linéaire là où c'est possible.

 

Mais avant de le faire, je voudrais bien que tu mettes à jour les longueurs des fémurs (sauf si tu as envie de remettre les anciens). Ensuite ça m'est peu importe de travailler avec le chapeau 10.1 ou 11.1
 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#90 Oracid

Oracid

    Pilier du forum

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

Posté 02 décembre 2020 - 10:50

Là, je dois dire que je suis complètement largué !

 

Ma suggestion est au contraire d'abandonner la longueur de segment fixe (ou la durée fixe par segment, mais c'est plus dur à implémenter), et d'adapter la longueur de chaque segment pour augmenter la vitesse linéaire là où c'est possible.

Le principe de mon quadrupède est que les pattes ont un mouvement simultané et synchronisé. Déphasé, mais synchronisé !

En conséquence, lorsqu'une patte exécute un Swing, dans LE même temps, une autre exécute un Stance.

 

Beaucoup de quadrupèdes déplacent leurs pattes successivement, dans  ce cas, on peut imaginer un tableau de delay ayant des valeurs différentes pour chaque pas.

Ce n'est pas, "plus dur à implémenter", mais inextricablement, plus compliqué à implémenter.

 

Du coup, je ne sais plus quoi faire.

Sandro, dis moi exactement ce que tu veux que je fasse, et si je peux, je le ferai.



#91 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 02 décembre 2020 - 11:13

Le principe de mon quadrupède est que les pattes ont un mouvement simultané et synchronisé. Déphasé, mais synchronisé !

En conséquence, lorsqu'une patte exécute un Swing, dans LE même temps, une autre exécute un Stance.

Dans la vrai vie, il n'y a pas de transition nette entre stance et swing (à moins de prendre le swing à partir du moment où le pied ne touche plus le sol, mais je ne crois pas que ce soit ça que tu fasse). Du coup, c'est pas grave s'il y a une petite durée où toutes les pattes sont en stance (ou toutes en swing). Mais si ça peut te rassurer, on vas commencer en gardant la même durée pour le swing que pour le stance (ie on enlève la même quantité de points dans les deux phases)

 

 

Beaucoup de quadrupèdes déplacent leurs pattes successivement, dans  ce cas, on peut imaginer un tableau de delay ayant des valeurs différentes pour chaque pas.

Ce n'est pas, "plus dur à implémenter", mais inextricablement, plus compliqué à implémenter.

J'ai bien conscience que tu bouges toutes les pattes à la fois, et c'est très bien comme ça.

ça n'empêche pas d'avoir des délais variables : voici un pseudo code:

positions[]={X1,X2,X3,...}
temps_dans_la_periode[]={t1,t2,t3, ...}
T= durée d'un cycle

pour la patte n°P, de déphasage temporel phi
{
t_cycle= t + phi modulo T     (t: temps actuel, phi : phase)
si t_i <= t_cycle < t_(i+1) alors aler à la position X_i
}

Mais c'est sur que ça complique les choses, donc je propose qu'on ne s'embête pas avec ça pour l'instant
 

 

 

Du coup, je ne sais plus quoi faire.

Sandro, dis moi exactement ce que tu veux que je fasse, et si je peux, je le ferai.

Si ça te vas, prends la dernière version de mon excel, mets y a jour la longueur du fémur, et si tu le désire la trajectoire (chapeau v10.1 ou v11.1), et poste le résultat.

Je te propose que je fais ensuite la modification (comme ça tu vera exactement ce que je veux dire, ce sera plus clair que des explications), et tu pourra tester le résultat, puis tu devrais être en mesure de continuer les modifications sur le même principe pour faire encore mieux


 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#92 Oracid

Oracid

    Pilier du forum

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

Posté 02 décembre 2020 - 01:15

J'ai mis à jour ton fichier, voici le lien, https://drive.google...QIe?usp=sharing



#93 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 02 décembre 2020 - 08:52

Bonsoir,

du coup voici ma première amélioration : on essaye de maintenir une vitesse proche de la vitesse max pour un des deux servos (adaptant l'autre en conséquence).

Avant :

global_v4.2.png

Nouveau:

global_v4.3.png

 

La forme du chapeau est quasiment inchangée:

Avant:

trajectoire_v4.2.png

Maintenant:

trajectoire_v4.3.png

 

Qu'est ce que j'ai changé?

J'ai simplement écarté un peu plus les points quand les servos allaient lentement : j'ai ainsi pu "gagner" 4 points : il y a donc maintenant 30 points au lieu de 34 : le cycle s'effectue donc maintenant 11.7% plus vite.

Reste à vérifier si les servos suivent effectivement.

 

Comment aller encore plus loin?

Sur la phase de stance, on voit que c'est d'abord un moteur qui vas vite, puis l'autre : je pense qu'on pourrait gagner 2-3 points en faisant se chevaucher les zones où les deux moteurs vont vite (nb : ça change la trajectoire)

Sur la phase de swing, on n'est pas encore à une vitesse constante égale au pic : je pense qu'on doit pouvoir encore y gagner au moins deux points (un avant et un après le sommet du chapeau)

 

 

 

En pièce jointe : les versions 4.2 ("avant" : j'ai juste modifié la mise en page) et 4.3 (avec les modifs pour j'espère gagner du temps):

Fichier(s) joint(s)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#94 Oracid

Oracid

    Pilier du forum

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

Posté 03 décembre 2020 - 07:39

Ok. Je vais tester la deuxième trajectoire.



#95 Oracid

Oracid

    Pilier du forum

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

Posté 03 décembre 2020 - 11:41

En définitive, j'ai testé les deux mouvements.

Voici les résultats :

 

// 03/12/2020 - symetric Chapeau Chinois SandroV4.2 - Ay=150, a1=112, c1=88, Speed=1600, 390cm 
// 03/12/2020 - symetric Chapeau Chinois SandroV4.2 - Ay=145, a1=112, c1=88, Speed=1600, 375cm 
 
// 03/12/2020 -  symetric Chapeau Chinois SandroV4.3 - Ay=150, a1=112, c1=88, Speed=1900, 395cm 
// 03/12/2020 -  symetric Chapeau Chinois SandroV4.3 - Ay=145, a1=112, c1=88, Speed=1900, 375cm 
 

Les résultats sont très proches. Le gros avantage de la V4.3 est que la vitesse est beaucoup plus basse.

Bien entendu, j'ai essayé un grand nombre de vitesses de Speed=800 à Speed=2100.

La vitesse que j'ai retenue est celle qui faisait le meilleur score en distance. Pour mémoire, le temps est toujours de 5 secondes.

 

Le résultat s'approche de mon score de 400cm, mais qui a 2 fois plus de pas et un Speed=500.

L'objectif étant de faire un mouvement, le plus lent possible pour que les servos atteignent leur consigne et que le Quad ne patine pas.

 

En conclusion, je dirais que c'est, très bien. Merci Sandro.

 

 

Hier, j'ai atteint 405cm avec un pas de 10mm, mais avec un mouvement allant de x=95 à x=-95, un Speed=1100 et un mouvement plus complexe, la V11.1, alors que Sandro est toujours basé sur la V10.1. 

Je vais voir si en mariant les 2 mouvements, on ne pas faire mieux.



#96 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 03 décembre 2020 - 12:55

Attends, tu mélange des choses bien différentes : pour pouvoir faire une comparaison raisonnable, il ne faut pas changer deux choses à la fois : soit tu changes de trajectoire, soit tu changes speed, mais pas les deux en même temps.

 

Du coup, est-ce que tu pourrais faire la v4.3 avec speed=1600?

 

 

 

Ensuite, si tu veux continuer à faire des tests "sérieux", je propose que tu modifie le code pour ne plus avoir un delay de speed mais d'utiliser la fonction micros pour avoir une durée de "segment" qui soit imposée : comme ça, on saura exactement la durée d'un cycle complet, et on pourra comparer sur cette base


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#97 Oracid

Oracid

    Pilier du forum

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

Posté 03 décembre 2020 - 02:15

Voici les résultats demandés:

 // 03/12/2020 - symetric  Chapeau Chinois SandroV4.3 - Ay=150, a1=112, c1=88, Speed=1600, 380cm 

// 03/12/2020 - symetric  Chapeau Chinois SandroV4.3 - Ay=145, a1=112, c1=88, Speed=1600, 350cm 
 
 

Ensuite, si tu veux continuer à faire des tests "sérieux", je propose que tu modifie le code pour ne plus avoir un delay de speed mais d'utiliser la fonction micros pour avoir une durée de "segment" qui soit imposée : comme ça, on saura exactement la durée d'un cycle complet, et on pourra comparer sur cette base

 

Dois-je mettre cette instruction après le cycle de chaque patte, ou après le cycle des 4 pattes cumulés ?

J'utilise déjà, delayMicroseconds(Speed); 

 

Edit : Non, au final, je ne peux pas le faire pour une patte, puisque ma fonction Forward() exécute alternativement chaque pas de chaque patte.

Je vais donc le faire à la fin d'un cycle complet des 4 pattes. Il suffira de diviser par 4, pour avoir la valeur d'une seule patte.



#98 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 03 décembre 2020 - 02:42

Il faut bien le faire après avoir envoyé les commandes aux 4 pattes.

Mais il n'y a pas de raison de diviser par 4 (ce qu'on veut, c'est la durée entre deux points succéssifs d'une même patte)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#99 Oracid

Oracid

    Pilier du forum

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

Posté 03 décembre 2020 - 02:50

Non, désolé, cela ne donne rien. C'est très saccadé et le Quad n'avance pas du tout.



#100 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 03 décembre 2020 - 03:07

Tu peux poster le code en question?


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.





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

0 members, 1 guests, 0 anonymous users