Humanoider Roboter A1: robolink Arme PDF Drucken E-Mail
Geschrieben von: Malte   
Montag, den 06. August 2012 um 18:02 Uhr

Aufbau | Die aus den robolink Gelenken aufgebauten Arme besitzen jeweils fünf Freiheitsgrade. Ein sechster Freiheitsgrad ist als Handgelenk vorgesehen, dieser wird allerdings nicht von einem robolink gebildet sondern ergibt sich aus der Konstruktion des geplanten Greifwerkzeuges. Die Schulter des A1 bietet drei Freiheitsgrade, das Ellenbogengelenk zwei. Bei den hier verwendeten Gelenken handelt es sich insgesamt um Vorversionen der igus Serienmodelle, die von mir z. T. außerdem für meine Zwecke modifiziert wurden. Der erste Freiheitsgrad der Schulter, der der Rotation des Arms dient, wurde aus Teilen eines robolink Gelenks aufgebaut, es handelt sich in dieser Form nicht um eine "serienmäßige" igus Komponente. Mittlerweile werden in der robolink Produktfamilie aber auch Gelenke mit einem Freiheitsgrad angeboten.

torsotorso

spacer

Beim robolink Gelenksystem müssen zwei Seilzüge für die beiden Bewegungsrichtungen in einem Freiheitsgrad gegensinnig aktuiert werden, ähnlich zur biologischen Situation eines agonistischen und antagonistischen Antriebes. Dieses wird durch eine Seilscheibe am Getriebe ermöglicht, die die beiden Züge gegensinnig auf- bzw. abwickelt. Im Sinne eines kompakten Aufbaus wurden die Motoren senkrecht im Torso untergebracht. Dieses erfordert eine zweimalige Umlenkung der Züge um 90°. Die erste Umlenkung findet an einer geschliffen Stahlwelle statt. Die dabei auftretende Reibung ist im Verhältnis zu Reibungsverlusten im System insgesamt zu vernachlässigen. Die zweite Umlenkung muss so beschaffen sein, dass die Drehbewegung im ersten Freiheitsgrad der Schulter möglich ist. Ich habe dies durch die Verwendung von Bowdenzughüllen erreicht, diese können sich bei der Rotation verdrillen. Die Bowdenzughüllen setzen recht tief im Gelenk an, außerdem liegen sie dort dicht beieinander, wodurch die Verwindung unproblematisch ist - anders als man vielleicht auf den ersten Blick erwarten würde.

spacer

spacer

spacer

 

Motorisierung | Für meine bisherigen Versuche zur Motorisierung der robolink Gelenke habe ich mit DC-Getriebemotoren gearbeitet, beim A1 habe ich einen anderen Ansatz gewählt. Hier kommen Schrittmotoren mit einem Vorsatzplanetengetriebe zum Einsatz.spacer

torsospacertorso

spacer

Der Abtrieb der Getriebeköpfe ist belastbar gelagert, sodass er die naturgemäß hohen radialen Kräfte, die über die Züge angreifen, gut aufnehmen kann. Für die drei Freiheitsgrade der Schulter sind NEMA 23 Motoren im Einsatz, um die relativ hohen erforderlichen Drehmomente aufbringen zu können. Für die verbleibenden zwei distalen Freiheitsgrade des Arms werden schwächere NEMA 17 Motoren verwendet, natürlich ebenfalls mit Vorsatzgetriebe.

 

