2010-10-22 13 views
6

Ich versuche, inverse Kinematik für eine serielle Kette von beliebig vielen Links zu tun. Im folgenden paper habe ich ein Beispiel gefunden, wie man die Jacobi-Matrix berechnet.Inverse Kinematics: Berechnung der Jacobi

Entry (i, j) = v[j] * (s[i] - p[j]) 

wobei:

v[j] ist der Einheitsvektor der Achse des Drehung für die gemeinsame j

s[i] ist die Position (int Welt Koord?) Gemeinsamer i

p[j] ist die Position (in Welt coords?) Von Joint j

Das Papier sagt, dass dies funktioniert, wenn j ein Drehgelenk mit einem einzigen Freiheitsgrad ist. Aber meine Drehgelenke haben keine Einschränkungen für ihre Rotation. Welche Formel möchte ich dann? (Oder missverstehe ich möglicherweise den Begriff "Freiheitsgrad"?)

Antwort

8

Diese Frage ist alt, aber ich werde trotzdem antworten, da es etwas ist, über das ich nachgedacht habe, aber nie wirklich umgesetzt habe.

Drehgelenke ohne Einschränkungen werden als Kugelgelenke oder Kugelgelenke bezeichnet; Sie haben 3 Freiheitsgrade. Sie können die Formel auch im Tutorial für sphärische Gelenke verwenden, wenn Sie jedes sphärische Gelenk in 3 Drehgelenken mit jeweils einem Freiheitsgrad parametrisieren.

Zum Beispiel: Lassen Sie N die Anzahl der Kugelgelenke sein. Angenommen, jedes Gelenk eine lokale Transformation hat T_local[i] und eine globale Transformation

T_world[i] = T_local[0] * ... * T_local[i] 

Lassen R_world[i][k], k = 0, 1, 2 kann die k- th Spalte der Rotationsmatrix von T_world[i]. Definieren die 3 * N Gelenkachsen als

v[3 * j + 0] = R_world[i][0] 
v[3 * j + 1] = R_world[i][1] 
v[3 * j + 2] = R_world[i][2] 

Compute die Jacobi J für einige Endeffektor s[i], die Formel des Lernprogramms verwendet wird. Alle Koordinaten sind im Weltrahmen.

Wenn Sie zum Beispiel die pseudoinverse Methode verwenden, ergibt sich eine Verschiebung dq, die den Endeffektor in eine bestimmte Richtung bewegt dx.

Die Länge von dq ist 3 * N. Definieren

R_dq[j] = 
    R_x[dq[3 * j + 0]] * 
    R_y[dq[3 * j + 1]] * 
    R_z[dq[3 * j + 2]] 

für j = 0, 1, ..., N-1, wo R_x, R_y, R_z sind die Transformationsmatrizen für eine Drehung um die x-, y- und z -Achsen.

Aktualisieren Sie die lokalen Transformationen:

T_local[j] := T_local[j] * R_dq[j] 

und von oben wiederholen dx den Endeffektor in anderen Richtungen zu bewegen.

3

Lassen Sie mich eine einfachere Herangehensweise an Jacobi im Zusammenhang mit beliebig vielen DOFs vorschlagen: Im Grunde sagt Ihnen die Jacobi, wie weit sich jedes Gelenk bewegt, wenn Sie den Endeffektorrahmen in eine willkürlich gewählte Richtung bewegen. Sei f (θ) die Vorwärtskinematik, wobei θ = [θ1, ..., θn] die Gelenke sind. Dann können Sie die Jacobi erhalten, indem die Vorwärts-Kinematik in Bezug auf die Gelenkvariablen Differenzierung:

J ij = df i/dR j

ist Jacobi Ihres Manipulator. Wenn man es invertiert, erhält man die inverse Kinematik in Bezug auf die Geschwindigkeiten. Es kann jedoch immer noch nützlich sein, wenn Sie wissen möchten, wie weit sich jedes Gelenk bewegen muss, wenn Sie Ihren Endeffektor um eine kleine Menge Δx in irgendeine Richtung bewegen möchten (weil auf Positionsebene dies effektiv eine Linearisierung wäre): Δθ = J -1 Δx
Hoffe, dass dies hilft.