Aller au contenu


Photo

Projet de bipède - marche dynamique


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

#21 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 13 avril 2014 - 06:05

J'y arrive pas.

Dur, dur. Il y a toujours des moments de doute sur un tel projet; des moments où on se demande pourquoi on s'est lancé, je suis en plein dedans. Mais je vais quand même persévérer.

J'ai donc remis le robot libre en 3D. Mon dieu, que c'est complexe!
Ca fait plusieurs séances de travail que je me bat pour essayer de le faire marcher de manière stable. J'ai essayé plusieurs stratégies. Certaines idées m'ont pris du temps à mettre en équation puis à coder... avant de me rendre compte que ça ne pouvait pas marcher. J'ai essayé plein de paramètres, car comme pour BOB4, il y a une grande quantité de paramètres à régler dans le code. Rien n'y fait, ça ne fonctionne pas. Il fait 4 ou 5 pas grand maximum, et PAF!
Ca n'en reste pas moins un projet passionnant.

Est-ce que je ne me suis pas lancé dans un défi trop grand? La suite au prochain numéro.
http://www.youtube.com/watch?v=TAjClRLkq6A


Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#22 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 13 avril 2014 - 06:27

Bonjour Leon.

Impressionnant, ton projet bipède chapeaux.

Pour se qui concerne les pieds en forme cylindriques , pour quoi ne pas les faire plus large afin qu'il puise tenir ferment le sole??

En tous cas je suivrai ta progression de ton bipède.

Allez courage , et ne l'ache rien.



#23 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 09 mai 2014 - 07:46

Ca progresse.

Voici enfin une simulation un peu plus stable en 3D.


Avec mes algorithmes, j'arrive à des comportements surprenants, il parait vivant, ça me fait plaisir de voir ça.
On voit sur la vidéo qu'il fait un grand écart à cause d'un pas un peu trop grand. Et bien il corrige le tir et se redresse tout seul, une jambe après l'autre, en rapprochant ses pieds, alors que je n'ai pas programmé spécifiquement ce comportement! Ce sont l'ensemble des asservissements imbriqués et des algorithmes qui donnent ce genre de comportement. Ce sont uniquement des "'réflexes", rien de plus.
Bref, aujourd'hui c'est plutôt positif!

Il me reste encore du travail pour faire un asservissement bien stable, qui fonctionne à tous les coups, sans diverger.
Puis si ça fonctionne, je passerai à l'étape suivante : essayer de trouver un modèle de robot crédible, réaliste : poids des éléments, puissance des moteurs, etc...
Si je vois que c'est possible (attention, c'est loin d'être gagné) alors seulement je passerai à une réalisation concrète.

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#24 transistance

transistance

    Membre passionné

  • Membres
  • PipPipPip
  • 411 messages

Posté 12 mai 2014 - 09:39

Content de voir que tu t'en sors finalement (même si personne n'en doutait).

Puis si ça fonctionne, je passerai à l'étape suivante : essayer de trouver un modèle de robot crédible, réaliste : poids des éléments, puissance des moteurs, etc...
Si je vois que c'est possible (attention, c'est loin d'être gagné) alors seulement je passerai à une réalisation concrète.



Vu l'état actuel de ton projet ce serait dommage de s'arrêter en si bon chemin! (surtout maintenant que tu as fait saliver la moitié du forum ^^).

Bon courage pour la suite!

N'oubliez jamais que "Ban Ki-moon n'attrape pas mousse"


#25 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 02 juillet 2014 - 09:12

Bien joué ! Ne t'arrêtes pas maintenant, j'ai hâte de voir la fin ! :D
buildrobot.

#26 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 07 octobre 2017 - 02:21

Je me rend compte que je n'avais jamais décrit l'algorithme utilisé pour la marche dynamique sur ce BOB5 simulé.

Je vais donc décrire ça avec des mots simples, et si j'ai le temps, je donnerais des précisions sur la foultitude de petits détails nécessaires pour faire fonctionner ça en vrai. Là, ça n'est qu'une ébauche.

 

C'est de l'automatique bourrine

Pour bien comprendre comment ça fonctionne, je vous conseille d'avoir des bases en automatique. C'est uniquement des asservissements bien bourrins. Il y a plusieurs asservissements imbriqués.

