Inverse Kinematik

Hallo, Ich bin schon seit ein paar Monaten am Octapod planen, welcher acht Beine mit jeweils vier Servos hat. Um den kleinen effektiv zu bewegen bracuhe ich Inverse Kinematik... Wisst ihr wo ich eine gute und einfach verständliche Anleitung finde? Vielleicht sogar in Arduinoisch :)

Währe toll wenn mir da jemand helfen kann, da ich echt noch nicht so viel verstanden habe.

LG, Florian

Ps. Ich habe schon alles (mir bekannte) durchsucht und nichts gefunden was mir wirklich hilft.

Hat hier denn keiner von 111? Leuten eine Idee? :)

Tja, das ist ein nicht so ganz einfaches Thema.

Die Wikipedia sagt dazu: "Es existieren folgende grundlegende Methoden: - algebraische Methoden - geometrische Methoden - numerische Methoden" Der erste Punkt benötigt Matrixoperationen, der zweite Trigonometrie und der dritte ein iteratives Vorgehen. Das sind alles Themen, bei denen der Arduino nicht wirklich glänzen kann.

Am ehesten würde ich den zweiten Ansatz mit der Trigonometrie verfolgen. Dabei dann aber nicht mit Fließkommazahlen rechnen, sondern in einer Tabelle direkt die Servo-Einstellungen abspeichern.

Einen hübschen (allerdings auch mathematischen) Einstieg gibt's hier: http://www.gotoandplay.it/_articles/2004/12/inverseKinematics.php

Gruß pi

hmm okay vielen Dank. Ich bin schon immoment grad bei dem trigonometrischen Rechungen. Ist echt hard :)

Ich arbeite mich mal den link ein ;)

Zuerst einmal würde ich die Servos des Octapods in Gruppen einteilen. Die Servos jeden Beines bilden eine Gruppe, sagen wir mal je 3 Servos. Also 8 Gruppen mit jeweils 3 Servos.

BeinBewegen(Zeit, Servowinkel1, Servowinkel2, Servowinkel 3); BeinBewegen(5, 25, 65, 120);

Mit einem Array [8,3] kann ich die aktuellen Winkel jedes einzelnen Servos verwalten. Wenn ich ein Bein bewegen will definiere ich für die entsprechenden 3 Servos jeweils den neuen Sollwinkel. Mit einer entsprechenden Function steuere ich die Servos dann von ihrer alten Stellung in die neue Stellung ! Damit das ganze nicht in einer blitzschnellen Bewegung endet würde ich noch eine Zeitangabe benutzen.

Bsp: Alter Winkel 25 Grad, neuer Winkel 45 Grad, Bewegungswinkel 20 Grad. 20 Grad:5 Sekunden = 4 Grad pro Sekunde.

Wenn man die Servostellungen dann noch 50 mal in der Sekunde aktualisiert verringert sich der zurückzulegende Weg für eine 1/50 Sekunde auf einen Winkel von 0.08 Grad. Wodurch die Bewegung ausreichend geschmeidig aussehen sollte.

Bei 32 Servos bietet sich vorallendingen der SSC-32 Servo Controller an.

Mit einigen aufeinanderfolgenden BeinBewegen-Befehlen kann man dann eine Bewegungs/Animationssequence erstellen.

Also eine Aneinanderreihung von Keyframes eines Posingablaufes.

Bei dieser Vorgehensweise kann man die Bewegung eines Beines auch jederzeit stoppen und in eine andere Bewegung übergehen. Z.B. wenn ein Fuss vorzeitig und unerwartet den Boden erreicht, durch eine Erhebung z.B.