Klettern auf einer Leiter (NAO)

Aus Informatik
Wechseln zu: Navigation, Suche

Grundidee

Inspiriert durch ein Video, möchten wir den NAO eine Leiter hochklettern lassen. Zusätzlich soll er einige weitere "Spielereien" beherrschen.

Planung und Konzept

Um unser Projekt realisieren zu können, ist der Bau einer eigenen Leiter fundamental. Die Leiter soll aus Holz bestehen.
Das Klettern selbst soll durch einen Algorithmus realisiert werden, der nach dem Erklimmen der ersten Stufe mehrfach widerholt wird. Dazu soll eine feste Bewegungsfolge implementiert werden, die auf unsere Leiter angepasst ist.

Der NAO

Der NAO ist ein humanoider Roboter, der vom französischen Unternehmen Aldeberan entwickelt worden ist. Er besitzt 26 Motoren, mit denen er alle seine Gliedmaßen mit annähernd der Freiheit eines Menschen bewegen kann. Zudem verfügt er über diverse Sensoren, Kameras, Mikrofone, Lautsprecher und LEDs. Alle diese Bauteile sind über eine mitgelieferte Software frei bedienbar.

Nao Next Gen (2011)
Höhe 58 cm
Gewicht ab 4,3 kg
Laufzeit 60 Minuten (mit voller Aktivität), 90 Minuten (unter Normalbedingungen)
Freiheitsgrade 21 bis 25
CPU Intel Atom @ 1.6 GHz
Betriebssystem Linux
Programmierplattformen Windows, Mac OS, Linux
Programmiersprachen Python, Java (Programmiersprache)|Java, MATLAB, URBI|Urbi, C (Programmiersprache)|C, .NET Framework|.Net
Bildsensoren Zwei HD 1280x960 Kameras
Datenverbindung Ethernet, Wi-Fi
Sensoren 4 Ultraschallsensoren, ein Trägheitssensor, Drucksensoren in den Füßen


(Quelle: Wikipedia)

Die Leiter

Die Leiter des NAO Roboters

Die Leiter besitzt 8 Sprossen, welche jeweils einen Durchmesser von 16mm haben. Damit der Roboter einen besseren Halt beim Klettern hat, haben wir geriffelte Sprossen verwendet. Die Sprossen haben jeweils einen Abstand von 14cm zueinander. Ausnahme hierbei ist die erste Sprosse, welche einen geringeren Abstand zum Boden aufweist.
Die Latten wurden mit einem 16mm Bohrer vorgebohrt, damit wir die Sprossen in die vorgebohrten Löcher stecken können. Um die Leiter ein wenig stabiler zu machen, wurden die Sprossen anschließend verschraubt.
Die Hinterseite der Leiter wurde mit Schanieren montiert, damit ein einfaches Verstauen der Leiter garantiert ist und wir die Neigung präzise einstellen können.
Des Weiteren haben wir zwei Haken montiert und diese mit einer Schnur verbunden, damit wir immer mit derselben Neigung der Leiter arbeiten.




Fitnessübungen

Bevor der NAO die Leiter besteigt, soll er noch einige Fitnessübungen machen, um seine Motoren aufzuwärmen. ;)

Kniebeugen

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden
Kniebeugen des NAOs

Zu Beginn der Fitnessübungen soll der NAO einige Kniebeugen durchführen. Zunächst fragt der Roboter, wie viele Kniebeugen er machen soll. Er akzeptiert die Anzahl von ein bis fünf. Hat der Roboter die Antwort richtig verstanden, führt er die genannte Anzahl an Kniebeugen durch. Falls nicht, fragt er noch einmal nach, wie viele Kniebeugen er machen soll.

Liegestützen

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden
Der NAO macht Liegestütze