controllerspacerMotorcontroller | Jeder der Motoren benötigt einen Controller, der im einfachsten Falle von einer übergeordneten Instanz (dem zentralen Steuercomputer) eine Sollposition erhält und den entsprechenden Motor dann dahin fährt und gegen äußere Einflüsse auf dieser Position hält. Konkret bedeutet das hier erstens, dass der Motorcontroller kontinuierlich das Quadratursignal vom Encoder im jeweiligen Freiheitsgrad des robolink Gelenkes auswerten muss, um zu einer Information über die absolute Gelenkstellung zu kommen. Aus der Ist-Soll-Differenz muss dann zweitens mittels eines Regelalgorithmus die nötige Aktivierung der Motoren bestimmt werden, um die Positionsabweichung zu minimieren. Drittens müssen dann die Wicklungen des Schrittmotors zeitlich koordiniert so angesteuert werden, dass dieser sich entsprechend der Ausgabe des Regelalgorithmus dreht. Für die letztgenannte Aufgabe gibt es verschiedene Motortreiber ICs.

Über die Zeit habe ich mit verschiedenen Motortreiber ICs experimentiert. Einer der aufgebauten Motorcontroller verwendet den A4989 von Allegro Microsystems. driverspacerDieser Baustein steuert zwei externe H-Brücken, die aus insgesamt acht N-Kanal Power MOSFETs aufgebaut sind. Die Treiber für die MOSFETs befinden sich im A4989. Er beherrscht bis zu 1/16 Mikroschrittbetrieb. Der A4989 verfügt über ein einfaches Step/Dir-Interface, das bei meinem Entwurf von einem 8 bit AVR (mega168) angesteuert wird. Das links nebenstehende Foto zeigt einen Prototypen der entworfenen A4989 Controllerplatine (rechts im Bild) und der Interfaceplatine (links im Bild), die die Controller mit dem PC verbindet. Im Prinzip funktionierte der Ansatz (in zwei der Videos unten kommt er zum Einsatz), im Detail lief aber doch noch einiges "unrund" daran.

Deshalb verwende ich jetzt für meine aktuell am Roboter eingesetzen Motorcontroller ein anderes Treiber IC, nämlich den L6470 von ST (Bild unten rechts). Dieser verfügt über eingebaute H-Brücken, was den Schaltungsentwurf einfacher macht. Allerdings ist er deshalb auch weniger hoch belastbar. Bei optimalem "thermal management" treibt er bis 3A dauer (RMS) und 7A peak. Das ist für die NEMA23 Motoren an der Grenze, funktioniert aber bisher. Der L6470 beherrscht 1/128 Microstepping, wodurch die Motoren auch bei niedrigen Drehzahlen schön sanft laufen.

spacerdriver

spacer

Auf der Motorcontroller Platine befindet sich ein AVR mega168, der das Quadratur- und Referenzsignal des jeweiligen robolinks auswertet, die Lageegelung rechnet und die entsprechenden Kommando via SPI an den L6470 kommuniziert. Auch für diese Controllerplatine gibt es eine Interaceplatine, die den Controller mit dem zentralen Rechner verbindet (obiges linkes Bild). Das Interface basiert ebenfalls auf einem mega168. Die USB-Verbindung zum PC ist über einen FT232R realisiert. Außerdem bietet die Platine eine RS232 Schnittstelle, die entsprechende Schaltungsteil ist bei oben gezeigten Platine unbestückt.

Letztendlich ist es so, dass jeder Motor seinen eigenen Controller der eben dargestellten Art hat. Die fünf Controller für einen Arm kommunizieren per I²C-Bus mit einem "Master" AVR, der über USB (oder per RS232) die Solldaten für alle fünf Freiheitsgrade vom Steuercomputer erhält und die tatsächlichen Positionen und weitere relevante Daten (das Status-Register des L6470, CRC der Übertragung u. ä.) an diesen zurückgibt.

spacercontroller

 

Der Ganze Aufbau ist nach wie vor etwas provisorisch, wie das Bild oben zeigt. Fünf der L6470-Controllerplatinen sind auf einer Aluminumleiste montiert, diese ist rückseitig am Torso befestigt. Die Aluminumleiste dient gleichzeitig der Wärmeabfuhr, die L6470 sind jeweils mittels eines Messingklötzchens durch die Platine hindurch thermisch mit der Leiste verbunden. Die Verkabelung ist insgesamt noch "fliegend", aber da die Controller längerfristig mit im Torso verschwinden sollen, habe ich mir in der Hinsicht erstmal wenig Mühe gegeben.

 


