project poster - Universität Heidelberg

Transcription

project poster - Universität Heidelberg
Nomad lernt laufen 2
Tabea Krockenberger, Carolin Peternell
Inverse Kinematik
Idee
Dem Programm wird ein Punkt (x, y, z) übergeben, an den der Fuß
des Beines n bewegt werden soll. Dafür wird für jeden der drei Servos des Beines der entsprechende Winkel berechnet.
Dies ist umgesetzt in der Funktion bewegeBein(n, x, y, z).
Dabei musste berücksichtigt werden, dass für einige Positionen zwar
berechnet werden kann, wie sich die Servos bewegen müssten, diese
Positionen jedoch von den Gelenken aus mechanischen Gründen nie
eingenommen werden können.
Vorteile
1. Einfaches Programmieren von Bewegungsabläufen (ohne langes
Ausprobieren!) da man jedes Bein (relativ genau) auf eine vorgegebene Koordinate setzten kann.
2. Einfaches Vermeiden von nichteinnehmbaren Positionen sowie von
Zusammenstößen zweier Beine.
Aufgabenstellung
Fazit und Ausblick
Mittels inverser Kinematik sollen grundlegende Bewegungsabläufe,
wie Laufen und Drehen, implementiert werden.
Dieses Robotik-Praktikum hat uns viel Spaß gemacht.
Die Implementierung der Inversen Kinematik bereitete keine größeren Probleme. Mit Hilfe der Inversen Kinematik ist es mit wenig
Aufwand möglich die unterschiedlichsten Bewegungsabläufe zu
implementieren.
Nomad
Nomad ist ein radialsymmetrischer Hexapod, der durch einen AVR
Mikrocontroller gesteuert wird.
Es gibt zwei Servocontroller, die jeweils drei der sechs Beine steuern;
jedes Bein besitzt drei Servos.
Zur Ansteuerung der Servos wird dem Servocontroller
• die Nummer des anzusteuernden Servos servo Id (aus dem Bereich [0, 31])
• die Geschwindigkeit der Bewegung rate (wobei eine kleinere Zahl
einer höheren Geschwindigkeit entspricht)
• und der Winkel (umgerechnet in eine Zahl zwischen 250 und 1250
und aufgeteilt in low byte und high byte)
Programm
1. Der Funktion bewegeBein werden globale Koordinaten
übergeben. Diese globalen Koordinaten werden in ein lokales
Koordinatensystem für jedes einzelne Bein umgerechnet.
übergeben.
Jedoch scheinen die Möglichkeiten mit Nomad, so wie er jetzt ist,
recht ausgeschöpft und nur das Implementieren neuer Bewegungen
eignet sich eher nicht als Aufgabe für ein neues Praktikum mit
Nomad. Zumal die Möglichkeiten auf Grund der geringen Übertragungsrate recht beschränkt sind.
Eine Idee für zukünftige Praktika wäre z.B. das Anbringen von
(Abstands-)Sensoren, zur Erkennung von Hindernissen oder auch
um über unebenes Gelände zu laufen.
Ein anderer limitierender Faktor hierbei wäre möglicherweise das
Stromkabel, dass nur einen beschränkten Bewegungsradius zulässt.
Allerdings ist fraglich, ob z.B Akkus eine bessere Lösung darstellen, da sie das Gewicht erhöhen, welches sowieso schon kritisch ist
(Nomad ist z.B. nicht in der Lage selbständig aufzustehen).
Bewegungen
Bei den Bewegungen Laufen und Drehen werden immer jeweils drei Beine gleichzeitig angehoben und nach vorne“ abgesetzt während die anderen
”
drei Beine sich (am Boden) nach hinten“ bewegen. Ein Schritt besteht aus jeweils vier Positionen, die nacheinander ausgeführt werden.
”
Leider war es auf Grund der langsamen Übertragung (vom Microkomtroller zu den Servokontrollern) nicht möglich noch weitere Zwischenschritte
einzufügen.
2. Ermitteln der Winkel α, β, γ in der Funktion
berechneWinkel(x, y, z) mit Hilfe von trigonometrischen
Berechnungen:
(a) Bestimmen des Punktes (x, y , z ) und des Winkels α mit
Hilfe der x- und y-Koordinate.
Drehen
(b) Gesucht: (Geeigneter) Schnittpunkt der Kreise um den Punkt
(x, y, z) mit Radius b und um (x0, y0, z0) mit Radius a.
• drehen1(delta)
Drehen um den Winkel delta,
maximaler Winkel pro Schritt: 15◦
Laufen
• laufen2(k, j)
Laufe k Schritte der Länge j.
• laufen1(l)
Laufe l cm, maximale Schrittgröße: 15 cm
• orientieren(k)
Ändern der Laufrichtung um k · 60◦:
• drehen2(delta)
Drehen um den Winkel delta:
orientieren( k · 60◦) und drehen1(delta − k · 60◦)
(c) Mithilfe
dieses
Schnittpunktes
können
die
Winkel
β
und
γ
berechnet
Übergang
dann
werden.
3. Umrechnen der Winkel in (vorher gemessene) Werte im Bereich
[250; 1250] für die Servos durch die Funktionen UmrechnungAlpha, UmrechnungBeta, UmrechnungGamma innerhalb
der Funktion servosAnsteuern(n, alpha, beta, gamma) (mit
Korrekturfaktoren für die einzelnen Beine)
4. Überprüfen, ob die berechnete Position eingenommen werde kann und ggf. bewegen der Servos (in
servosAnsteuern(n; alpha; beta; gamma))
Beim Übergang sollte es nicht nötig sein, jedesmal in die Grundposition zurückzukehren. Also werden die drei Beine, die gerade angehoben sind, auf die neue (Grund-)Position gesetzt, mit den anderen
drei Beinen kann dann sofort die nächste Bewegung begonnen werden.
Da bei dieser Vorgehensweise eine Bewegung jeweils mit den anderen
drei Beinen anfängt als die vorher ausgeführte, musste dies bei den
entsprechenden Funktionen zusätzlich berücksichtigt werden. Dazu
führten wir eine globele Variable ein, in der gespeichert wurde, welche Beine zuletzt angehoben wurden.
Außerdem entschieden wir uns dafür, die Übergänge direkt in die
oben genannten Funktionen mit einzubauen. Das hat den Vorteil,
dass man in der main-Datei die Funktionen direkt hintereinander
schreiben kann, ohne noch eventuelle Übergänge beachten zu müssen.
Das Team
Ruprecht-Karls-Universität
Heidelberg
Betreuer:
Sven Ebser
Prof. Dr. Katja Mombaur
Sommersemester 2010
Carolin Peternell & Tabea Krockenberger
Mathematik (Diplom) mit Nebenfach Informatik (6. FS)