Nach den Kniebeugen sind einige Liegestützen vorgesehen. Der Roboter geht am Anfang in die Hocke und stütz sich danach mit einem Arm auf dem Boden ab. Ist der NAO stabilisiert, stützt er auch seinen zweiten Arm auf dem Boden ab. Sobald er sich korrekt abgestützt hat, streck er seine Beine aus. Er ist nun in der Position, um mit den Liegestützen zu beginnen. Danach erfolgt eine normale Liegestützbewegung (Der Roboter knickt am Ellenbogen ein und streckt ihn danach wieder). Nach fünfmaligem wiederholen, begibt sich der Roboter wieder in die Grundposition. Er streckt also seine Arme wieder aus und zieht seine Beine an seinen Körper heran. Durch Gewichtsverlagerung gelingt es ihm dann, wieder auf die Beine zu kommen und aufzustehen.





Umsetzung (Programmierung)

Zur Progammierung der Bewegungsabläufe des NAOs nutzen wir eine vom Hersteller Aldebaran bereitgestellte Software namens Choreographe.

Fitnessübungen

Zu Beginn der Fitnessübungen fragt der Roboter, wie viele Kniebeugen er machen soll. Realisiert wird dies mit einer vorgefertigten Methode (Choice) der Software Choreographe. Im Folgenden kann man erkennen, wie unsere Abfrage aussieht:

Choice.PNG

Man erkennt also, dass der Roboter zunächst in einer s.g. "Say"-Box fragt, wie viele Kniebeugen er machen soll. Danach wechselt er in die "Choice"-Box, welche fünf Auswahlmöglichkeiten beinhaltet. Die bedienende Person kann die Antworten eine, zwei, drei, vier und fünf geben. Versteht der Roboter die Antwort nicht, so fragt er noch einmal nach. Es ist auch möglich, die Antwort mithilfe der drei Sensoren auf dem Kopf zu geben. Dies ist empfehlenswert, wenn die Umgebung viele Nebengeräusche aufweist.
Die Fitnessübungen (also die Kniebeugen sowie die Liegestützen) werden mithilfe einer s.g. Timeline realisiert. Dabei wird der Endzustand einer Bewegung eingespeichert und einem bestimmten Frame zugewiesen. Die Timeline ermöglicht es uns, mehrere Bewegungszustände abzuspeichern und nacheinander auszuführen, sodass eine pausenlose Bewegung möglich wird. <br\> Betrachtet man dies nun in Choreographe, sieht eine Timeline wie folgt aus:

Klettern Choreo.PNG

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden
grafische Bearbeitung der Timeline

Die einzelnen Bewegungszustände kann man beliebig auf der Timeline platzieren und verschieben. Da einige Bewegungen langsamer abgespielt werden müssen als Andere, vergrößert man einfach den Abstand der Bewegungszustände. Des Weiteren ermöglicht es die Timeline, die FPS (Frames per Second) selbstständig einzustellen. Somit kann man die Timeline verschnellern oder verlangsamen. <br\> Die einzelnen Positionen der Gliedmaßen des NAOs werden manuell festgelegt, indem ein oder mehrere Körperteil/e gelockert werden, sodass man die Motoren per Hand justieren kann. So bewegt man den Roboter an die gewünschte Position. Diese wird dann wie bereits beschrieben in der Timeline gespeichert und an einem beliebigen Zeitpunkt aufgerufen. Durch die Abfolge verschiedener Positionen entsteht die Bewegung. <br\> Es ist jedoch auch möglich, die Gliedmaßen des Roboters mithilfe des Programms auf den Grad genau zu fixieren: Motor.PNG

Das Klettern

Wie bereits bei den Fitnessübungen beschrieben, besteht unsere Klettereinheit ausschließlich aus abgespeicherten Bewegungsschnipseln. Bei einigen Bewegung war es notwendig, den Roboter zu dritt zu fixieren, da Arme, Beine und Hüfte gleichzeitig bewegt werden mussten. <br\> Wir haben unsere Timeline auf 40 FPS festgelegt.

Probleme

Wir wurden schon sehr früh mit den folgenden Problemen konfrontiert:

