Die Wissenschaft zur Vorschau Teil 2

This post in English.

Letztes Mal habe ich beschrieben, was ein Segment und ein Joint in einem SIMM-Modell machen, und wie mand as alles in einer JNT-Datei erstellt. Das ist die einzige Methode; innerhalb von SIMM kann man keine Segemente oder Gelenke einfügen. Gencoords dagegen schon, und auch Bones (3D-Körper)  und Muscles (Muskeln – ich behalte der Einfachkleit und Verständlichkeit wegen die SIMM-Terminologie einfach bei). Und auch sonst noch so einiges. Weil ein guter Teil der Bearbeitung innerhalb von SIMM einfacher ist, muss man als Nutzer immerzu hin und her springen zwischen dem Texteditor und SIMM editor, und das bringt ein hohes Fehlerrisiko mit sich. Heute zeige ich euch, wie ich Bones einfüge, und wie man es noch tun kann. Die eine Methode funktioniert innerhalb von SIMM, die andere außerhalb.

Wie sich alle sicher erinnern wendet SIMM Translationen und Rotationen auf die Segments und die darin enthaltenen Bones additiv an, erst die für das erste Segment, dann die für das zweite, und so weiter. Dies bedeutet, dass jeder Bone so platziert werden muss, dass die Summe aller Translationen und Rotationen, die für sein Segement und die hierarchisch höheren im JNT gelistet sind, ihn in die richtige Position bringt. Bei der Vorbereitung von Bones im CAD-Programm muss man daher jeden 3D-Körper so versetzen und rotieren, dass das beabsichtigte proximale Gelenk auf dem Ursprung des Koordinatensystems des CAD-Programms zu liegen kommt (proximal im Sinne des SIMM-Modells, nicht der Anatomie. Wenn man vom Boden hoch baut, ist das proximale SIMM-Joint [auch Eltern-Gelenk] das distale Gelenk im anatomischen Sinn, während sie in einem von-der-Hüfte-runter Modell identisch sind.)

SIMM_bones_01

Hier sieht man, wie ich die Knochen vorbereite für den Import in SIMM. Jeder sollte sich seinen eigenen Weg zusammenexperimentieren, aber eines ist ganz wichtig: mach es bei allen Modellen auf die gleiche Weise! Das verhindert nicht nur Fehler, sondern vereinfacht auch das Vergleichen von Modellen.

Ich platziere die Knochen immer korrekt artikuliert für eine stehende Haltung. Das ist viel einfacher einzuschätzen als andere Posen. Dann füge ich kleine Kugel in mein Modell ein, dort wo die Gelenke sein sollen. Natürlich kann ich die ideale Position nicht einfach schätzen. Daher kopiere ich die distalen Elemente (also das Femur, wenn ich das Hüftgelenk baue), und bewege sie, um zu testen, ob das angenommene Gelenkzentrum hinhaut. Darum benutze ich Kugeln: fast alle CAD-Programme können mit der Maus zum Schwerpunkt einer Kugel “springen”, so dass ich sicher sein kann, immer genau den gleichen Punkt für die Rotationen für alle Bewegungsversuche zu nutzen. Falls mein Gelenkzentrum daneben liegt (d.h., die Knochen machen unsinnige Bewegungen), lösche ich die Kopien, bewege die Kugel ein wenig, und versuche es nochmal. Bis ich zufrieden bin.
Danach benutze ich den “Spring zum Schwerpunkt”-Befehl wieder, und richte alle Segmente so aus, dass die Kugeln in den Gelenken in Seitenansicht genau vertikal untereinander liegen. Das ist einfach eine Konvention, die ich nutze, man kann das auch genau waagerecht machen, oder die Standposition beibehalten. Ist eigentlich egal.

Dann exportiere ich die Dateien, auch die Kugeln, als STLs. Alle Knochen, die in ein Segement sollen, können gemeinsan in einen Bone, oder getrennt in mehrere. Dann konvertiere ich alles in OBJs in Geomagic Studio. Natürlich könnte ich auch gleich von Rhinoceros aus OBJs exportieren, aber SIMM mag Rhinoceros OBJs aus irgendeinem Grund nicht.  SEUFZ!

