Die Wissenschaft zur Vorschau Teil 1

This post in English.

Heute erkläre ich endlich mal die neulich gezeigten Vorschauen ein wenig.

Alles fing mit einer verrückten Idee an, die ich vor einer ganzen Weile hatte, und über die ich erstmals öffentlich in meinem Vortrag bei der SVP 2011 gesprochen habe. Ich habe darüber schon in drei Raten geschrieben, hier, hier und hier (alles auf Englisch). Seitdem und sogar schon davor habe ich mehrfach versucht, einen richtigen wissenschaftlichen  Artikel drüber zu schreiben, aber aus verschiedenen Gründen war ich immer nicht zufrieden mit meinen Versuchen. Und ich habe eine Menge Zeit damit verschwendet, ein paar kinetisch/dynamische Modelle so hinzubekommen, dass sie das zeigen, was ich vermute – vergebens, weil es sehr schwierig ist, zwei verschiedene Bewegungen genau zu vergleichen. Darüber später mehr.

Wie auch immer, schauen wir uns mal diese Vorschauen erneut an, aber diesmal mit ein paar Erläuterungen.

fiddling_2

Als erstes haben wir hier – mal wieder – einen alten Bekannten. Für alle, die nicht so Dinosaurier der europäischen Triasformation-affin sind wie ich kommt hier ein etwas umfassenderes Foto:

The Dinosaur Hall of the Tübingen Museum (Panorama from 5 Photos, thus some distortion)

Der Dinosaurier-Saal des Tübingen Museums (Panorama aus 5 Fotos, daher etwas verzerrt)

Da steht er, der rechts, vom Boden trinkend oder fressend. Inzwischen, da bin ich mir sicher, hat jeder der mich kennt raus, dass es hier um GPIT/RE/288, einen Plateosaurus engelhardti aus Trossingen geht.

Das Bildschirmfoto oben zeigt das rechte Hinterbein und die Hüfte, dazu ein paar vordere Schwanzwirbel, als ziemlich kleine digitale 3D Modelle. Aus CT Scans, die generelle Form ist also akkurat, aber feine Details sind dank der Verkleinerung der Dateien keine mehr vorhanden. Da langt für ein SIMM Modell, weil die Ansätze und Insertionen der Muskeln nicht in SIMM ermittelt werden müssen, sondern natürlich beim Studium der echten Knochen. The SIMM-Knochen müssen nur gut genug sein, dass man diejenigen Stelle auf ihnen auffinden kann, für die man sich zuvor am echten Knochen als Muskelansätze entschieden hat. Theoretisch geht’s in SIMM auch ganz ohne Knochen, denn sie sind nur eine optische Hilfe. Aber diese Hilfe spart einem stundenlanges Rumrechnen um die Koordinaten eines Muskelansatzes zu ermitteln, die man ersatzweise ins Modell eingeben müsste.

Wie man ein SIMM Modell baut

So langsam ist es an der Zeit, dass ich mal einen groben Überblick darüber gebe, wie man ein SIMM Modell effizient baut. Es gibt eine ganz Reihe Dinge in SIMM, die man besser außerhalb macht, und dann einfach die Resultate importiert.

Zunächst mal ist es wichtig zu verstehen, wie ein SIMM Modell aufgebaut ist, und wie das Programm. Es ist ein wenig…. von hinten durch die Brust ins Auge, und führt zu teilweise recht indirekten Bearbeitungsmethoden.

Im Grunde ist ein SIMM Modell in Textdateien definiert. Eine davon muss man haben, das Joint File (JNT). Es kann heißen wie man mag, aber es muss die Endung *.jnt tragen, weswegen ich es hier kurz JNT nenne. Es definiert die Gelenke (joints) im Modell (ach, echt jetzt?), aber auch eine Menge andere Dinge. Man kann ein JNT von hand schreiben, aber einfacher ist es, ein bestehendes anzupassen.

In einer JNT-Datei definiert man grundlegende Dinge zum Modell, zum Beispiel die Richtung der Schwerkraft in Verhältnis zu den Achsen des Welt-Koordinatensystems, und die Position des Modellansicht-Fensters. Man kann Kameras definieren (also Sichtpositionen), zu denen man später springen kann; diese sind auch im JNT gespeichert, zusammen mit Definitionen der Farben, die SIMM für diverse Materialien verwenden soll. Und eine Menge anderer Sachen, die bei Bau eines Modells keine Rolle spielen, und darum erst mal ignoriert werden.