Tout est calculé en temps réel, en dynamique. Le robot réagit à ses capteurs (exclusivement des gyros).

Il détermine en temps réelle s'il doit lever/poser une jambe, et laquelle. Il n'y a rien qui est fait pour alterner périodiquement les pas droite-gauche, ce sont des mouvement reflex exclusivement, qui mis ensemble font qu'il marche. C'est ma façon de penser, de travailler.

Pour que ces asservissements fonctionnent, je suis contraint de marcher genoux pliés, pour pouvoir à tout instant bouger le pied en 3D par rapport au bassin. Si les jambes étaient tendues, ça serait "contraint". Ca simplifie les asservissements.

 

Le robot connait en permanence

 * orientation du tronc en roulis et tangage (2 gyroscopes)

 * la hauteur du bassin par rapport à un sol plat. La hauteur est déterminée par l'extension vers le bas de la jambe la plus basse

 

Cinématique inverse:

c'est une partie bas niveau qui me permet de déduire les angles des servos en fonction de la position relative entre pied et bassin que je souhaite obtenir.

Tous les mouvements sont déterminés à partir de coordonnées 3D.

Pour faire des mouvements fluides, on décompose en temps réel la position 3D de chaque pied selon une vitesse de déplacement maxi (atteignable par les actionneurs), avant l'algo de cinématique inverse.

 

Orientation du pied:

Les pieds sont toujours orientés pour être parallèles au sol en toute circonstances, même si le tronc penche en avant ou en arrière

 

Principe général de la marche:

Chaque jambe est asservie avec un automate global à états. Chaque jambe peut avoir 4 états : jambe posée, jambe levée, jambe en train d'être posée, jambe qu'on commence à lever. Dans chacun des 4 états, le comportement de la jambe est très différent.

Cet automate d'état le bipède considère, et fait en sorte qu'il ait obligatoirement 1 ou 2 jambes posées. 0 jambes posées n'est pas prévu, si ça arrive (saut), ça fait n'importe quoi.

Par exemple, cet automate à états impose qu'une jambe soit posée avant de lever la 2ieme.

 

Jambe(s) posée(s):

La ou les jambes posées vont essayer de maintenir le tronc droit, vertical. C'est le principe de l'asservissement d'un pendule inversé. La baguette que l'on tient verticale en équilibre sur le doigt. A chaque instant, j'estime l'orientation 2D du tronc (roulis/tangage), et la vitesse angulaire du tronc; Et j'applique un asservissement PID. La commande, c'est la position 2D du/des pieds posés au sol par rapport au tronc. Bref, je déplace les pieds en dessous du tronc pour maitriser la chute du pendule inversé.

Ce premier pendule inversé, c'est le tronc lui même, et son point d'appui (celui que je bouge, dont je fais varier la position), c'est le bassin, le point à l'entrejambe (oui, son derrière). Donc je déplace en 2D le bassin par rapport au sol pour garder le tronc droit.

 

Pour que l'asservissement soit efficace, dynamique et prédictif, je modélise le comportement global du robot posé au sol, en considérant un 2ieme pendule inversé. Ce 2ieme pendule inversé c'est le robot complet (pas juste le tronc), et son appui bas, c'est un point fictif d'appui au sol; c'est un point au sol à l'intérieur du polygone d'appui au sol du robot. Le point d'appui au sol peut être situé entre les 2 pieds si les 2 sont posés, et il est situé le long du pied posé si 1 seul pied est posé.

