# Inverse Kinematik

Die inverse Kinematik, Inverskinematik oder Rückwärtstransformation ist ein Begriff aus der Computeranimation und Robotik. Sie ermöglicht bei einem Roboter die Bestimmung der Gelenkwinkel der Armelemente anhand der Pose (Position und Orientierung) des Endeffektors. Sie spielt damit eine wichtige Rolle bei der Bewegung von Industrierobotern und bei der Computeranimation von Charakteren. Sie ist das logische Gegenstück zur direkten Kinematik.
Bei der inversen Kinematik wird das letzte Glied der kinematischen Kette, der Endeffektor, bewegt und in die gewünschte Lage gebracht. Die übrigen Glieder der Kette müssen dann entsprechend den Freiheitsgraden ihrer Gelenke passende Lagen einnehmen.
Vergleichen lässt sich dies mit dem menschlichen Arm, der mit seinen Gelenken auch eine solche kinematische Kette darstellt: Bringt man beispielsweise die Hand in eine bestimmte Lage, so nehmen Handgelenk, Ellenbogen und Schulter automatisch ebenfalls bestimmte Stellungen ein. Genau diese Gelenkwinkel-Stellungen müssen über die inverse Kinematik bestimmt werden.
Die Zusammenhänge verdeutlicht folgende Abbildung:

## Schwierigkeiten

Bei der Berechnung der inversen Kinematik treten folgende Schwierigkeiten auf:
* Die Lage der einzelnen Glieder bzw. Armelemente muss nicht eindeutig sein. Es kann und wird im Allgemeinen mehrere Konfigurationen geben, die zur gewünschten Lage des Endeffektors führen. Man stelle sich eine einfache Kinematik vor, die aus zwei Gliedern besteht. Das erste Glied ist über ein Drehgelenk an der Umgebung befestigt, das zweite Glied ist über ein Drehgelenk am ersten Glied befestigt. Ein Punkt im Arbeitsraum kann nun auf zwei Weisen erreicht werden: „rechts rum“ und „links rum“. Diese beiden Möglichkeiten nennt man Konfigurationen.
* Es können unzulässige Konfigurationen entstehen. Diese sind mathematisch zwar vielleicht korrekt, können von den Gelenken aber nicht erfüllt bzw. eingenommen werden oder führen zu nicht erreichbaren Ziellagen.
* Die Anzahl der Parameter ist nicht identisch. Beispielsweise können bei einem 7-Achser die Gelenke nur bis auf einen Freiheitsgrad festgelegt werden.

## Lösungsmöglichkeiten

Zur Lösung des inversen kinematischen Problems gibt es kein allgemein anwendbares Verfahren. Da die Berechnung der Gelenkwinkel sehr schnell erfolgen muss, sind in der Praxis üblicherweise Lösungen zu finden, die auf den speziellen Roboter optimiert und angepasst sind.
Es existieren folgende grundlegende Methoden:
* algebraische Methoden
* geometrische Methoden
* numerische Methoden.

### Algebraische Methoden

Durch sukzessive Invertierung der Denavit-Hartenberg-Transformationsmatrizen und damit Lösung des folgenden Gleichungssystems können nach und nach die einzelnen Gelenkwinkelvektorkomponenten berechnet werden:
    $T_{\mathrm {TCP} }(q)=T_{1}(q_{1})\cdot T_{2}(q_{2})\cdot \ldots \cdot T_{n}(q_{n})$
Wobei $T_{\mathrm {TCP} }$ eine homogene Matrix ist, die die Position und Orientierung des Endeffektors beschreibt.

### Geometrische Methoden

Aufgrund des Wissens über die Geometrie des Roboters wird versucht, zum Beispiel mit Hilfe von Kosinussatz oder Sinussatz den Gelenkwinkelvektor $q$ zu berechnen.

### Numerische Methoden

Mit numerischen Methoden wird iterativ versucht, eine Lösung für den Gelenkwinkelvektor $q$ zu finden. Lokale Minima oder die Bestimmung eines geeigneten Startwerts sind hier jedoch problematisch.

### Gleichungen

Die inverse Kinematik ist der Vorwärtskinematik genau entgegengesetzt. Es bezieht sich auf den Prozess des Erhaltens von Gelenkwinkeln aus bekannten Koordinaten des Endeffektors. Wenn beispielsweise kartesische Handgelenk- oder Faustkoordinaten bekannt sind, besteht das Ziel darin, die Winkel der Schulter- und Ellbogengelenke für den Arm in der Sagittalebene zu entschlüsseln. Wenn die Freiheitsgrade Eingabe und Ausgabe nicht übereinstimmen, ist die inverse Kinematik möglicherweise zwecklos, da es entweder unendlich viele oder keine Lösungen gibt.
Gesucht ist eine Koordinatentransformation
    $x_{EE},y_{EE}\rightarrow \theta _{2},\theta _{2}$
Es ist zu beachten, dass es selbst in unserem Fall mit gut abgestimmten Freiheitsgraden möglicherweise keine Lösung, eine einzelne Lösung oder zwei Lösungen für die inverse Kinematik gibt, die keinem Schnittpunkt zwischen Kreisen entsprechen, die beim ersten Gelenk und Endeffektor zentriert sind, und bei gleichen Radien zu den entsprechenden Längen der Verbindungen berühren sich zwei Kreise, die die einzelne Position vom zweiten Gelenk definieren, und zwei Schnittpunkte, die zwei mögliche Lösungen für das zweite Gelenk definieren.
Diese Schnittpunkte können bestimmt werden, indem Gleichungen für zwei Kreise gesetzt und nach $x_{2},y_{2}$ aufgelöst werden:
    $x_{EE}-x_{2}^{2}+y_{EE}-y_{2}^{2}=L_{2}^{2}$
    $x_{1}-x_{2}^{2}+y_{1}-y_{2}^{2}=L_{1}^{2}$
Wenn eine Lösung für $x_{2},y_{2}$ existiert, kann man nach $\theta _{1},\theta _{2}$ auflösen.
Ein anderer Ansatz ist, den Kosinussatz zu verwenden und den Winkel $\alpha _{2}$ zu bestimmen:
    $\alpha _{2}=\arccos \left({\frac {L_{2}^{1}+L_{2}^{2}-x_{EE}^{2}+y_{EE}^{2}}{2\cdot L_{1}\cdot L_{2}}}\right)$
Daraus ergibt sich
    $\theta _{2}=\pi -\arccos \left({\frac {L_{2}^{1}+L_{2}^{2}-x_{EE}^{2}+y_{EE}^{2}}{2\cdot L_{1}\cdot L_{2}}}\right)$
Ebenso erhält man mithilfe des Kosinussatz
    $\alpha _{1}=\arccos \left({\frac {L_{2}^{1}-L_{2}^{2}+x_{EE}^{2}+y_{EE}^{2}}{2\cdot L_{1}\cdot {\sqrt {x_{EE}^{2}+y_{EE}^{2}}}}}\right)$
und schließlich
    $\theta _{1}=\pi -\arctan \left({\frac {y_{EE}}{x_{EE}}}\right)-\arccos \left({\frac {L_{2}^{1}-L_{2}^{2}+x_{EE}^{2}+y_{EE}^{2}}{2\cdot L_{1}\cdot {\sqrt {x_{EE}^{2}+y_{EE}^{2}}}}}\right)$