Der Kern eines JNTs aber sind die segments, die joints und die gencoords.  “Gencoords? Was ist das denn? Segmente und Gelenke kenne ich, aber was ist eine Gencoord?” sind wohl einige versucht zu fragen. Naja, eigentlich fragt da jeder. Eine Gencoord ist nix anderes als eine Variable, ein Terminus den man variable definieren kann. Im Modell korrespondiert eine Gencoord mit einem Freiheitsgrad eines Gelenks, also einer der drei Dreh oder Gleitachsen eines Kartesischen Systems. Für jede Gencoord kann man einen Bereich definieren, auf den sie begrenzt ist, und man definiert, von welchen Werten der Wert der Gencoord abhängt. Das ist wichtig, weil sich nicht alle Dinge einfach linear ändern, und weil manche voneinander abhängen. Ein cooles Beispiel ist das Handgelenk von Vögeln, das mit dem Ellenbogen gekoppelt ist. Beugt das Vogel den Ellenbogen, muss das Handgelenk sich mit beugen. In SIMM kann man das nachbauen, indem man die Beugung des Ellenbogens von einer Funktion abhängig macht, und das Handgelenk von -1 mal der Funktion. Voila, das Handgelenk beugt sich, wenn der Ellenbogen sich beugt! Vermutlich braucht es dann noch ein paar Detailverbesserungen, z.B. indem man einen anderen Faktor als schlicht -1 nimmt, aber ich denke das Prinzip ist jetzt klar.

So, nun habe ich das böse, böse F-Wort benutzt: Funktion! Da, schon wieder! 😦 Tja, geht leider nicht anders. Man muss Funktionen definieren, damit das Modell tut. In SIMM werden Funktionen über Punkte definiert, zwischen denen SIMM dann interpoliert, zum Beispiel Splines dritten Grades oder Geraden. Man kann aber auch ziemlich kompliziertes Zeug zusammenbasteln.

Also, was genau muss man nun alles zusammenbauen? Zunächst mal die Segmente. In wie viele Stücke will man sein Modell teilen? Jedes Teil ist in sich statisch, es kann sich nicht biegen und verformen, oder Abschnitte haben, die sich gegeneinander bewegen. Bewegung gibt es nur zwischen Segmenten. Ein Segment ist also das Äquivalent einer funktionalen Skeletteinheit eines Wirbeltiers: ein Beinsegment, oder ein akinetischer Schädel, ein Unterkieferast. Die Wirbelsäule könnte man auch so darstellen, mit jedem Wirbel als ein eigenes Segment, und jeder Rippe (oder jedem Rippenpaar), aber das macht dann das Modell schnell ziemlich schwerfällig zu bearbeiten. Plateosaurus est omnis divisa in partes septem: Hüfte, Oberschenkel, Unterschenkel, Mittelfuß, und drei Segmente für die proximale, die zweite und die kombinierten dritten und vierten Phalangen (letztere klauentragend) der mittleren, dritten Zehe.

Warum diese Einteilung? Weil dies die Segmente sind, die ich zur Zeit brauche. Die Bewegung des Schwanzes von rechts nach links oder oben nach unten war nicht Teil dessen, was ich mir gerade vorgeknöpft hatte, daher habe ich ihn der Hüfte zugeschlagen. Ich kann jederzeit ein neues Segment hinzufügen, und ihn dort hinein schieben, genauso für die zwei Phalangen der Zehe. ich kann auch Segmente für die fehlenden Zehen I, II und IV hinzufügen (V ist so klein, dass die eh keiner braucht).

SIMM_JNT01

So sieht der relevante Teil der JNT Datei aus. Man kann Segmenten Massen zuweisen, und den Massenschwerpunkt eingeben, und man kann “bones” hinzufügen. Das sind nichts weiter als Polygonnetz-Dateien, eine spezielle Version von STL Dateien, mit der Endung *.asc. Es muss sich nicht um einen Knochen eines echten Tieres handeln, oder überhaupt um einen Knochen, es kann alles mögliche sein. Weil man aber typischerweise hier die Knochens ehen will, um die Muskeln dranzubastlen, ist der Name “bone” und der Befehl “bone”, das die Datei einfügt, schon passend gewählt.

