Also zeichnen lässt sich das schwer, aber ich versuche das mal anhand des Codes zu erklären.
Hier mal der Auszug für 2 nacheinander folgende Beine:
Code:
// 100 entspricht einer vollen Beinbewegung
// pro Bewegung legt ein Bein 40 mm zurück
// pro Bewegung werden 3/4 der Zeit für die Vorwärtsbewegung genutzt (Bewegung vorwärts = 100 * 0,533 * 0,75)
// und 1/4 für das Zurücksetzen (Zurücksetzten = [100 * 0,533 - 40] * 3)
// hier wird die aktuelle Zyklusposition ermittelt - die 1. "100" entspricht dem Offset für jedes Bein
weg = (i+100)%100 * 0.533;
// Abfrage: wo im Zyklus sind wir: weg < 40 entspricht der Vorwärtsbewegung
if (weg > 41)
{
// Zurücksetzten
x = 50.0 + (weg-40.0) * 3.0;
// und das Bein anheben
z = 60.0;
}else{
// Vorwärtsbewegung
x = 90.0 - weg;
// und das Bein ist unten
z = 70.0;
}
// die Y-Kooardinate bleibt immer gleich
y = -70.0;
// diese Funktion berechnet die Winkel für die geforderte Beinposition; die erste Ziffer "0" ist die Angabe des Beins
move (0, x, y, -z); // Bein_vr = 0
// das 2. Bein hat einen Zyklusversatz von 25% = 125
weg = (i+125)%100 * 0.533;
if (weg > 41)
{
x = 50.0 + (weg-40.0) * 3.0;
z = 60.0;
}else{
x = 90.0 - weg;
z = 70.0;
}
y = 70.0;
move (1, x, y, -z); // Bein_vl = 1
// optional:
// wait 20 ms - Rechenzeit (ca. 5 ms)
// und weiter gehts im Zyklus
i ++;
Also im Prinzip bewegen sich zunächst alle Bein nach hinten um den Roboter nach vorne zu bewegen. Alle Beine sind in ihrem Zyklus um 25 % versetzt - bei 100 % haben alle 4 Beine eine vollständige Bewegung vollzogen (also Vorwärtsbewegung und Zurücksetzten).
Während der Bewegung haben die Beine bei 75 % ihren vollständigen Hub nach hinten erledigt, die restlichen 25 % des Zyklus wird das Bein angehoben und mit der 3-fachen Geschwindigkeit zurückgesetzt.
Das Drehen erfolgt im gleichen Prinzip. (Die Beine bewegen sich auf einem Stück einer Kreisbahn)
Leider ist mein Vorgehen noch nicht optimal - wie geschrieben neigt der Roboter noch zum kippen. Aber das Austarrieren würde ich im Prinzip nur auf die oben beschriebene Bewegung herauf-modulieren. Die Grundbewegung würde so bleiben.
Für dieses Ausgleichen muss ich mir noch einen schönen Code zusammenbasteln/ausdenken. Ich denke zur Zeit daran, den Korpus vom anzuhebenden Bein weg-zudrehen so, dass der Korpus im Prinzip um seine eigene Achse taumelt.
Eine Kombination von mehreren Bewegungen (Drehen, Laufen, "taumeln") habe ich noch nicht vorgesehen - soll aber auch irgendwann realisiert werden...
Ich habe leider grade viel zu tun, aber sobald ich wieder Zeit habe, werde ich mal gucken wie man die Bewegung optimieren kann.
Ich hoffe trotzdem, dass ich dir ein bisschen weiterhelfen konnte?!
Gruß Erik
Lesezeichen