Ψ Die Informatikseite

Menü
Unterabschnitte

Inverse Kinematik


\begin{displaymath}\theta=f^{-1}(X)\end{displaymath}

Anwendungsgebiete

  • Die Inverse Kinematik wird angewandt, um dem Animateur die Möglichkeit zu geben, einen Punkt zu bestimmen, wohin dann der Endeffektor gebracht wird.
  • Weiterhin wird die Inverse Kinematik benutzt, um Teilprobleme beim Editieren von Bewegungen zu lösen.
  • ...
Für das inverse Kinematik-Problem gibt es kein Patentrezept. Es gibt unterschiedliche Ansätze. Bei einigen Verfahren wächst die Laufzeit so stark, dass sie nicht praktikabel sind. Bei anderen Verfahren kann es dazu kommen, dass das System nicht konvergiert.

Lösen mit Polynomgleichungen

Das inverse Kinematikproblem kann auf das Lösen eines Systems von Polynomgleichungen zurückgeführt werden. Diese Polynomgleichungen erhält man, indem man die konkatenierten Matritzen der Gelenke multipliziert mit dem Ursprung dem gewünschten Ziel gleichsetzt:

\begin{displaymath}\mbox{Schulter}\times\mbox{Ellenbogen}\times\mbox{Hand}\times\mbox{Ursprung}=\mbox{gewünschtes Ziel}.\end{displaymath}

Die gewünschten Polynome werden zeilenweise extrahiert.
  • Dabei wird für jede Winkel-Trigeometrische-Funktion-Kombination ein neues Symbol gesetzt. Also

    \begin{displaymath}\cos{\alpha_{i}}=c_{i}\,\,\,\,\,\sin{\alpha_{i}}=s_{i}.\end{displaymath}

  • Damit die Winkeleigenschaft erhalten bleibt wird folgende Gleichung hinzugefügt:

    \begin{displaymath}c_{i}^{2}+s_{i}^{2}=1.\end{displaymath}

Lösen kann man dieses System mit der Gröbnerbasen-Technik. Allerdings ist die Laufzeit exponentiell. Bei Inverser Kinematik sind zudem noch Ungleichungen relevant. Diese sind noch schwieriger lösbar.

Iterative Verfahren

Um solche Probleme lösen zu können, muss man auf iterative Verfahren zurückgreifen. Im folgenden werden einige Beispiele für iterative Verfahren genannt.

Newton-Verfahren

Für das Newton-Verfahren muss die Funktion differenzierbar sein. Um das Problem $f(x)=0$ zu lösen iteriert man im eindimensionalem Fall gemäß

