Comment apprendre à robot bipède à marcher ? Vous êtes-vous déjà posé la question ? Le problème est plus épineux qu’il n’y parait. En effet, selon ses mensurations et le poids de ces différents éléments, il doit adopter une approche différente pour équilibrer son centre de gravité. Si le terrain n’est pas plat, c’est encore pire. Et si en plus il doit porter une charge et subir des contraintes extérieures… bref, ne comptez pas utiliser sur un robot une séquence d’animation de type Motion Capture, cela ne fonctionnera pas.
Une autre approche consiste à lui demander d’apprendre à marcher tout seul. Cela peut paraître idiot, mais savez-vous qu’il y a de très nombreux domaines où les machines se sont programmées seules ? Prenons l’exemple du sonar dans un sous-marin. Au début, les meilleures “oreilles” étaient humaines quand il s’agissait de distinguer si un écho était renvoyé par un récif ou une mine. Maintenant, ce sont des machines qui sont les plus performantes. Mais si vous collez un informaticien devant le code de la machine, il sera en lire l’alphabet, mais probablement jamais le sens. Ces machines se sont programmées d’elles-mêmes à partir d’une série de fonctions heuristiques, d’algorithmes génétiques, de logique floue ou de réseaux neuronaux. Et probablement un peu de tout mélangé avec des “modèles mathématiques”. Tout comme les meilleurs traders du monde (Predictive Company).
Dans le cadre des algorithmes génétiques, en quoi cela consiste ? Si nous prenons l’exemple de la marche, j’aurais tendance à fournir plusieurs modèles de marche à la machine avec des animations type motion capture. Ensuite, je vais attribuer à l’ensemble des tendons simulés, des jointures, des os, des coefficients (vitesse, force, contraintes, etc.). Et je vais générer une première génération de 1000 robots avec des coefficients tirés au hasard et un ou plus mixages de modèles d’animation. Je vais les laisser marcher et mesurer le nombre de mètres effectués… bon c’est trop simpliste, mesurons des éléments comme la capacité à poser le pied le plus loin ou à rester en équilibre le plus longtemps, etc. A la fin, j’attribue une note et je choisis les 100 meilleurs. Je tire au hasard un millier de fois des couples et je fais un mixage des éléments (interpolation linéaire, cubique, etc. tout type de mixage, là aussi au hasard, mais en gardant une trace). J’obtiens 1000 nouveaux robots, la génération 2. Et je recommence jusqu’à ce qu’un robot finisse par marcher convenablement…
Bon, j’ai beaucoup simplifié, mais le principe est là. Et je crois que c’est le procédé utilisé par les chercheurs Thomas Geijtenbeek, Michiel van de Panne et Frank van der Stappen dans leur publication Flexible Muscle-Based Locomotion for Bipedal Creatures présentée lors du SIGGRAPH Asia 2013.
Le modèle utilisé pour les créatures se compose d’une hiérarchie des corps rigides, qui sont actionnés en utilisant un modèle musculaire dynamique [Travaux de Geyer et Herr 2010]. Les contraintes biomécaniques incorporées dans ce modèle simule les propriétés physiologiques des fibres musculaires et les tendons (dynamique de contraction), et le processus électro-chimique qui conduit à des changements dans l’état d’activation (dynamique d’activation).
Les tests ont été réalisés via ODE (Open Dynamic Engine) un moteur de physique open-source. Pour ceux que cela intéresse, je leur laisse lire l’étude, ce n’est pas absolument novateur, mais c’est assez bien illustré grâce aux tests effectués. Après, je n’ai pas réussi à choper le code source des expérimentations — si quelqu’un y arrive, je lui en serais reconnaissant.
Voici la vidéo de leurs expériences:
L’optimisation automatique permet de faire en sorte que les personnages adaptent leur mode de déplacement en fonction de la vitesse ciblée, mais aussi selon les contraintes externes (pente du terrain, projectiles qui bombardent le personnage).
C’est du virtuel, oui, mais on l’apprentissage réalisé en environnement virtuel peut profiter aux robots réels moyennant une adaptation. Inutile de construire des milliards de robots pour trouver la marche optimale, une simulation suffit. Et ce qui est vrai pour la marche, l’est également dans de très nombreux domaines.
C’est certainement de la trop lourde artillerie pour le jeu vidéo, mais pourquoi pas ? Pour ma part, le domaine m’intéresse beaucoup et je comptais déjà utiliser une approche similaire pour mon projet “Lost Colonies” qui est n’est pas vraiment un jeu, pas vraiment une simulation… mais une sorte de serious game sur fond de colonisation spatiale par les robots.
Voici la présentation d’une autre approche, similaire dans la forme :
Hum… Vraiment intéressant cet article!
Pour le jeu vidéo on peut facilement trouver des application au GamePlay:
On pourrais imaginé un systeme à la WonderProjectJ (super jeu de Snes où le joueur doit s’occuper d’un robot, l’entrainer, lui apprendre les bonnes manières.…) mais avec une logique bien plus poussée grâce à cette méthode! On verrai alors réellement son petit robot évolué!
Autre application (je fourmille d’idée moi ce soir), imaginons un jeu avec une grande part de génération procédurale, il serait alors possible d’animer des créatures improbable, voir totalement surréaliste, simplement en ayant pré-calculer les animations.
Ouais, je rêve ‘-’
Mais ça ne m’étonnerais pas que l’on ait accès à cette technologie d’ici quelques années, le moteur physique Euphoria est déjà dans cette voie là!
A voir donc, et bravo pour l’article 🙂
Ah super, je ne connaissais pas “Wonder Project J: Mechanical Boy Pino”, c’est vrai que le concept est sympa. Le coté entrainement de robot assisté par l’être humain est une piste pour de nombreux jeux.
Ton idée de génération procédurale de robots me semble déjà accessible avec les moteurs dont on dispose… mais il faut ajouter quelques librairies d’IA open source pour disposer des outils adéquats. Ce que j’apprécie dans Blender, c’est qu’il ouvre toute son API de modélisation et qu’on peut donc faire ce genre de chose, en allant plus loin qu’un simple assemblage de modules. Et la partie BGE qui permet de tester le résultat en temp-réel.
Ah Tellement de choses à faire et si peu de temps !
Tiens, j’ai pas encore écrit d’article sur Euphoria, il faudrait que je m’y colle, ça fera suite à cet article, merci 😉
De rien, si je trouve quelques infos dans ce domaine là je t’en ferai part 😉