Animation von 3D-Modellen Teil 03: Kinematik

Nachdem wir uns im vorangegangenen Artikel mit dem Aufbau von Animations-Skeletten beschäftigt haben, werden wir uns heute die Mathematik erarbeiten, mit deren Hilfe skelettbasierte Animationen überhaupt erst möglich werden. Unser Ziel ist es, für jedes Gelenk unseres Animations-Skeletts eine Transformationsmatrix zu berechnen, die eine korrekte Transformation aus der jeweiligen Gelenk-Ausgangsposition (Standardpose, alle Gelenkwinkel gleich null) in die animierte Pose ermöglicht. Im Zuge des Vertex Skinnings werden die einem Gelenk zugeordneten Vertices später im Vertex Shader mit derselben Transformationsmatrix transformiert.
In der Robotik sind derlei Berechnungen unter der Bezeichnung vorwärts(gerichtete) Kinematik bekannt. Der umgekehrte Weg, also die Berechnung der Gelenkwinkel aus den Gelenkpositionen, wird als inverse (rückwärtsgerichtete) Kinematik bezeichnet.

Betrachten wir zunächst den denkbar einfachsten Fall – ein Arm, der sich nur um ein einziges Gelenk drehen kann. In der nachfolgenden Abbildung ist die Bewegung solch eines Arms in der xy-Ebene skizziert, mit den zugehörigen Matrizengleichungen lassen sich jedoch auch dreidimensionale Bewegungen beschreiben:






















 Hier nun die Aufgabe:
Ein einfacher Arm mit einem Schultergelenk (Gelenk 1) wird um den Winkel Alpha in der xy-Ebene gedreht. Bestimmen Sie die Transformationsgleichung (Matrixgleichung), mit deren Hilfe sich die Position G2 des Handgelenks (Gelenk 2) berechnen lässt.

Um die Transformationsgleichung aufstellen zu können, benötigt man die folgenden drei Matrizen:

  1. Rotationsmatrix R1 für Gelenk 1 für die Drehungen um die x-, y- und z-Achse:
    R1 = R1x*R1y*R1z
  2. Translationsmatrix T1 für die Positionierung von Gelenk 1 relativ zum Modellkoordinatenursprung.
  3. Translationsmatrix T2 für die Positionierung von Gelenk 2 relativ zu Gelenk 1.

Um die gesuchte Transformationsgleichung zu finden, muss man nun nacheinander alle notwendigen Transformationsschritte durchgehen und die zugehörigen Transformationsmatrizen miteinander multiplizieren:

  1. Zunächst einmal wird Gelenk 2 mithilfe der Translationsmatrix T2 relativ zu Gelenk 1 positioniert.
  2. Im zweiten Schritt wird der Arm mithilfe der Rotationsmatrix von Gelenk 1 (R1) um den Winkel Alpha in der xy-Ebene gedreht.
  3. Im dritten Schritt wird Gelenk 1 mithilfe der Translationsmatrix T1 an die Position G1 und Gelenk 2 an die Position G2 verschoben.

Fasst man die einzelnen Schritte zusammen, dann erhält man die folgende Matrizengleichung für Gelenk 2:

Gesamttransformationsmatrix(Gelenk 2) = T2*R1*T1

Im zweiten Schritt wird der Arm um ein zusätzliches Gelenk erweitert. Gesucht wird nun die Transformationsgleichung (Matrixgleichung) für die Beschreibung der Bewegung von Gelenk 3:


































Hier nun die Aufgabe:
Ein Arm mit einem Schulter- (Gelenk 1) und einem Ellenbogengelenk (Gelenk 2) wird bei Gelenk 1 um den Winkel Alpha und bei Gelenk 2 um den Winkel Beta in der xy-Ebene gedreht. Bestimmen Sie die Transformationsgleichung (Matrixgleichung), mit deren Hilfe sich die Position G3 des Handgelenks (Gelenk 3) berechnen lässt.

Um die Transformationsgleichung aufstellen zu können, benötigt man die folgenden fünf Matrizen:

  1. Rotationsmatrix R1 für Gelenk 1 für die Drehungen um die x-, y- und z-Achse:
    R1 = R1x*R1y*R1z.
  2. Translationsmatrix T1 für die Positionierung von Gelenk 1 relativ zum Modellkoordinatenursprung.
  3. Rotationsmatrix R2 für Gelenk 2 für die Drehungen um die x-, y- und z-Achse:
    R2 = R2x*R2y*R2z.
  4. Translationsmatrix T2 für die Positionierung von Gelenk 2 relativ zu Gelenk 1.
  5. Translationsmatrix T3 für die Positionierung von Gelenk 3 relativ zu Gelenk 2.

Nun gehen wir wieder Schritt für Schritt alle notwendigen Transformationen durch:

  1. Zunächst einmal wird Gelenk 3 mithilfe der Translationsmatrix T3 relativ zu Gelenk 2 positioniert.
  2. Im zweiten Schritt wird der Unterarm mithilfe der Rotationsmatrix von Gelenk 2 (R2) um den Winkel Beta in der xy-Ebene gedreht.
  3. Im dritten Schritt werden die Gelenke 2 und 3 mithilfe der Translationsmatrix T2 relativ zu Gelenk 1 positioniert.
  4. Im vierten Schritt wird der gesamte Arm mithilfe der Rotationsmatrix von Gelenk 1 (R1) um den Winkel Alpha in der xy-Ebene gedreht.
  5. Im letzten Schritt wird Gelenk 1 mithilfe der Translationsmatrix T1 an die Position G1, Gelenk 2 an die Position G2 sowie Gelenk 3 an die Position G3 verschoben.

Fasst man die einzelnen Schritte zusammen, dann erhält man die folgende Matrizengleichung für Gelenk 3:

Gesamttransformationsmatrix(Gelenk 3) = T3*R2*T2*R1*T1

Hinweis:
Die Gelenke 1, 2 und 3 nehmen in ihrer Bewegungsgruppe (dem Arm) unterschiedliche Stellungen in der Gruppenhierarchie ein. Gelenk 1 steht an der Spitze der Hierarchie, da sich eine Drehung um Gelenk 1 sowohl auf Gelenk 2 als auch auf Gelenk 3 auswirkt. Gelenk 2 steht an zweiter Stelle in der Hierarchie, da sich eine Drehung um Gelenk 2 lediglich auf Gelenk 3 auswirkt. Gelenk 3 steht schließlich an unterster Stelle, da es keinerlei Einfluss auf die Gelenke 1 und 2 hat.

Im Prinzip ergibt sich die Gesamttransformationsmatrix eines Gelenks durch eine Abfolge von Translations- und Rotationsmatrizen mit den Gelenken, die zunehmend höher in der Hierarchie der Bewegungsgruppe stehen. Mithilfe von Klammern kann dies verdeutlicht werden:

Gesamttransformationsmatrix(Gelenk 3) = (T3*R2)*(T2*R1)*T1

Für die Beschreibung eines Arms mit vier Gelenken muss man die letzte Transformationsgleichung lediglich um einen zusätzlichen Klammer-Term erweitern:

Gesamttransformationsmatrix(Gelenk 4) = (T4*R3)*(T3*R2)*(T2*R1)*T1

Anhand der drei Beispiele sollte deutlich geworden sein, wie sich die Transformationsmatrix für das n’te Gelenke einer Bewegungsgruppe berechnen lässt:

Gesamttransformationsmatrix(Gelenk n) = T(n)*R(n-1)*T(n-1)*R(n-2)*...*T2*R1*T1