Ha, super!! danke, das hilft mir echt weiter. Damit beschäftige ich mich jetzt erstmal eine Weile
Toll, dass es so schnell ging.
Hallo!
Nachdem ich nun ein bißchen gelesen und gerechnet habe, stehe ich immer wieder vor einem Problem. Zwar weiss ich, wo die Beine stehen sollen und wie die zugehörigen Gelenkwinkel usw. sind und auch welches Bein zu welchem Zeitpunkt bewegt werden soll.
Nur wie gebe ich die Signale für die Bewegungen. Ich möchte den Roboter gern mit einer Fernsteuerung bedienen, er soll also nicht autonom irgendwohin krabbeln. Wenn er jetzt das Signal "nach vorne gehen" bekommt, soll das Programm nicht "nur" die von mir berechneten Winkel der Servos einstellen. Die Formeln für die Berechnung sollen im Programm sein und dann abegarbeitet werden, sodass der Roboter sich selbst "überlegen" muss, welches Bein er wie bewegt. Die Inverse Kinematik soll der Robo also selbst berechnen.
Könnte jemand vielleicht mal schreiben, wie sein Signal zu "nach vorne gehen" ist und wie das Signal dann im Code verarbeitet wird? Also nicht mit Formeln, sondern nur, "was" das Signal bewirkt und was der Code darauf tut.
Viele Grüße!!
Du hast also schon herausgefunden, wie die IK berechnet wird? Gut.
Nun wäre der nächste Schritt, wie die Beinbewegung aussehen muss. Dazu brauchst du irgendeine Funktion im Raum, die die Bewegung der Fußspitze beschreibt. Im einfachsten Fall wäre das ein Rechteck, also Fuß hoch, Fuß nach vorne, Fuß runter, Fuß nach hinten. Diese vier Strecken müsstest du in gleich große Abschnitte einteilen (meinetwegen 5mm oder sowas). Der Ablauf wäre dann so, dass immer die folgende Koordinate verwendet werden würde.
Ein einfaches Beispiel:
Der Fuß soll 2cm angehoben, 3cm nach vorne bewegt, wieder 2cm nach unten und 3cm nach hinten bewegt werden, in 5mm Inkrementen. Die Folge der Positionen wäre also irgendwie sowas:
x y z
0 0 0
0 0 5
0 0 10
0 0 15
0 0 20
5 0 20
10 0 20
15 0 20
usw.
Dazu müsste noch ein Versatz gerechnet werden, da du ja vermutlich deinen Koordinatenursprung in der ersten Achse liegen haben wirst.
Nun müsste der Controller irgendwie diese Bewegung als Funktion implementiert haben. Nun wird immer nach einer konstanten Zeit die neue Koordinate berechnet und über deine IK die zugehörigen Winkel. Diese Winkel werden dann in das benötigte Servosignal umgerechnet und das Bein sollte dann die gewünschte Bewegung ausführen. Für die anderen Beine könnte man das ähnlich aufbauen.
Die Streckeninkremente in Kombination mit der Zeit, die dazwischen verstreichen soll, bestimmen die Geschwindigkeit. Am besten ist, wenn der Servo jeden PWM-Takt ein neues Signal bekommt, damit die Bewegung möglichst flüssig wird.
Dieser Algorithmus ist aber auch noch sehr einfach gehalten und ich bin mir sicher, dass es noch bessere Methoden gibt, damit die Bewegung nicht so hakelig wird.
Was mich aber noch interessieren würde: wie hast du vor, dass der Bot nicht immer hin und her kippt? Für eine Stabile Position braucht es immer mindestens 3 Punkte. Der Bot müsste also immer ein Bein nach dem anderen setzen.
Ah okay. Die Zahlen werden also vom Controller berechnet und nicht einfach dem Controller gegeben. Und der Versatz wird benutzt, damit man nicht für jedes Bein ein eigenes Koordinatensystem benutzen muss.
Erstmal baue ich mir ein Bein mit 3 Servos, um die Berechnungen auszuprobieren und zu üben.
Um auf deine Frage zu antworten: Genau, der Robo wird immer nur ein Bein nach dem anderen bewegen können. Vor dem ersten Schritt muss der Körper sich in eine Richtung bewegen, damit der Schwerpunkt zwischen drei Beinen liegt. Auch zwischen zwei Schritten muss der Körper wieder ausgerichtet werden. Und beim Ausrichten müssen auch noch fast alle Servos auf einmal bewegt werden. Oh man, beim Tippen merkt man so richtig, wie weit das noch weg ist
Hier ist ein Link von einem supereleganten Gang!
http://www.youtube.com/watch?v=jWP3RnYa_tw
Ok, in dem Video mekrt man aber auch, dass der Programmierer versteht, was er da macht. Sieht wirklich sehr gekonnt aus.
Ansonsten hätte ich die Idee, dass man den Körper des Quadropods gleichmäßig über den Boden bewegen lässt, sodass sich die Füße auf geraden Bahnen bewegen müssen. Dabei wird dannimmer abwechselnd ein Bein nach dem anderen weiterversetzt. Ziel wäre es, dass beim normalen Laufen alle Beine in Bewegung sind, wobei immer drei Beine den Körper vorran bewegen, während das Vierte wieder nach vorne gehoben wird. Die Fußspitzen machen also alle dieselbe Bewegung, nur eben phasenversetzt. Das Nachvorneheben des Fußes müsste auch 1/3 der Zeit brauchen, die die anderen Beine den Körper vorranbewegen. Müsste man also die Geschwindigkeit anpassen. Wenn dabei immer das Bein bewegt wird, was schon am längsten aufgesetzt wurde, dürfte der Schwerpunkt auch gut liegen. Vielleicht wäre es ganz praktisch, das Ganze schonmal vorher irgendwie zu simulieren, also nur mit Fußpositionen, ohne IK. Interessant ist dann nämlich auch das Anlaufen bzw. Stehenbleiben, da die Beine dann ja nicht phasenversetzt sind. Beim Anlaufen müsste also das erste Bein einen Viertelschritt machen, das Zweite einen halben Schritt, das Dritte einen Dreiviertelschritt und die darauffolgenden Schritte sind dann immer vollständig. Mit der Methode könnte man es aber so machen, dass der Hexapod in alle Richtungen laufen kann, ohne sich zu drehen, also auch diagonal laufen, wobei sich der Körper im Idealfall gleichmäßig auf einer Bahn bewegt. Drehung müsste man dann gucken, wie man das realisieren kann. Wahrscheinlich mit Kreisbahnen, die einen gemeinsamen Mittelpunkt haben.
Du siehst schon, im Grunde geht es jetzt darum, die Bewegungen mathematisch beschreiben zu können, damit du mit den resultierenden Koordinatenverläufen und deiner IK die Servobewegungen errechnen kannst.
Ich hab mich zwar selbst noch nicht so sehr mit Multipods (ist das der Oberbegriff?) beschäftigt, allerdings beschäftige ich mich mit Roboterarmen und deren Bahnplanung. Daher dnek ich mal, dass man das Wissen hier anwenden kann, auch wenn ich noch keine konkreten Lösungen liefern kann, sondern nur Ideen. Und je mehr ich hier schreibe, desto mehr Lust bekomme ich, das mal irgendwann selbst zu probieren![]()
Stimmt! Am besten wäre es wirklich, wenn der Körper sich gleichmäßig über den Boden bewegt. Dein Text liest sich, als wenn du wirklich viele Ideen dazu hast und es eigentlich auch mal ausprobieren möchtest haha. Für dich wäre das sicher nicht die riesige Herausforderung, wenn du dich schon mit Roboterarmen beschäftigst.
Wahrscheinlich werde ich mich in nächster Zeit auch mit einem Roboterarm (-bzw. dann dem Bein, aber man kann es ja nennen, wie man will:-D) beschäfitgen. Ich denke mal, dass es mit 3 Servos noch überschaubar bleibt, aber trotzdem gibt´s viel zu lernen!
Lesezeichen