Skeletal Animation et algorithmes génétiques

Com­ment appren­dre à robot bipède à marcher ? Vous êtes-vous déjà posé la ques­tion ? Le prob­lème est plus épineux qu’il n’y parait. En effet, selon ses men­su­ra­tions et le poids de ces dif­férents élé­ments, il doit adopter une approche dif­férente pour équili­br­er son cen­tre de grav­ité. Si le ter­rain n’est pas plat, c’est encore pire. Et si en plus il doit porter une charge et subir des con­traintes extérieures… bref, ne comptez pas utilis­er sur un robot une séquence d’an­i­ma­tion de type Motion Cap­ture, cela ne fonc­tion­nera pas.

Une autre approche con­siste à lui deman­der d’ap­pren­dre à marcher tout seul. Cela peut paraître idiot, mais savez-vous qu’il y  a de très nom­breux domaines où les machines se sont pro­gram­mées seules ? Prenons l’ex­em­ple du sonar dans un sous-marin. Au début, les meilleures “oreilles” étaient humaines quand il s’agis­sait de dis­tinguer si un écho était ren­voyé par un récif ou une mine. Main­tenant, ce sont des machines qui sont les plus per­for­mantes. Mais si vous collez un infor­mati­cien devant le code de la machine, il sera en lire l’al­pha­bet, mais prob­a­ble­ment jamais le sens. Ces machines se sont pro­gram­mées d’elles-mêmes à par­tir d’une série de fonc­tions heuris­tiques, d’algo­rithmes géné­tiques, de logique floue ou de réseaux neu­ronaux. Et prob­a­ble­ment un peu de tout mélangé avec des “mod­èles math­é­ma­tiques”. Tout comme les meilleurs traders du monde (Pre­dic­tive Com­pa­ny).

Dans le cadre des algo­rithmes géné­tiques, en quoi cela con­siste ? Si nous prenons l’ex­em­ple de la marche, j’au­rais ten­dance à fournir plusieurs mod­èles de marche à la machine avec des ani­ma­tions type motion cap­ture. Ensuite, je vais attribuer à l’ensem­ble des ten­dons simulés, des join­tures, des os, des coef­fi­cients (vitesse, force, con­traintes, etc.). Et je vais génér­er une pre­mière généra­tion de 1000 robots avec des coef­fi­cients tirés au hasard et un ou plus mix­ages de mod­èles d’an­i­ma­tion. Je vais les laiss­er marcher et mesur­er le nom­bre de mètres effec­tués… bon c’est trop sim­pliste, mesurons des élé­ments comme la capac­ité à pos­er le pied le plus loin ou à rester en équili­bre le plus longtemps, etc. A la fin, j’at­tribue une note et je choi­sis les 100 meilleurs. Je tire au hasard un mil­li­er de fois des cou­ples et je fais un mix­age des élé­ments (inter­po­la­tion linéaire, cubique, etc. tout type de mix­age, là aus­si au hasard, mais en gar­dant une trace). J’ob­tiens 1000 nou­veaux robots, la généra­tion 2. Et je recom­mence jusqu’à ce qu’un robot finisse par marcher convenablement…

Bon, j’ai beau­coup sim­pli­fié, mais le principe est là. Et je crois que c’est le procédé util­isé par les chercheurs Thomas Gei­jten­beek, Michiel van de Panne et Frank van der Stap­pen dans leur pub­li­ca­tion Flex­i­ble Mus­cle-Based Loco­mo­tion for Bipedal Crea­tures présen­tée lors du SIGGRAPH Asia 2013.

Le mod­èle util­isé pour les créa­tures se com­pose d’une hiérar­chie des corps rigides, qui sont action­nés en util­isant un mod­èle mus­cu­laire dynamique [Travaux de Gey­er et Herr 2010]. Les con­traintes bio­mé­caniques incor­porées dans ce mod­èle simule les pro­priétés phys­i­ologiques des fibres mus­cu­laires et les ten­dons (dynamique de con­trac­tion), et le proces­sus élec­tro-chim­ique qui con­duit à des change­ments dans l’é­tat d’ac­ti­va­tion (dynamique d’ac­ti­va­tion).

