Und wenn Sie sich das nächste Mal mit einer Tasse Kaffee in der Hand umdrehen…

Nachdem ich die Ergebnisse des letzten Postings überdacht habe, finde ich dessen Titel äußerst deplatziert. Ja, die neuen Zahlen sind besser als die alten. Aber das liegt ja an keiner Optimierung des ganzen Systems: Keiner hat irgendetwas schneller gemacht, es wurde schlicht nicht genauer gerechnet. Der Titel weckt also unter Umständen Erwartungen, die nicht eingehalten wurden. Da ich das nicht auf sich beruhen lassen kann, gibt es jetzt Nachschub.

Ich setze voraus, dass jeder schon einmal einen Industrieroboter gesehen hat. Den Rest gibt es im Schnelldurchlauf: Die meisten Industrieroboter besitzen mehrere rotatorische oder translatorische Achsen, die derart hintereinander geschaltet sind, dass die Ansteuerung einer Achse alle dahinterliegenden (in Richtung Werkzeug) Armsegmente bewegt. Wie man die Achsen bewegen muss, erfährt man über inverse Kinematik. Angenommen man will von einem Raumpunkt zu einem anderen fahren. Dann errechnet man aus dem Zielpunkt über inverse Kinematik Gelenkwinkel (für Drehgelenke) und Gelenkabstände (für Translationsgelenke). Da die ursprünglichen Gelenkstellungen bekannt sind, muss also nur jedes Gelenk so bewegt werden, dass es die neue Stellung erreicht. Der Roboter ist am Ziel, wenn das letzte Gelenk – das schwächste Glied in der Kette – die geforderte Auslenkung hat. Schneller geht es erst einmal nicht. Es sei denn, die Gelenke betreiben etwas Teamwork…

Man stelle sich einen hypothetischen Roboterarm vor, der aus einem Drehsockel und einem darauf angebrachten Teleskopzylinder besteht. Beide Komponenten sind so verbaut, dass das Werkzeug an der Spitze des Zylinders einen Kreisring beschreiben kann. Das hat zudem den tollen Nebeneffekt, dass sich die Raumkoordinaten (in Polarform) leicht in Gelenkstellungen umrechnen lassen. Bei jeder Bewegung muss mindestens ein Gelenk beschleunigt und am Ende wieder abgebremst werden. Die Zeit, die dafür erforderlich ist, wird wenigstens beschränkt durch die Stärke des Antriebs (die Kraft oder das Moment, das aufgebracht werden kann) und der Trägheit. Wenn für einen Bewegungsabschnitt die Gelenke nicht gleich viel Zeit benötigen, so ergeben sich drei grundlegende Möglichkeiten: Entweder bewegt man die nicht-zeitkritischen Segmente langsamer, worüber sich die Motoren vielleicht freuen würden. Oder man belässt angekommene Gelenke im Stillstand und betätigt die Bremsen, was sich vielleicht nach einiger Zeit auf der Stromrechnung positiv bemerkbar macht. Oder aber man ersetzt Kraft- und Momentenverläufe nicht zeitkritischer Gelenke durch welche, die das kritische Gelenk entlasten und fährt somit völlig neue Bahnen. Lediglich die Zielstellungen werden beibehalten, da das Erreichen des Zielpunkts der Grund für die Bewegung ist.

Das sieht dann etwa so aus: Ein Gelenk bewegt immer nur alle hinter ihm liegenden Armsegmente. Es kann aber im Allgemeinen trotzdem beeinflussen, wie sich alle anderen Gelenke bewegen. Beim erwähnten Robotermodell dreht ein Ausfahren des Zylinders zwar den Drehsockel nicht, erhöht aber das Trägheitsmoment des Arms. Wird das Drehgelenk also angesteuert, so beschleunigt oder bremst der Arm (bei gleichem Motormoment) langsamer. Eine Drehbewegung macht sich dagegen in Form einer Zentrifugalkraft am Teleskopgelenk bemerkbar. Das Beschleunigen nach außen während der Rotation geht damit leichter, das Beschleunigen nach innen schwerer.

Will man eine lange Drehung zeitlich optimieren, ist es in diesem Zusammenhang sinnvoll, den Arm zwischenzeitlich einzufahren. Das reduzierte Trägheitsmoment erlaubt es dem Drehgelenk, die Zielposition schneller zu erreichen. Idealerweise sollte der Arm gegen Ende auch wieder ausgefahren werden und idealerweise sollte das rechtzeitig passieren. Wie genau die optimalen Bahnen aussehen, hängt von einem relativ großen Bündel an Faktoren ab: Masse und Massenverteilung von Gelenken und Nutzlast, die Maximalkräfte und Momente der Antriebe sowie Start- und Zielpunkt. Anhand eines stark vereinfachten Modells war ich so frei, den Fall durchzurechnen.

Mein Robotermodell besteht aus einem masselosen Arm mit punktförmiger Nutzlast am Manipulator. Ich will von den polaren Raumkoordinaten (1 m, 0) nach (1 m, π) fahren, also eine 90°-Drehung durchführen. Statt den Teleskopzylinder in Ruhe zu belassen, beschleunigt man ihn jetzt mit der Maximalkraft nach innen. Bei sehr grob einem Viertel des zurückgelegten Winkels – hier macht sich die Zentrifugalkraft stark bemerkbar – kehrt man die Antriebskraft um, bremst, und geht zur Beschleunigung nach außen über. Und wiederum grob ein Viertel vor dem Zielwinkel beginnt das Bremsen der Bewegung nach außen. Wenn man alles richtig gemacht hat und mit den groben Vierteln gerade die richtigen Zeitpunkte erwischt wurden, dann kommen beide Gelenke gleichzeitig genau an ihren Zielstellungen zum Stillstand. Und man hat sich einen Teil der Zeit gespart. Es handelt sich nur ein paar Prozent, die sich aber auf Dauer rechnen, wenn die Bewegung für den Prozess zeitkritisch ist.

Pfad des nicht optimierten und zeit-optimalen Roboters im Vergleich

Zeitlicher Verlauf des Drehgelenkwinkels

…und des Teleskopgelenkabstands

Addendum: Trajectory optimization and real-time simulation for robotics applications ist ein frei zugängliches Paper, in dem die selbe Bewegung eines Roboters mit zwei Drehgelenken optimiert wird. Die Bewegung ist dann wesentlich interessanter als das hier.

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