Simulation von Bewegungsabläufen

Da ich meinem Roboter gern noch Kniegelenke spendieren würde und er damit das Laufen wieder selbstständig erlernen soll, habe ich mich an eine Simulation gewagt. (Bitte den gerade verlinkten Beitrag lesen, damit ihr diesen hier verstehen könnt.)

Das Problem mit Zufallszügen und zusätzlichen Kniegelenken ist ganz einfach: Der Roboter wird öfter so stürzen, dass er aufgerichtet werden muss. Das macht natürlich arbeit, da die Trainingsphase durch die zusätzlichen Möglichkeiten von Bewegungsabläufen sehr viel länge dauern wird. Die Anzahl an Möglichkeiten steigen mit Hüft- und Kniegelenken und eine alte Positionen (History) an den Eingängen von 729 auf 531.441 Möglichkeiten.

Mit einer PC-Simulation kann viel einfacher bewertet werden, ob der Roboter tatsächlich umgekippt ist bzw. in einer unerwünschten Position landet und außerdem ob er die Füße bei der Laufbewegung über den Boden schleifen lässt. Was bei einem rutschigem Untergrund noch ganz gut ging, wird bei einem Teppich zum Problem.

Diese zusätzlichen Möglichkeiten eröffnen dem Agent ganz neue Bewertungsansätze und das neuronale Netzwerk kann darauf konditioniert werden „schöne“ und schnelle Bewegungsabläufe zu erlernen. Nach der Simulation soll das erlernte ANN einfach in den Roboter überspielt werden. Ist die Simulation sehr nah an die Realität, führt dies zu einem lauffähigem Roboter mit Kniegelenken, ohne Programmierung der Bewegungsabläufe.

Für diese Art der Simulation werden nur relativ wenige Eigenschaften der Physik gebraucht. Wir brauchen Gravitation bzw. Erdbeschleunigung und damit auch korrekt simulierte Gewichte der einzelnen Komponenten und der Massenmittelpunkte. Damit fällt schon einmal alles so wie es soll.

Damit auch die Servomotoren simuliert werden können, bedarf es einer Beschleunigungskraft die auf die Achsen wirkt und einer Haltekraft, wenn das Getriebe blockiert, bzw. der Servo mit Motorenergie auf Position geregelt wird.

Als Simulationsumgebung habe ich mich erst an einer reinen Python-Umgebung versucht. Mit dem Modul PyODE können Objekte erstellt und mit Gelenken verbunden werden. Das ist insgesamt recht Aufwändig und außer Zahlen gibt es nichts zu sehen. Kombiniert man die Physik-Engine mit VPython kann eine 3D-Welt erstellt werden. Jeder Schritt wird also einzeln vorgenommen: PyODE errechnet die Bewegung der Massen und mit VPython muss ein entsprechendes 3D-Objekt um diese Massen gelegt werden. Für einfache Sachen wie ein doppeltes Pendel war es auch recht gut lösbar, aber bei größeren Aufbauten habe ich komplett die Übersicht verloren und meine 3D-Welt ist immer mehr aus der Reihe getanzt.

Eine gute Entscheidung war es daher die freie 3D-Software Blender  zu installieren und erste Gehversuche damit zu unternehmen. Ich habe früher einmal mit Cinema4D gearbeitet und im Studium kurz mit Autodesk und Inventor, aber Blender toppt sie alle an Komplexität! Dafür ist jedoch auch unglaublich viel möglich und genau die Sachen die ich benötige: 3D-Design, Physik-Simulation und Zugriff auf alle Objekte und Eigenschaften mit der Skriptsprache Python (Annahme).

Nach einigen Stunden Einarbeitung (6 h?) ist mir ein einfaches Model von einem möglichen zukünftigem Roboter gelungen:

Dazu habe ich pro Gelenk jeweils ein Hinge (Scharnier) eingesetzt, aber die Bewegung auf -45° bis +45° begrenzt, was auch schön zu erkennen ist. Aktuell sind die Hinge noch freischwingend und werden nicht von einem Motor getrieben. Jedoch habe ich im Video bereits ab der vierten Sekunden das vordere Hüftgelenk angestoßen, so dass der „Roboter“ umfällt.

Ich bin nun leider an einer Stelle angelangt an der ich die Koordinaten und Winkel der Objekte und Gelenke zur Simulationszeit in Python benötige. Leider habe ich noch keine Möglichkeit gefunden diese Daten zu extrahieren. Wenn jemand weiß, welche Objekte dazu benötigt werden, dann bitte ein Kommentar da lassen. Damit geht es an dieser Stelle weiter, wenn ich weitere Erkenntnisse erlangen konnte.

Meinen aktuellen Arbeitsstand gibt es wie immer auf meiner Github-Seite:

https://github.com/Counterfeiter/RoboSimulation

Advertisements
Dieser Beitrag wurde unter Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.

5 Antworten zu Simulation von Bewegungsabläufen

  1. sportsfreund schreibt:

    Das Deepmind Team verwendet (https://arxiv.org/pdf/1707.02286.pdf) die MuJoCo Engine. Diese liegt aber bei 500$ für „Personal Non-commercial“, was für ein Hobby Projekt eher zu viel ist. Daher halte ich das für einen sehr interessanten Ansatz mit Blender.

    • Leider hängt es nur daran, dass ich keinen starre Winkeländerung mit einer definierten Kraft an den Gelenken vornehmen kann. Der PID-Regler Ansatz ist schon aufgrund der zu groben Simulationsschritte nicht geeignet. Ich bekomme bei Blender nur eine Kraft auf die Gelenke gelegt…
      Irgendwelche Ideen hierfür?

      • sportsfreund schreibt:

        kenne mich auch leider nicht mit Blender aus. Also rotation_euler bzw. rotation_axis_angle reichen nicht aus?

  2. sportsfreund schreibt:

    ich schaue mir gerade Alternativen an. https://github.com/openai/roboschool sieht schon sehr klasse aus! Die haben das so umprogrammiert, dass es ohne MuJoCo Engine auskommt. Stattdessen wird die Bullet Engine verwendet. Siehe auch: https://blog.openai.com/roboschool/ Ich hatte ein paar Mini Probleme bei der Installation, die Lösung habe ich dort gepostet.
    Tensorflow und OpenAi Gym sollte auch installiert sein.
    Die Beispiele mit zweibeinigen und vierbeinigen Laufrobotern sind sehr interessant, laufen aber alle auf flachen Oberflächen. Hier ist wohl noch etwas die Schwäche…aber es sollte kein so großes Problem sein, immerhin eine einfache Umgebung aufzubauen. Man kann auch eine Tiefenkamera simulieren, was wichtig ist siehe: https://github.com/openai/roboschool/wiki/Test-Window-and-Camera-Test-Window

  3. sportsfreund schreibt:

    viel spannender allerdings finde ich hingegen: https://arxiv.org/pdf/1711.11017.pdf
    und https://github.com/HoME-Platform/home-platform
    Mit HoME: a Household Multimodal Environment sind Modelle von ganzen Häusern enthalten. Es wird ebenfalls die Bullet Engine verwendet und Tiefenkameras können auch simuliert werden. Es gibt sogar eine Akustik Simulation.
    Mir stellt sich die Frage, ob man einen Robotor, welcher über eine HoME angelernt worden ist, auch in real funktioniert oder ob das Reality Gap zu groß ist?

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s