Les tests ont été réal­isés via ODE (Open Dynam­ic Engine) un moteur de physique open-source. Pour ceux que cela intéresse, je leur laisse lire l’étude, ce n’est pas absol­u­ment nova­teur, mais c’est assez bien illus­tré grâce aux tests effec­tués.  Après, je n’ai pas réus­si à chop­er le code source des expéri­men­ta­tions — si quelqu’un y arrive, je lui en serais reconnaissant.

Voici la vidéo de leurs expériences:

L’op­ti­mi­sa­tion automa­tique per­met de faire en sorte que les per­son­nages adaptent leur mode de déplace­ment en fonc­tion de la vitesse ciblée, mais aus­si selon les con­traintes externes (pente du ter­rain, pro­jec­tiles qui bom­bar­dent le personnage).

C’est du virtuel, oui, mais on l’ap­pren­tis­sage réal­isé en envi­ron­nement virtuel peut prof­iter aux robots réels moyen­nant une adap­ta­tion. Inutile de con­stru­ire des mil­liards de robots pour trou­ver la marche opti­male, une sim­u­la­tion suf­fit. Et ce qui est vrai pour la marche, l’est égale­ment dans de très nom­breux domaines.

C’est cer­taine­ment de la trop lourde artillerie pour le jeu vidéo, mais pourquoi pas ? Pour ma part, le domaine m’in­téresse beau­coup et je comp­tais déjà utilis­er une approche sim­i­laire pour mon pro­jet “Lost Colonies” qui est n’est pas vrai­ment un jeu, pas vrai­ment une sim­u­la­tion… mais une sorte de seri­ous game sur fond de coloni­sa­tion spa­tiale par les robots.

Voici la présen­ta­tion d’une autre approche, sim­i­laire dans la forme :

3 commentaires sur “Skeletal Animation et algorithmes génétiques

Ajouter un commentaire

  1. Hum… Vrai­ment intéres­sant cet article!
    Pour le jeu vidéo on peut facile­ment trou­ver des appli­ca­tion au GamePlay:
    On pour­rais imag­iné un sys­teme à la Won­der­Pro­jec­tJ (super jeu de Snes où le joueur doit s’oc­cu­per d’un robot, l’en­train­er, lui appren­dre les bonnes manières.…) mais avec une logique bien plus poussée grâce à cette méth­ode! On ver­rai alors réelle­ment son petit robot évolué!

    Autre appli­ca­tion (je four­mille d’idée moi ce soir), imag­i­nons un jeu avec une grande part de généra­tion procé­du­rale, il serait alors pos­si­ble d’animer des créa­tures improb­a­ble, voir totale­ment sur­réal­iste, sim­ple­ment en ayant pré-cal­culer les animations.

    Ouais, je rêve ‘-’
    Mais ça ne m’é­ton­nerais pas que l’on ait accès à cette tech­nolo­gie d’i­ci quelques années, le moteur physique Eupho­ria est déjà dans cette voie là!
    A voir donc, et bra­vo pour l’article 🙂

    1. Ah super, je ne con­nais­sais pas “Won­der Project J: Mechan­i­cal Boy Pino”, c’est vrai que le con­cept est sym­pa. Le coté entraine­ment de robot assisté par l’être humain est une piste pour de nom­breux jeux.
      Ton idée de généra­tion procé­du­rale de robots me sem­ble déjà acces­si­ble avec les moteurs dont on dis­pose… mais il faut ajouter quelques librairies d’IA open source pour dis­pos­er des out­ils adéquats. Ce que j’ap­pré­cie dans Blender, c’est qu’il ouvre toute son API de mod­éli­sa­tion et qu’on peut donc faire ce genre de chose, en allant plus loin qu’un sim­ple assem­blage de mod­ules. Et la par­tie BGE qui per­met de tester le résul­tat en temp-réel.
      Ah Telle­ment de choses à faire et si peu de temps !
      Tiens, j’ai pas encore écrit d’ar­ti­cle sur Eupho­ria, il faudrait que je m’y colle, ça fera suite à cet arti­cle, merci 😉

Laisser un commentaire

Fièrement propulsé par WordPress | Thème : Baskerville 2 par Anders Noren.

Retour en haut ↑

%d blogueurs aiment cette page :