1.Problem:
Da wir für unsere Idee eine Leiter brauchen, die speziell für den NAO zugeschnitten ist, müssen wir diese selber zusammen bauen. Dabei ist der Abstand zwischen den Sprossen essentiell. Sind die Sprossen zu weit auseinander, kann der NAO seinen Fuß nicht hoch genug heben. Sind sie aber zu nah aneinander, hat der NAO keinen Platz, um seinen Fuß dazwischen zu schieben. Zudem müssen die Sprossen auch die richtige dicke haben. Sind sie zu dünn, halten sie den Roboter nicht. Sind die Sprossen aber zu dick, kann sie der NAO nicht mit seiner Hand greifen, um sich daran festzuhalten.
Lösung
Durch das Video konnten wir den Sprossenabstand ungefähr abschätzen. Um die richtige dicke der Sprossen zu ermitteln, haben wir den Roboter unsere Finger greifen lassen. Wir haben erkannt das der Zeigefinger die richtige Dicke hat und sind beim Sprossenkauf davon ausgegangen.
2.Problem:
Beim durchführen der Liegestüzen, muss der NAO seinen Körper nach unten bewegen. Passiert dies zu ruckartig fällt er nach vorne. Ist er nicht richtig stabilisiert, fällt er hin.
Lösung
Durch ausprobieren von Grenzen, haben wir die optimale Geschwindigkeit und Balance gefunden.
3. Problem:
Nach Fertigstellung der Leiter konnten wir sofort mit dem Erklimmen der ersten Sprosse beginnen. Dabei wurden wir mit einem großen Problem konfrontiert. Der Fall-Manager, hindert den Roboter am Erklimmen der Stufe. Er arbeitet mit dem Gyro-Sensor im Zentrum des NAOs und kontrolliert so das Gleichgewicht des Roboters. Wird eine zu starke Neigung oder zu große Gewichtsverlagerung auf nur ein Bein festgestellt, erschlaffen alle Motoren und der NAO soll kontrolliert hinfallen.
Beim Klettern muss der Roboter seine Beine abwechselnd sehr hoch heben. Dabei nimmt die Sensorik einen Gleichgewichtsverlust wahr und löst den Fall-Manager aus. Der Roboter fällt also vor dem Erklimmen der ersten Stufe eigenwillig von der Leiter, obwohl er sich eigentlich mit den Händen festhalten könnte. Dieses Festhalten nimmt die Sensorik nicht wahr.
Lösung
Zuerst haben wir versucht das Problem durch Internetrecherche und Kontakt zu dem Ersteller des Videos, welchem wir unsere Idee entnommen haben, zu Lösen. Dies blieb jedoch ohne Erfolg. Selbstständig haben wir mit viel Feingefühl und Vorsicht eine Gewichtsverlagerung implementieren können, die den Fall-Manager nicht auslöst.
4.Problem:
Da wir den Sprossenabstand nur abschätzen konnten, haben wir die Sprossen ein wenig zu weit auseinander platziert. Daher kam der NAO mit seinem Bein nicht auf die zweite und alle folgenden Sprossen. Allerdings besitzt der Roboter nicht genug Kraft in den Händen um sich hochzuziehen und man muss mit den Beinen arbeiten.
Lösung
Durch das Verlagern der Hüfte nach hinten, das Nutzen eines Ausgleichschrittes und das Kippen des Beines zur Seite haben wir an weiter Höhe gewonnen und konnten auf die nächste Sprosse erklimmen.
5.Problem:
Da unser Roboter durch den Ausgleichschritt einen leichten Rechtsdrang besitzt, hat er irgendwann keinen Platz mehr, um mit der Rechten Hand nach der nächsten Sprosse zu greifen.. Er bleibt an der Leiter hängen und kann seine programmierte Stellung nicht erreichen.
Lösung
Durch das Zurückbewegen seines Oberkörpers, kann er seine Hand zwischen Leiter und Körper hindurch bewegen und somit den zu geringen Abstand auf der rechten Seite umgehen.
6.Problem:
Beim Abspeichern und wieder Ausführen der Bewegungsabläufe viel uns schnell auf, dass der Roboter die zuvor eingespeicherten Bewegungen nicht exakt wiedergibt.
Lösung
Mithilfe der Möglichkeit, die einzelnen Motoren im Programm anzusteuern, konnten wir das Problem umgehen. Es war uns möglich, die Motoren auf den Millimeter genau zu fixieren.
7. Program:
Da die einzelnen Bewegungsabläufe auf der Timeline nicht mit einem Index oder Namen eingespeichert werden können, kann man nicht unterscheiden, welcher Bewegungszustand vorliegt. Dies ist bei der Bearbeitung einiger Bewegungsabläufe kontraproduktiv.
Lösung
Es blieb uns nur die Möglichkeit, die Timeline abzuspielen, bis wir bei der gewünschten Bewegung sind.

