Klettern auf einer Leiter (NAO)
Inhaltsverzeichnis
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 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
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
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:
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:
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:
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