Frage

Ich versuche, inverse Kinematik für eine serielle Kette von beliebig viele Links zu tun.

In der folgenden Papier , habe ich gefunden, ein Beispiel dafür, wie die Jacobi-Matrix zu berechnen.

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

Dabei gilt:

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

s[i] ist die Position (int Welt coords?) gemeinsam i

p[j] ist die Position (in Welt coords?) gemeinsam 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 Drehung. Was Formel will ich dann? (Oder bin ich den Begriff „Freiheitsgrad“ möglicherweise Missverständnis?)

War es hilfreich?

Lösung

Diese Frage ist alt, aber ich werde auf jeden Fall beantworten, da es etwas, was ich gedacht habe über, aber nie wirklich dazu gekommen, zu implementieren.

Die Drehgelenke ohne Einschränkungen sind Kugelgelenke oder Kugelgelenke genannt; sie haben drei Freiheitsgrade. Sie können die Formel in der Anleitung für Kugelgelenke verwenden auch, wenn Sie jeden einzelnen Kugelgelenk in Bezug auf die 3 Dreh (revolute) Gelenke von einem Freiheitsgrad parametrieren.

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

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

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

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

Berechnen Sie die Jacobi-J für einige Endeffektor s[i], die Formel des Tutorials verwenden. Alle Koordinaten sind in der Welt Rahmen.

beispielsweise unter Verwendung der pseudo-inverse Verfahren ergibt eine Verschiebung dq dass bewegt den Endeffektor in einer gegebenen Richtung dx.

Die Länge der 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]]

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

Aktualisieren Sie die lokalen Transformationen:

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

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

Andere Tipps

Lassen Sie mich vorschlagen, einen einfacheren Ansatz zu Jacobi im Rahmen beliebig vieler DOFs: Grundsätzlich ist die Jacobi sagt Ihnen, wie weit jedes Gelenk bewegt, wenn Sie den End-Effektor-Rahmen in einigen willkürlich gewählten Richtung zu bewegen. Sei f (?) die Vorwärtskinematik, wo ? [?1, ..., Rn] = sind die Gelenke. Dann können Sie die Jacobi erhalten, indem die Vorwärts-Kinematik in Bezug auf die Gelenkvariablen Differenzierung:

J ij = df i / dR j

Ihr Manipulators Jacobi. Invertierung es würden Sie die inverse Kinematik in Bezug auf Geschwindigkeiten. Es kann immer noch nützlich, obwohl sein, wenn Sie wissen wollen, wie weit jedes Gelenk zu bewegen hat, wenn Sie Ihren End-Effektor bewegen, um einen kleinen Betrag & Delta; x in jede Richtung wollen (weil auf Positionsebene, dies effektiv eine Linearisierung wäre): ?? = J -1 Ax
Hoffnung, dass dies hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top