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.

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 )

Twitter-Bild

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

Facebook-Foto

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

Google+ Foto

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

Verbinde mit %s