L'algorithme a donc une certaine liberté pour déterminer la position de l'appui bas du pendule inversé (qui est un point d'appui fictif), ce qui va aider le robot à se stabiliser (gérer le déséquilibre et la vitesse de déséquilibre), et à l'orienter : accélérer vers telle direction 2D.

 

J'essaye aussi de maintenir la hauteur du tronc constante par rapport au sol. Si je ne peux pas, si un pas trop grand, une jambe trop tendue me fait perdre de la hauteur, alors je m'adapte. J'essaye de stabiliser cette hauteur, de réhausser tout doucement le tronc, doucement pour ne surtout pas décoller les 2 pieds en même temps. C'est ce qu'on voit sur la vidéo quand le robot se rattrape après un grand écart.

 

Jambe levée:

La jambe est levée à une hauteur fixe par rapport au sol, assez faible pour pouvoir faire des mouvements rapides.

Le seul objectif est de faire aller le pieds à la nouvelle position d'appui le plus vite possible.

La position cible d'appui du pied en l'air est mise à jour en temps réel. La position cible n'est donc pas la même entre le moment où on a levé le pied et le moment où on pose le pied.

La position cible est déterminée comme un asservissement à partir de 3 choses:

* équilibre actuel du robot : position du centre de gravité par rapport au pied posé

* de la vitesse de déplacement du centre de gravité par rapport au sol (permet d'anticiper)

* de la volonté d'accélérer ou décélérer dans telle direction 2D

On cherche à garantir le meilleur équilibre possible.

Si la position cible n'est pas atteignable (grand écart, jambe croisée), on fait au mieux, et on pose rapidement le pieds une fois qu'on a fait le maximum.

Il y a aussi une logique pour ne pas croiser les jambes, pour ne pas se faire d'auto-croche patte.

 

Transitions:

Les transitions levé/posé sont réalisées en évitant de déséquilibrer le robot, donc à peu près en essayant d'avoir une vitesse 2D du pied par rapport au sol qui soit nulle.

Quand lever le pied? Dans 2 cas:

cas n°1 quand on est en déséquilibre. Globalement, le déséquilibre, c'est le fait que la projection 2D du centre de gravité au sol sort du polygone d'appui du robot au sol. Dans le calcul de l'équilibre, j'intègre également 2 choses supplémentaires:

* la vitesse 2D du centre de gravité du robot par rapport au sol

* la volonté d'accélérer/décélérer dans telle direction 2D

Cas n°2 : quand les 2 pieds sont posés, et que l'asservissement "pied posé" impose une position du pied qui devient pas catholique : pied trop rentré, jambe trop tendue. C'est ce que l'on voit sur la vidéo quand le robot se rattrappe après le grand écart.

 

Balancement droite-gauche:

Il existe également une logique qui tend (surtout à basse vitesse) à rapprocher la position 2D du centre de gravité vers le pied qui va servir le plus probablement d'appui (rester au sol) lors du prochain lever de pied (anticipation du déséquilibre). On le voit au tout début de la vidéo. C'est hyper utile pour la stabilité à basse vitesse.

 

Mathématiques

Tout cela nécessite beaucoup de calculs 2D/3D et asservissements, qui m'ont fait assez mal à la tête! :blink:

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#27 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 08 octobre 2017 - 03:04

Ouch !!!! Bon je ferrais une deuxième lecture avant de poser des questions...

 

il existe déjà une très grosse différence avec ma programmation puisque dans la méthode décrite il n'y à pas de séquencement des mouvements......Pour me simplifier la vie je suis partie sur une logique de séquencement : j'incline à droite, lève, avance, pose pied gauche......

 

Cela peut paraitre plus simple dans un premier temps mais on se retrouve vite coincé quand on veux aller plus loin dans la gestion de l'équilibre.....



#28 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 08 octobre 2017 - 06:19

Salut Telson,

Juste une précision : je ne prétends surtout pas que ma solution est universelle. C'est une vraie usine à gaz, et cette complexité n'est nécessaire que pour un bipède très élancé et dynamique (type Cassie).

En restant sur une logique séquentielle comme la tienne, tu peux très bien obtenir un début de marche dynamique, en partant d'un ZMP, et en rajoutant une sur-couche pour la gestion de l'équilibre, de la vitesse, des accélérations.

J'espère en tout cas que ces éléments pourront inspirer les nombreux créateurs de bipèdes. Il y a pas mal de clefs de compréhension des mécanismes de la marche dans ce que j'ai écrit hier.

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#29 Ulysse

Ulysse

    Membre passionné

  • Membres
  • PipPipPip
  • 486 messages
  • Gender:Not Telling

Posté 08 octobre 2017 - 10:27

Un paramètre important : plus on est haut sur patte plus l'équilibre est 'facile' à tenir. Mais c'est compliqué de se lever. Autant partir de la position 'debout'




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

0 members, 0 guests, 0 anonymous users