Der nächste Schritt ist nicht einfach nachzumachen: Ich schreibe eine EXCEL-Tabelle, die die Segmente definiert, von welchen “Eltern”-Gelenken sie hängen, mit welchen “Tochter”-Gelenken sie enden (für den Oberschenkel ist die Hüfte das Eltern-Gelenk und das Knie das Tochter-Gelenk, wenn man von oben nach unten baut), welchen namen das Tochter-Gelenk haben soll, wie dieser Name abgekürzt werden soll, in welcher Reihenfolge die Achsen des Gelenks bearbeitet werden sollen, welcher Hilfskörper (welche Kugel) das Zentrum des Gelenks definiert, und welche Bones in das Segment sollen. Diese Datei und die OBJs packe ich in ein ZIP und schicke alles an Dr. Vivian Allen (Royal Veterinary College London und Friedrich-Schiller-Universität Jena), der es an ein Matlab Skript verfüttert. Das Skript macht eine ganze Menge Sachen, die ich auch manuell tun könnte, aber es macht vor allem eine Sache, die sehr wichtig und anderweitig nicht ganz so einfach zu schaffen ist: es stellt sicher, dass alle Normalen der Polygonnetze nach außen zeigen! Das ist wichtig, weil ich in der Vergangenheit recht unschöne Erlebnisse mit SIMM und umgestülpten Polygonen hatte. Außerdem verwandelt das Skript die OBJs in das für SIMM geeignete spezielle STL-basierte ASCII Format. Viele Fliegen, eine Klappe!

Also, das ist jetzt nicht so einfach nachzumachen, wenn man den Matlab-Zauberer Viv nicht kennt. Was kann man sonst noch tun?

Zusammen mit SIMM wird eine kleine Datei namens norm.exe ausgeliefert. Die kann man separat benutzen um Bones vorzubereiten, oder man kann in SIMM Bones damit normieren, in SIMMs Bone Editor. Beidesmal kann man Knochen verschieben oder rotieren, und sie als SIMM-konforme Dateien schreiben. Es gibt ein paar Unterscheide zwischen der in SIMM integrierten und der separaten Version, aber ehrlich gesagt macht norm lauter Dinge, die man besser in anderen Programmen tut. Nur das Schreiben in das SIMM ASCII-Format bleibt.

Eine Option ist das Vescheiben aller Knochen im CAD-Programm, so dass das “proximale” Gelenk auf dem Urpsrung des Koordinatensystems zu liegen kommt. Dann speichern, und durch norm.exe jagen. Jede Menge Aufwand. Außerdem muss man vorher noch die Versätze zwischen den Gelenken messen und sie in die JNT-Datei hacken. Oder man läßt sie, wo sie sind, hackt die Namen ins JNT, und verschiebt sie dann innerhalb SIMMs im Bone Editor an den richtigen Ort. AARGH!

Zum Glück geht’s auch geschickter. Richtig einfach sogar! Hier ist die Anleitung:

1) speichere die Knochen als OBJs (aber nicht die Kugeln)
2) bereite die JNT-Datei mit den Segmenten vor, aber ohne Bones. Miss die Versätze im CAD programm und hacke sie ins JNT (Achtung – Reihenfolge der Achsen beachten!)
3) starte SIMM und lade die JNT-Datei
4) öffne den Bone Editor in SIMM

SIMM_bones_02

5) drag&drop ein OBJ in das SIMM-Modellfenster.
6) Klicke oben auf “bone 1”; dies öffnet eine Menüliste mit den Segmenten des Modells. Suche den gerade geladenen Bone (normalerweise im “ground”-Sgement) und wähle ihn aus (oben im Bild ist pelvis.asc als Bone 1 ausgewählt).
7) Klicke auf “move bone 1 to” und wähle das richtige Segment aus der Liste aus (im Bild ist der Haken beim Segment “GRND”, wo der Bone auch sein soll).
8) Klicke auf “norm bone 1” oben links. WICHTIG: lass danach die Finger von der Maus! Jegliche Aktion läßt SIMM abstürzen.
9) Sobald der Text unter “bone 1” wechselt und das neue Segement für den Bone anzeigt, klicke auf “write bone 1” unten links. SIMM öffnet eines Speicherdialog, wo man den Bone neu benennen kann. Ich benenne ihn meist vorher mit einem Namen mit Erweiterung, und ändere das jetzt auf einen einfachen Namen, z.B. zuerst “pelvis_1” und jetzt nur “pelvis”.
10) Füge den neuen Namen des Bone in die JNT-Datei ein; speichern nicht vergessen!
11) Wenn alle Knochen drin sind, schließe das SIMM-Modell OHNE speichern.
12) Lade das editierte JNT und überprüfe alle Bone-Positionen, indem Du alle Gelenke bewegst.

Prima, was? Das ist der alten Version, mit dem Versetzen der Knochen an den Urpsrung etc., um ca. den Faktor 1 Million überlegen 🙂

Advertisements

About Heinrich Mallison

I'm a dinosaur biomech guy working at the Museum für Naturkunde Berlin.
This entry was posted in 3D-Modellierung, SIMM. Bookmark the permalink.

One Response to Die Wissenschaft zur Vorschau Teil 2

  1. Pingback: the science behind the sneak previews part 2 | dinosaurpalaeo

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