So, mehr ist nicht in einem Segment, außer ein paar Schaltern um Markierungen für den Massenschwerpunkt und das Trägheitszentrum anzuzeigen.

Und so kommen wir zum nächsten großen Schritt: dem Einfügen von Gelenken (joints). Ein Gelenk verbindet zwei Segmente, und man muss nicht nur definieren, welche Segmente, sondern auch wo es dies tut, und welche Regeln das Verhalten des Gelenks steuern.

SIMM_JNT02

So sieht eine Definition von Gelenken in der JNT Datei aus. Ein Name, zwei Segmente, Definition wie die Achsen des Gelenks angeordnet sind (hier alle parallel zu den Achsen des Welt-Koordinatensystems, daher die vielen Nullen und wenigen Einsen). Und sechs Funktionen für die drei Translationen (Gleitbewegungen; tx, ty, tz)) im Verhältnis zum Welt-Koordinatensystem, und die drei Rotationen (r1, r2, r3).

Wie leicht zu erkennen ist, sind ALLE Freiheitsgrade jedes Gelenks hier über Funktionen definiert. Es gibt zwei verschiedene Funktionen, f1 und f2, und nach jeder steht ein call-out zu einer Gencoord. Die Gencoord, die definiert, wie sich das Oberschenkel-Segment gegen das Hüftsegement entlang der x-Achse bewegt, heißt hip_Tx. Die tatsächliche Bewegung ist der y-Wert, den die Funktion ausspuckt, wenn man den gewünschten x-Wert eingibt.

Aber warum habe ich für jeden Mist eine Funktion da drin? Das Hüftgelenk wandert doch nicht hin und her, sondern ist näherungsweise ein Kugelgelenk, so dass keine Translation notwendig ist. Es muss einmal an den richtigen Ort gelegt werden. Statt hip_Tx, hip_Ty und hip_Tz könnte ich los einfach Zahlen eintragen. Elementar – weil ich extrem faul bin, und anstatt alles runterzutippen einfach einen deus ex machina benutzt habe, der mir die Datei erstellt hat. Wer dieses Genie ist – später!

Eines sollte ich hier nun erwähnen: wie die Architektur eines SIMM Modells aussieht. Es gibt immer einen “ground” (Boden; Hintergrund), von dem aus das erste Segment aufgehängt ist. Jedes Segment, dass man und an das erst anhängt, ist um Translation und Rotation versetzt, und zwar gemessen am Gelenk. Nein, nicht vom Weltursprung, sondern vom übergeordneten Gelenk. Für das Beispiel oben bedeutet das, dass der Knöchel (ankle) um f1(ankle_Tx) weiter entlang der x-Achse verschoben ist, als das Knie, nicht vom Weltursprung aus. Wenn man dies vergisst wird es schnell haarig.

Ansonstne muss man noch wissen – und nein, es ist nicht halb so offensichtlich, wie man denken könnte – ist dass das Modell sich verzweigen kann. Es kann baumförmig aufgebaut sein oder wie ein Busch, also mit einem, zwei oder vielen Segmenten an ein “elterliches” gehängt. Man kan auch mehrere Segmente direkt an den “ground” hängen. Was aber nicht geht, ist separate Reihen von Segmenten zusammenzuführen: ringförmige Strukturen gehen nicht!

OK, genug für heute. Der nächste Beitrag wird sich ein bisschen genauer um die Funktionen drehen, und Butter bei die Fisch… äh, Muskeln zu den Knochen geben. Um den Mangel an Fotos in diesem Beitrag ein wenig abzumildern, und den Anfang des Sommers zu feiern (schon! Wir haben doch gerade erst Frühling bekommen!) hab ich einen sich sonnenden Kaptriel (Burhinus capensis).

tanning

Advertisements

About Heinrich Mallison

I'm a dinosaur biomech guy working at the Museum für Naturkunde Berlin.
This entry was posted in "Prosauropoda", 3D-Modellierung, Anatomie, Biomechanik, Dino-Modelle, Dinosauria, Fortbewegung, Plateosaurus, Sauropodomorpha, SIMM. Bookmark the permalink.

One Response to Die Wissenschaft zur Vorschau Teil 1

  1. Pingback: Die Wissenschaft zur Vorschau Teil 2 | dinosaurpalaeo auf Deutsch

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s