Warning: Undefined array key "DW68700bfd16c2027de7de74a5a8202a6f" in /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/lib/plugins/translation/action.php on line 237

Warning: Trying to access array offset on value of type null in /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/lib/plugins/translation/action.php on line 237

Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/lib/plugins/translation/action.php:237) in /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/inc/actions.php on line 38
KINSCRIPT01 [Institut für Sportwissenschaft]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


matlab:kinscript:01anglecalc

KINSCRIPT01

Modul Winkelberechnung
Kategorie MATLAB > MAT-KINSCRIPT
Autor Filip Cengic
Voraussetzung Matlab-Grundlagenkenntnisse:
MAT01 Einführung
optional: MAT02 Baumgartner - MAT04 Grafische Darstellung
Bearbeitungsdauer ca. 30 Minuten
Skripdatei anglecalculation.m
Datensatz P1W25


Im Folgenden wird das – oben zum Download angebotene – Matlab-Skript Schritt für Schritt erklärt. Das Skript bezieht sich auf den zur Verfügung gestellten Datensatz. Der Datensatz beinhaltet die jeweiligen Markerpositionen (nx3 Matrizen), sowie de gemessenen Bodenreaktionskräfte.


…zum Datensatz:

  • Der Datensatz kann hier heruntergeladen werden. Dort findet sich auch eine nähere Beschreibung dieses.
  • Die Kodierung der Marker ist in Markercodes (Links) beschrieben.


…zum Skript:

Das Skript benötigt für die Winkelberechnung drei Parameter. Zunächst ist ein Drehpunkt zu definieren (z.B. Kniegelenk). Um das Kniegelenk rotieren sowohl Oberschenkel (Verbindung Hüfte-Knie) als auch Unterschenkel (Verbindung Fuß/Hacke-Knie). Dementsprechend werden folgende drei Marker als Parameter in die Winkelberechnung übergeben(linksseitig):

  • L_Hee – Left Heel: Linke Hacke
  • L_Hip – Left Hip: Linker Hüftknochen
  • L_Kne_O – Outer Left Knee: Äußeres linkes Knie


Das Skript lässt sich in sechs Teile untergliedern, welche im Folgenden näher erläutert werden:

  1. Bereinigung des Workspace/Kommandozeile
  2. Parametereingabe
  3. Relative Koordinaten definieren
  4. Winkelberechnung
  5. Darstellung
  6. Datensicherung (optional)


(1) Bereinigung der Kommandozeile

Das Kommandozeilenfenster kann mit dem Befehlen clc (clear command) bereinigt werden (Zeile 24).



(2) Parametereingabe

In diesem Abschnitt werden im Dialog zur Skriptlaufzeit die Parameter festgelegt (Drehpunkt, zwei in Verbindung stehende Marker). Die Reihenfolge spielt hierbei keine Rolle, welcher der beiden Verbindungsmarker zuerst gewählt wird. Die Dialogabfrage geschieht mit dem Befehl prompt. Der Befehl input liest die Nutzereingabe ein (Zeilen 28, 30, 32), welche der entsprechenden Skriptvariable zugewiesen wird. Bei der dritten Abfrage ist der Drehpunkt zu definieren.




(3) Relative Koordinaten definieren

Die jeweiligen Markerpositionen werden übersichtshalber in ihre x-, y- und z-Komponente untergliedert (Zeilen 36-45). Des Weiteren wird der eindimensionale Vektor targetAngle initialisiert (Zeile 49), welcher im nächsten Schritt in einer for-Schleife (Zeilen 53-61) mit Winkelwerten befüllt wird.




(4) Winkelberechnung

Die mathematischen Eigenschaften des Skalarprodukts zweier Vektoren geben Information zu dem Winkelverhältnis. Bevor näher auf die Skalarproduktgleichung eingegangen wird, sind zunächst die jeweiligen Vektorlängen zu bestimmen. Hierzu werden die beiden Markerpositionsvektoren voneinander subtrahiert (Zeilen 54, 56). Für die Berechnung der „natürlichen“ Länge (Euklidisches Länge) eines Vektors wird die Funktion $norm(X)$ verwendet. Hierbei entspricht $norm(X) = norm(X, 2) = sqrt(sum(X.^2))$, wobei $X.^2$ bedeutet, dass jede einzelne Komponente des Vektors $X$ quadriert wird.


Mathematisch ausgedrückt ist die Euklidische Länge mit p-norm (hier: p=2) wie folgt definiert:

$$ \lVert X \rVert_{p} := \Big( \sum_{i=1}^{n} \vert X_i \vert^p \Big)^{\frac{1}{p}} $$


Exkurs: Verwendung des Skalarprodukts

Das Skalarprodukt beschreibt das Winkelverhältnis zweier Vektoren und kann mit der folgenden Gleichung ausgedrückt werden:

$$ \vec{a} * \vec{b} = \vert \vec{a} \vert \vert \vec{b} \vert cos(\gamma) $$


Die folgende Tabelle führt ein Beispiel auf. Abhängig vom Kniewinkel wird entschieden, ob das Skalarprodukt negativ, positiv oder gleich 0 beträgt:


Kniewinkel $\gamma$ Skalarprodukt
=90° $\vec{a}*\vec{b}=0$
<90° $\vec{a}*\vec{b}>0$
>90° $\vec{a}*\vec{b}<0$


Beträgt der Winkel < 90°, ist das Skalarprodukt positiv und umgekehrt (>90°) negativ. Der Grund ist der Kosinusverlauf, welcher ab einer Winkelgröße von >90° (und <180°) negativ ist. Vektorlängen beschreiben einen Abstand zueinander, daher sind $\vert \vec{a} \vert$ , $\vert \vec{b} \vert$ stets >0.

Über das Skalarprodukt ist es folglich möglich, den Winkel zu berechnen. Durch mathematische Termumformung kann der $cos(\gamma)$ auf die linke Seite der Gleichung gebracht werden (Zeile: 58):

$$ cos(\gamma) = \frac{\vec{a}*\vec{b}}{\vert \vec{a} \vert \vert \vec{b} \vert} $$


Der Kosinus aus dem Kniewinkel entspricht der Division zwischen Skalarprodukt und Multiplikation der „natürlichen“ (auch: euklidischen) Vektorlängen.

In den Zeilen 63-78 werden die in Punkt (3) und (4) erzeugten temporären Vektoren aus dem Workspace gelöscht. Der Kniewinkelverlauf wurde iterativ in der Variable targetAngle (Zeile 60) gespeichert.



(5) Darstellung

Die grafische Darstellung erfolgt mit dem Matlab-Befehl plot(X,Y) in Zeile 83. Als Eingangsparameter Y wird der targetAngle verwendet.



(6) Datenspeicherung

Per Nutzerinteraktion wird gefragt, ob der ausgewertete Datensatz in einer .mat-Datei lokal gespeichert werden soll.



Video

Das Video befindet sich gerade in Bearbeitung und wird demnächst fertiggestellt.



Feedback

Wo gibt es noch offene Fragen? Was sollte besser erklärt werden? Rechtschreibfehler gefunden? Auch allgemeines Feedback, Ideen und Wünsche sind herzlich willkommen!

Das Feedback kann ohne Anmeldung im folgenden Google Dokument festgehalten werden.

indexmenu_n_10

matlab/kinscript/01anglecalc.txt · Zuletzt geändert: 28.11.2022 00:11 von 127.0.0.1


Warning: Undefined variable $orig_id in /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/lib/plugins/openas/action.php on line 232