Einen Controller um realistische Bewegungen zu synthetisieren



  • Hallo,

    die Grundidee ist es ein Programm zu schreiben das menschliche Bewegungen berechnet(z.b. blinzeln, atmen, kleine Gesten...) und zu einem 3D Framework schickt. Dabei werden lediglich Euler Winkel via TCP verschickt.

    Dazu habe ich ein paar(ich nenne sie Generators) Bewegungssynthetisierer geschrieben, welche einfach nur simple Bewegungen wie blinzeln oder Augenbewegungen berechnen. Dabei gibt es für jeden Bodypart einen eigenen Generator(z.B. Head, Gaze, Blink, Arm, Hand Generator..).
    Diese Generators laufen alle in ihrem eigenen "think" thread, welcher ( vereinfacht ausgedrückt ) alle paar Sekunden eine Bewegung berechnen die dann sofort vom dispatcher eingesammelt und verschickt werden. Das funktioniert wunderbar für blinzeln oder kleine Bewegungen in den Augäpfeln..jedoch nicht für etwas komplexere Bewegungen wie etwa "am Kopf kratzen". Denn dazu müssen mehrere Generators zusammenspielen, z.B. Kopf,Arm und Hand Generators.
    Jetzt bräuchte ich eine art Gamecontroller, der den Generators sagt was Sie zu tun haben um zusammenzuspielen. Zum Beispiel : triggere "Kratze dich am Kopf", jetzt muss der Armgenerator die Arme nach oben Bewegungen, danach eine "hoch-runter" Bewegung fürs Kratzen ausführen. Der Handgenerator muss im richtigen moment die finger ein wenig biegen fürs kratzen. Der Headgenerator muss den kopf ein wenig neigen damit das kratzen realistischer aussieht.

    Wie mache ich so etwas sinnvoll? Brauch ich jetzt Zustände in den Generators, oder so etwas wie ein bool idle das verhindert das andere bewegungen gemacht werden? Oder sollen diese Generators Zentral von einer Klasse verwaltet werden?
    Ich bräuchte dringend ein paar Denkanstöße...

    Vielen Dank fürs lesen!


  • Mod

    wenn man dein spassiges projekt so weiter treibt:

    wenn du schon einzelne "generatoren" hast, muessen die generatoren von den koerperteilen auch ein feedback bekommen zur aktuellen lage.

    ein generator sollte nicht an ein 'teil' angebunden sein, sondern funktionsweise angelegt werden. z.b. kannst du reflex artig blinzeln, du kannst wegen wind oder weil jemand wasser auf dich spritzt blinzeln. und wenn jemand ein einen ball auf dich wirft, blinzelnst du bzw kneifst die augen zusammen und machst noch andere effekte.

    welcher dieser effekte gemacht wird, muesse von einem, emm, ja, "controller" bestimmt werden, aber ein generator sollte nicht nur ein teil kontrollieren.

    dann kannst du auch ein 'generator' fuers kratzen haben.

    jetzt wird es noch spassiger. du willst ja sicherlich nicht per hand hard coden welcher generator was macht, also laesst du das dein system 'lernen'. du hast
    -ein generator
    -ein ziel (juckige stelle muss gekratzt werden)
    -koerper voller gelenke zum bewegen
    -koerper voller gelenk-sensoren die daten zurueckliefern

    jetzt kannst du evolutionsmaessig oder sogar mit lernalgorithmen dein 'generator' optimieren. wenn ziel erreicht wurde kannst du programmiermaessig evaluieren (juckige stelle gekratzt), welchen status die sensoren hatten bekommst du mit, welche kommandos du an die gelenke geschicht hast weisst du auch.

    das kann recht spassig sein, das ist ein evolutions optimiertes 'generatorchen':
    http://megaswf.com/simple_serve/102223/

    das ist ein neurales netzt was mit 'lernen' optimiert wurde:
    http://www.youtube.com/watch?v=0Str0Rdkxxo

    jedenfalls wuerde ich das so machen 😃



  • hm ok..ich glaube ich habe keine zeit mehr ein neurales netz zu implementieren ( ich glaube das ist recht aufwändig und dauert lange?)..

    Wenn ich dich richtig verstanden habe, sollte ich eher so etwas bauen : "scratch generator" der den körper dann animiert wie LeftArM->Armup() LeftElbow->MoveElbowForScratch() Head->tiltHead() oder so etwas?


Anmelden zum Antworten