High-Performance Motion Primitive


Inzwischen sind die Geschwindigkeitsprobleme mit den Motion Primitiven überwunden. Man muss in Box2D einfach nur ein wenig an den Parametern herumdrehen und schon läuft die Engine mit 10000x facher Beschleunigung. Dadurch ist es mir gelungen sogar einen RRT Solver für Motion Primitive zu implementieren. Ein erster Prototyp funktioniert bereits. Dieser probiert 6 unterschiedliche Motion Primitive per Zufall aus und versucht einen Zielzustand zu erreichen. Konkret geht es darum, eine Box nach rechts unten ins Spielfeld zu bringen. Der Sourcecode ist noch nicht ganz ausgereift, deshalb wird er hier nicht abgedruckt, aber die wesentlichen Probleme sind überwunden.

Inhaltlich orientiert sich das Kozept stark an den Arbeiten von Marc Raibert (Finite State Machine for charakter control) und an Michiel van de Panne der sehr detailliert die Schritte zum Erstellen eines Motion Control Systems beschrieben hat.

Anfangs war ich noch unsicher, ob man Motion Primiitve tatsächlich gegen eine Box2D Physik-Engine testen lassen kann, aber es funktioniert. Mit ein wenig Parametertuning erreicht man sogar unter Python eine hohe Geschwindigkeit. Ich musste in den Solver sogar noch eine Verlangsamung einbauen, damit die Anzeige nicht zu schnell über den Bildschirm rast. Nach dieser Methode kann man im Grunde jedes Motion Control Problem lösen. Egal ob dexterous Grasping in cluttered environment, biped walking oder UAV Control. Der Ablauf zum Erstellen eines Robot-Control-Systems ist in meinem Paper beschrieben was demnächst auf Academia.edu erscheint. Aber die Kurzfassung gibt es schonmal als Vorabdruck hier exklusiv im WordPress Blog:

1. Spiel programmieren. Mit Hilfe von pygame und Box2D bastelt man sich kleines Spiel. Im einfachsten Fall eine 2d Draufsicht wo unter einem Mikroskop ein Objekt bewegt werden muss.
2. Dieses Spiel wird ganz normal per Mouse manuell gespielt, das heißt der Human Operator bewegt den Roboter und versucht darüber die Punkte zu erhöhen.
3. Die Maussteuerung wird ersetzt durch Motion Primitive die in einer GUI angeordnet sind. Mögliche Motion Primitive sind: movetoobjekt, push, movetoinit, circletoleft
4. Jetzt versucht ein Human-Operator ob er allein über das GUI Menü eine Aufgabe lösen kann, also ohne Verwendung der Maus, sondern nur indem er Motion Primitive auswählt.
5. Über einen RRT Solver werden jetzt Sequenzen von Motion Primitive gegen die Box2D Engine durchprobiert um einen Zielzustand zu erreichen.
6. Fertig: das System läuft autonom ohne Human-Operator

Damit Schritt 5 (Brute-Force-Search gegen die Physik-Engine) schnell genug läuft muss man beim Entwickeln des Spiels schon auf hohe Performance der Physik-Engine achten. Das heißt, man spielt ein wenig mit den Parametern herum und sucht sich gleich eine Physik-Engine aus, die eine hohe Framezahl erreicht. Natürlich im Blindbetrieb ohne die GUI welche bremsen würde, sondern die Physik-Engine wird genauso genutzt wie bei Computerschach. Zum Benchmarking kann man sich eine Zufallssequenz ausdenken und die laufen lassen und dann versuchen die Framezahl zu maximieren.

Technologisch ist das Verfahren uralt. Die ersten Veröffentlichungen von Marc Raibert stammen aus Mitte der 1980’er. Das ist jetzt mehr als 30 Jahre her. Umso erstaunlicher dass all die Jahre das Verfahren keine breitere Öffentlichkeit gefunden hat. Zu Unrecht wie ich finde, es funktioniert ausgezeichnet. Und es bietet noch viel Raum für Verbesserung. Der Hauptvorteil besteht darin, dass ein Weg gefunden wurde, den komplexen Suchraum mittels Motion Primitive drastisch zu verkleinern. Dadurch ist es möglich, selbst auf Normal-Hardware (lowcost PC von der Stange) in Echtzeit die Berechnungen auszuführen. Man kann sich das vorstellen wie ein Schachcomputer der Blitzschach spielt nur dass das Spiel nicht Schach ist, sondern walking und grasping. Vermutlich kann man mit besserer Programmierung die benötigte Rechenleistung noch weiter absenken. Fakt ist jedenfalls dass man keine Supercomputer benötigt, um einen Roboter geradeausgehen zu lassen und ein wenig Treppen steigen lassen.

Wie ein fertiges System aussieht wo man den Motion Controller nicht nur in der Simulation sondern in einem richtigen Roboter ausprobiert will ich gar nicht so genau wissen. Vermutlich erreicht der Roboter Super-Human-Fähigkeiten, kann also geschickter über einen Hindernissparcurs rennen als das ein Mensch vermag. Das ist jedoch reine Spekulation.

Fakt ist jedenfalls, dass elektrisch betriebene Servos ein höheres Drehmoment erzeugen können, als es Menschen vermögen, und das die oben beschriebene Software schneller ausrechnen kann wo ein Fuß hinmuss als das Menschen vermögen. Insofern dürfte die KOmbination aus beidem sich wie ein Super-Sportler verhalten, also eine Art von Data der die 100 Meter in 5 Sekunden läuft und Sprünge aus großer Höhe übersteht.

Advertisements

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