Verfasst am: 23.01.2012, 11:18
Titel: Punkt mit Hilfe 3er vorhandener Punkte bestimmen
Guten Tag zusammen
Ich bin im Moment dabei, ein Modell zu schreiben, das Fussbewegungen während dem Gehen berechnen soll. Als Input stehen mir die Daten eines Bewegungsanalyse-Systems zur Verfügung. Das sind Hauptsächlich Koordinaten von Markern, die auf den Fuss geklebt wurden. Mit Hilfe dieser Marker will ich die Bewegungen rekonstruieren. Einen Wichtigen Punkt für die Berechnungen stellt dabei das Fussgelenkszentrum dar, das allerdings nicht mit einem Marker versehen werden kann. Dieses muss ich folglich berechnen. Bei einer Bewegungsanalyse wird immer zuerst ein statischer versuch gemacht, bevor man die dynamischen Versuche, wie zum Beispile Gehen, Rennen usw., durchführt. Im statischen Versuch sind in meinem Fall bestimmte Marker, wie z.B. am medialen Malleolus, geklebt, die für die dynamischen Versuche abgenommen werden. Somit ist die Berechnung im statischen Versuch sehr einfach, jene im dynamischen allerdings nicht.
In meinem ersten Ansatz habe ich die Abstände von drei verschiedenen Markern des selben Segmentes, auf dem sich auch das Fussgelenkszentrum befindet, zum Fussgelenkszentrum bestummen (im statischen Versuch). Da dieses Segment starr sein sollte, habe ich angenommen, dass diese Abstände als Kugelradien 2 Schnittpunkte bilden sollten, von denen einer das Fussgelenkszentrum ist. Leider erhielt ich zum Teil komplexe Resultate, welche sich beim Plotten als keine Lösungen entpupten. Scheinbar nahmen Hautbewegungen genügend Einfluss auf die Radien, dass sich keine Schnittpunkte mehr ergaben.
Mein zweiter Ansatz bestand darin, Winkel verschiedener Vektoren zu vergleichen. Ich nahm den Vektor vom Knöchelmarker (lateral = aussen) zum gesuchten Fussgelenkszentrum und wollte mit einem Gleichungssystem aus zwei 'Winkelgleichungen' und einer 'Abstandsgleichung' die Koordinaten des Fussgelenkszentrums bestimmen. Bei dieser Idee will leider die solve-Funktion nicht mitmachen!
Hier ist noch mein Code:
Code:
a1 = (Markers.LANK-LMMA); % horizontale Achse
b1 = (Markers.LANK-Markers.LHFB); % vertikale Achse
c1 = (cross((b1(1,:)/2-Markers.LSHN(1,:)),b1(1,:)));
wv = atan2(norm(cross(a1(1,:),b1(1,:))), dot(a1(1,:),b1(1,:))); % hier bestimme ich, wie gross die Winkel im statischen Versuch sind um dann für den dynamischen versuch ein Resultat zu haben, das ich in die Gleichung einsetzen kann.
wa = atan2(norm(cross(a1(1,:),c1(1,:))), dot(a1(1,:),c1(1,:)));
LMMA = LMMA(1:276,:);
% bis hier wird mit statischen Werten gerechnet % zurückrechenen im dynamischen
wid = MetaData.children.PROCESSING.children.LAnkleWidth.info.values/2; % halbe Breite des Fussgelenks
P1 = NaN(size(Markers.LANK)); % gesuchtes Fussgelenkszentrum (FGZ) for k=1:1:size(Markers.LANK,1) syms x y z;
P = [x y z];
d1 = (P-Markers.LANK(k,:)); % Vektor vom äusseren Knöchel zum FGZ
e1 = (Markers.LHFB(k,:)-Markers.LANK(k,:)); % vertikale Achse
f1 = (cross((e1(k,:)/2-Markers.LSHN(k,:)),e1(k,:)));
g1 = sqrt(sum(cross(d1(k,:),e1(k,:)).^2));
h1 = dot(d1(k,:),e1(k,:));
l1 = sqrt(sum((cross(d1(k,:),f1)).^2));
m1 = dot(d1(k,:),f1);
k1 = 2*atan((sqrt(h1^2+g1^2)-h1)/g1);
k2 = 2*atan((sqrt(m1^2+l1)-m1)/l1);
k3 = sqrt((Markers.LANK(k,1)-P(1))^2 + (Markers.LANK(k,2)-P(2))^2 + (Markers.LANK(k,3)-P(3))^2);
wenn ich es durchlauffen lasse kommt immer die Selbe Fehlermeldung.
??? Error using ==> mupadmex
Error in MuPAD command: cannot differentiate equation [numeric::fsolve]
Error in ==> sym.sym>sym.mupadmexnout at 2018
out = mupadmex(fcn,args{:});
Error in ==> solve at 76
[symvars,R] = mupadmexnout('symobj::solvefull',eqns,vars);
mit der kann ich nichts Anfangen. Habe keine Ahnung was mir diese Fehlermeldung sagen will, respsktive warum sich die Gleichungen nicht differenzieren lassen.
mit freundlichen Grüssen
staeme
Verschoben: 23.01.2012, 11:20 Uhr von denny Von Pro und Contra goMatlab-Forum nach Programmierung
habs mal mit fsolve probiert. nun gibt er folgende Fehlermeldung raus:
??? Error using ==> fsolve at 149
FSOLVE only accepts inputs of data type double.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.