\begin{displaymath}x_{n+1}=x_{n}-\frac{f(x_{n})}{f'(x_{n})}.\end{displaymath}

Das Verfahren konvergiert schnell. Hat aber leider das Problem, dass es für leicht konstruierbare Fälle oszilliert.

Iterative Nullstellensuche mit invertierter Jakobimatrix

Durch die Iterative Suche weichen wir von den zuvor gestellten Problem ab. Wir wollen Veränderungen berechnen, die uns helfen, näher an die Lösung heranzukommen. Statt

\begin{displaymath}X=f(\theta)\mbox{ },\mbox{ }\theta=f^{-1}(X)\end{displaymath}

schreiben wir

\begin{displaymath}dX=J(d\theta)\mbox{ und } d\theta=J^{-1}(dX).\end{displaymath}

  • Aufstellen der Jakobimatrix. Die Jakobimatrix hat die Form

    \begin{displaymath}J=
\left(
\begin {array}{cccc}
\frac{\partial\nu_{x}}{\partia...
...\partial\omega_{z}}{\partial\theta_{n}}\\
\end {array}
\right)\end{displaymath}

    Wobei $\nu$ eine Position und $\omega$ eine Orientierung.
  • Da die Jakobimatrix im allgemeinen nicht quadratisch ist, müssen wir sie mit der Moore-Penrose-Pseudoinverse invertieren. Sie ist in $O(m^{2}n)$ berechenbar.
  • Problem: Da die Pseudoinverse approximierend lokal ist, können Trackingfehler entstehen. Sobald ein Trackingfehler festgestellt wurde, muss man interpolieren.
  • Problem: Singularitäten. Bei voll ausgestreckter Struktur verliert die Jakobimatrix an Rang. Man könnte die Singularitäten vorrausberechnen. Bei komplizierten Systemen ist dies aber nicht möglich.
  • Problem: oszillierende Systeme wenn Position nicht erreichbar. Lösung mit Damped Least Square Methode (Gedämpfte kleinstes Quadrat) Bei dieser Methode wird minimiert:

    \begin{displaymath}\vert\vert J(d\theta)-dX\vert\vert^{2}+\lambda^{2}\vert\vert d\theta\vert\vert^{2}\end{displaymath}

Nicht-Lineares Programmieren

Das Problem der inversen Kinematik kann als nicht-lineares Programmierproblem aufgefaßt werden. Da vielleicht eine Nullstellensuche nicht möglich, da Szenario zu komplex oder auch gar nicht erreichbar, suchen wir nur nach Minima. Dabei führen wir eine Suche nach lokalen Minimum durch. Falls dies fehlschlägt und wir dabei auch nicht gleichzeitig das globale Minimum finden, wiederholen wir das Verfahren mti einem anderen Startwert.


Lineares Programmierproblem in Standardform: Minimiere $cx$ unter den Bedingungen
  • $Ax=b$
  • $x\geq 0$
$x$ ist der Variablenvektor für die Lösung, $A$ ist Matrix bekannter Koeffizienten und $b$ und $c$ sind Vektoren mit bekannten Koeffizienten. (Hier $b=$Ziel)


Gute Verfahren zum Lösen vorhanden. Zuerst Simplex-Verfahren mit exponentieller Laufzeit. Später auch viele Verfahren mit polynomieller Laufzeit.

Quadratisches Programmieren

Problem kann man auch mit quadratischem Programmieren lösen. Eine quadratische Gleichung soll minimiert werden. Man stößt an die Grenzen des praktisch machbaren.


Das Optimierungsproblem muss unter Einhaltung von Zwangsbedingungen gelöst werden.


Lösungsstrategie ist hier die active set strategy: Es wird ein legaler Startpunkt gewählt. Dann wird mit einer Iterationssequenz legaler Punkte an den Rändern der Zwangsbedingungen (welche Mengen darstellen) entlang Richtung Ziel konvergiert. Die aktuelle Menge an legalen Punkten wird die ,,active set'' genannt. (Siehe auch in Matlab Optimization Toolbox das Zeltstangenbeispiel)

Zhao und Badler

Zhao und Badler sehen den Endeffektor wie gewohnt als eine Abbildung der einzelnen Winkel auf einen Punkt in Raum an.

\begin{displaymath}\left\{
\begin{array}{l}
e:\Theta\rightarrow L\\
\theta\in\Theta\mapsto e(\theta)\in L\\
\end {array}
\right.\end{displaymath}

Dabei enthält $L$ nicht nur die Informationen über die Position des Endeffektors im Raum, sondern auch Richtungsangaben. Die ersten drei Werte sind die Position. Dann kommen zwei Einheitsvektoren, die die Orientierung des Endeffektors beschreiben.

Zusätzlich werden noch sogenannte Goals definiert. Goals sind Punktmengen, die der Endeffektor erreichen soll. Es wird eine Funktion $P$ definiert, die den quadratischen Abstand in Position und Orientierung darstellt. Zhao und Badler geben die entsprechenden Formeln für einige Goals an, wie z.B. das Finden eines Punktes im Raum (hierbei ist $p$ der zu findende Punkt und $r$ die aktuelle Koordinate:

\begin{displaymath}P(r)=(p-r)^{2}\end{displaymath}

Ein Gradient läßt sich angeben mit

\begin{displaymath}\nabla_{r}P(r)=2(r-p)\end{displaymath}

Über den Gradienten wird das Ziel immer weiter angenäher.

Ebenso verfährt er für Orientierung-Goals, Zielen-auf-Goals, Linien-Goals, Ebenen-Goals und Halbraum-Goals. Zuguterletzt wird alles mit einem Assembler zusammengesetzt und zu einem Nicht-Linearen-Gleichungssystem gemacht.

Zusätzlich müssen über eine Indexfunktion die einzelnen Constraints (Endeffektor und Goals) noch in Korospondenz zu dem Gesamtsystem gesetzt werden. (Warum, keine Ahnung)

Einzelne Constraints können über eine Gewichtsfunktion stärker gewichtet werden.