Hallo,
eine genaue Übersich der Kosten habe ich nicht, aber es wird sich so zwischen 150 - 200 € einpendeln.
Hier ein paar der wichtigsten Komponenten, natürlich kommt viel Kleinkram hinzu.
1x WLAN-Modul RN 171 35 €
13x Servo zu 5 €
1x NiHm-Akku 4,8V 2300mAh 20 €
1x Distanzsensor 13 €
Bei dem Akku handelt es sich um einen NiHm-Akku mit 2300 mAH - der war eigentlich mal für einen anderen Roboter gedacht - hat sich hier aber hervoragend bewährt. Die Laufzeit von 30-45 min finde sich sehr zufriedenstellend. Und von den Maßen und dem Gewicht des Akkus passt es auch. Die meisten LiPo's wären zu lang gewesen um sie im Torso gut unter zu bekommen.
Der Code ist eigentlich sehr einfach geschrieben - das sieht man auch im Video: das Absetzten der Beine ist sehr abrupt. Alle Beine laufen zu 25 % der Laufzyklus versetzt zueinander - das werte ich dann mittels Modulo-Operation aus und die Beine verhalten sich dann entsprechend ihrer Position.
Code:
while (schlafen)
{
sleep_mode ();
}
schlafen = 1;
i = (i + speed)%100;
weg = (i + 100) % 100;
y_offset = 6 * sin(weg / 100.0 * 2.0 * M_PI - 0.75 * M_PI);
weg = (i + 150) % 100;
if (weg > 74)
{
x = 30.0 + (weg - 75.0) / 100.0 * 60 * 3.0;
z = -50.0;
}else{
x = 90.0 - weg / 100.0 * 60 * 4.0 / 3.0;
z = -60.0;
}
y = -60.0 + y_offset;
move(0, x, y, z); // Bein_vr
weg = (i + 175) % 100;
if (weg > 74)
{
x = -90.0 + (weg - 75.0) / 100.0 * 60 * 3.0;
z = -50.0;
}else{
x = -30.0 - weg / 100.0 * 60 * 4.0 / 3.0;
z = -60.0;
}
y = -60.0 + y_offset;
move(1, x, y, z); // Bein_hr
weg = (i + 125) % 100;
if (weg > 74)
{
x = -90.0 + (weg - 75.0) / 100.0 * 60 * 3.0;
z = -50.0;
}else{
x = -30.0 - weg / 100.0 * 60 * 4.0 / 3.0;
z = -60.0;
}
y = 60.0 + y_offset;
move(2, x, y, z); // Bein_hl
weg = (i + 100) % 100;
if (weg > 74)
{
x = 30.0 + (weg - 75.0) / 100.0 * 60 * 3.0;
z = -50.0;
}else{
x = 90.0 - weg / 100.0 * 60 * 4.0 / 3.0;
z = -60.0;
}
y = 60.0 + y_offset;
move(3, x, y, z); // Bein_vl
Mit dem Befehl "Sleep-Mode" bezwecke ich nur, dass die Bewegungsberechnung nur alle 20 ms ausgeführt wird.
Die Variabel "i" zählt nun fortlaufend für den Zyklus und wird mittels %100 für einen Zyklus von 100 % ausgewertet. Die Versätze der Beine erreiche ich durch das Adddieren der jeweiligen 25 %:
weg = (i + 100)%100
weg = (i + 125)%100
weg = (i + 150)%100
weg = (i + 175)%100
Wenn der "weg" des jeweiligen Beins unter 75 % der Bewegung liegt wird eine Vorwärtsbewegung ausgeführt, wenn sie über 75 % liegt wird angehoben und zurück gesetzt. (z = - 60 - unten; z = -50 - oben)
Die Bewegung wird dann abhängig vom jeweiligen Bein (der Koordinatenursprung sitzt im Roboter-Torso, die X-Achse zeigt geradeaus) im Bereich von (+/-)90 bis (+/-)30 mm mit einer Schrittweite von 60 mm ausgeführt. Für eine gleichmäßige Bewegung wird während der 75 % Vorwärtsbewegung mit 4/3-facher Geschwindigkeit bewegt und beim Rücksetzten (der restlichen 25 %) mit 3-facher Geschwindigkeit.
Die Nummerierung der Beine ist im Uhrzeigersinn (0, 1, 2 und 3). Das Vertauschen der Versätze 150, 175, 125 und 100 für die Beine 0, 1, 2 und 3 hat sich zeichnerisch als die optimale Abfolge erwiesen, da der Schwerpunkt so immer stabil ist. Zusätzlich wird noch eine Sinusbwegung (y_offset) in Laufrichtung aufmodeliert um eine zusätzliche Sicherheit zu erhalten.
Der Befehl "Move" berechnet dann die Servowinkel für die entsprechenden Koordinaten - die Position des Hüftgelenks der jeweiligen Beine wird dort berücksichtigt und subtrahiert.
Da sich gezeigt hat, dass es keinen großen zeitlichen Nachteil bei der Berechnung gibt verwende ich fast nur Fließkomma-Variabeln. Am längsten dauert die Berechnung der Servowinkel durch die Winkel-Funktionen Sinus, Cosinus und Tangens.
Ich hoffe diese Erläuterung hilft dir ein bisschen weiter!
Gruß Erik
Lesezeichen