Steuerung mit Teach-In Arm | Folgend ein Video, das den Arm in Aktion zeigt. interfacespacerHier wird der linke unmotorisierte Arm zum "teach-in" eines Bewegungsablaufes verwendet, der rechte Arm imitiert diese Bewegung mehr oder weniger in "Echtzeit". Das hat in dieser Form zwar wenig praktischen Nutzen, ist aber natürlich als erster Test ganz nützlich. Um die Positionsdaten der robolink Gelenke in den Computer zu bekommen verwende ich ein Interface, das ich vor einiger Zeit - nicht speziell für den A1 -  entwickelt habe. Es kann die Quadratur- und Referenzsignale von bis zu sechs robolink Freiheitsgrade auswerten und gibt diese per USB aus. Das Interface basiert auf einem AVR mega644 der bei 20 MHz getaktet ist. Die sechs DOF werden mit etwa 60 KHz ausgelesen.

 

Motion Sequencer | Da die Steuerung des Arms über einen PC läuft, können die Daten des teach-in-Arms dort aufgenommen und zu einem späteren Zeitpunkt wieder abgespielt werden. Im folgenden Video habe ich das mal rudimentär dargestellt.

 

Präzision | Um ein Gefühl für die Wiederholgenauigkeit des Systems zu bekommen, habe ich einen Stift am Arm angebracht und ihn damit wiederholt zwei kleine Kritzeleien malen lassen. In diesem Test war die Wiederholgenauigkeit mit etwa ±1 mm ganz akzeptabel, allerdings ist natürlich nicht gesagt, dass sich das für den gesamten Arbeitsbereich verallgemeinern lässt. Außerdem ist zu bedenken, dass dieser Test ohne signifikante Belastung des Arms durchgeführt wurde. Unter Last sind andere Ergenisse möglich - probiert habe ich in der Hinsicht aber noch nichts.

Proof of Concept | Ich hatte zunächstmal nur am ersten Freiheitsgrad der Schulter probiert, ob das Konzept soweit erfolgsversprechend ist. Es gibt zweifellos noch an verschiedenen Stellen Optimierungsbedarf, aber grundsätzlich funktioniert das System schon ganz gut, wie das folgende Filmchen belegt. Bei diesem Video kommt der A4989 Motorcontroller zum Einsatz, den ich aktuell nicht verwende.

 

Imitationsverhalten | Hier noch eine sehr einfache Anwendung des "skeleton trackings" der Kinect. Ich bestimme den Winkel zwischen dem Oberarm (Vektor aus "ShoulderRight" und "EllbowRight") und der Wirbelsäule (Vektor aus "ShoulderCenter" und "Spine") des detektierten Skeletts. Dieser Winkel wird dann verwendet, um den ersten DOF der Schulter auf die entsprechende Position zu fahren. Der Roboter kann meine Armstellung somit unabhängig von meiner absoluten Position zu ihm imitieren. Auch bei diesem Video kommt der A4989 Motorcontroller zum Einsatz, den ich aktuell nicht verwende.

 

Hinter diesen Thumbnails gibt es detailliertere Infos zu den anderen Teilprojekten:

Sensor-Head

Rückgrat

mobile Basis

Greifer

Zentralrechner

AddThis Social Bookmark Button
Zuletzt aktualisiert am Sonntag, den 15. Februar 2015 um 16:40 Uhr
 

Kommentar schreiben

Sicherheitscode
Aktualisieren

 

Suche

Benutzer

Wir haben 10 Gäste online

unterstützt von

batronix logo

spacer

rotacaster logo

spacer

spacer

spacer

Meine Tweets

Extern

youtube logo twitter logo email logo

spacer

spacer

spacer

Reklame