Erweiterungsmöglichkeiten

Selbstverständlich ist es möglich, unser Projekt noch weiter auszudehnen und zu erweitern. Im Folgenden sind einige mögliche Erweiterungen aufgeführt.

Schnelligkeit

Die Schnelligkeit der Klettereinheit kann noch angepasst und vergrößert werden. Wichtig ist jedoch, dass einige Bewegungen nicht zu schnell abgespielt werden dürfen, da der Roboter sonst zu ungenau arbeitet. In der Timeline kann man leider nicht so einfach erkennen, welcher Bewegungszustand vorliegt. Dies erschwert die Anpassung der Schnelligkeit um ein Vielfaches.

Herunterlaufen der Leiter

Es ist natürlich auch möglich, die Leiter wieder rückwärts herunterzulaufen. Leider funktioniert ein einfaches Rückwärtsabspielen der Timeline nicht, da der Roboter nicht genau genug arbeitet. Man müsste also einige Bewegungsabläufe neu anpassen.

Zur Leiter laufen

Nach den Fitnessübungen, welche der NAO durchführt, könnte er auch selbstständig zur Leiter laufen. Dies ist jedoch nicht so einfach, da der Roboter die Leiter erkennen muss und selbstständig entscheiden muss, wie weit er noch nach vorne gehen darf. Die Verwendung der Kamera oder der Sonarsensoren ist also essentiell. Mithilfe der Kamera/des Sonars kann auch die Folgende Erweiterungsmöglichkeit realisiert werden:

Automatisches Besteigen der Leiter

Bisher realisieren wir das Besteigen der Leiter mithilfe des Speicherns von Bewegungsabläufen. Theoretisch ist es möglich, dass der NAO die Sprossen mit seiner Kamera erkennt und dann selbstständig nach diesen greift und die Leiter hinauf klettert. Um dies realisieren zu können, sind weitere Kenntnisse in der Programmiersprache Python von Nöten.

Umsetzung (Protokoll)

01.02.16
- Ausarbeitung des Grundkonzepts
- Kennenlernen von Choreograph
- Programmieren erster Grundbewegungen (Festhalten an einem Stuhl)
11.02.16
- Programmierung von Liegestützen und Kniebeugen
18.02.16
- Zusammenführung und Verbesserung der Liegestützen und Kniebeugen
- Programmierung einer Erschöpfung
- Kennenlernen der Sensorik
22.02.16-25.02.16
- Bauen der Leiter
29.02.16
- Erste Anlaufversuche mit NAO & Leiter
03.03.16
- Weiteres arbeiten und erste Problemerkennung (Fall-manager stört beim klettern)
07.03.16
- Versuch Fall-manager zu umgehen, kein Gelingen
17.03.16
- Weitere Versuche (weiterhin kein Erfolg)
21.03.16
- Versuch, den Roboter richtig auszubalancieren (schlägt fehl)
24.03.16
- letzte Versuche, den Roboter nicht zum Fallen zu bewegen ─ Erfolg!
11.04.16
- Geschafft, erste Stufe fast bestiegen.
14.04.16
- Perfektionierung des Kletterns der ersten Stufe
18.04.16
- Arbeit an der zweiten & dritten Stufe + Präsentation
21.04.16
- Implementierung der restlichen Stufen + Bugfix
22.04.16
- Integration der Fitnessübungen + Anfertigung von Bildern/Videos + Bugfix
25.04.16
- Bewegungsoptimierung und -verfeinerung
28.04.16
- Letzter Schliff der Bewegung und Aufnahme des Videos für die Präsentation