How can I calculate kinematics of ankle joint after calculating local coordinates of the foot and shank from the 3D position of markers?
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tomaszzz
el 12 de En. de 2024
Respondida: Suraj Kumar
el 27 de Sept. de 2024
Hi all,
I have a human 3D motion data (walking straight).
I want to calculate ankle joint kinematics.
I have calculated the local coordinates of the foot and shank segments using the XYZ coordinates (in meters) of 3 markers from each segment. Code for shank coordinate system ( as suggested by ChatGPT):
% The shank coordinate system axes (lateral malleoli, medial malleoli, head of fibula)
l_shank_x = (llmal - lmmal) / norm(llmal - lmmal);
l_shank_y = cross(l_shank_z, l_shank_x);
l_shank_z = cross(lfib - lmmal, llmal - lmmal) / norm(cross(lfib - lmmal, llmal - lmmal));
% Ensure axis vectors are normalized
l_shank_x2 = l_shank_x / norm(l_shank_x);
l_shank_y2 = l_shank_y / norm(l_shank_y);
l_shank_z2 = l_shank_z / norm(l_shank_z);
% Create the shank rotation matrix
lshank_rotation_matrix = [l_shank_x2', l_shank_y2', l_shank_z2'];
These coordinates are attached for both the foot and the shank (both 868x9 double).
I have also calcuted ankle joint center (attached):
l_ankle_cent = lcal + lmet5/2;
I wonder what is the general framework to follow to calculate ankle joint 3D kinematics (in degrees) from here?
0 comentarios
Respuesta aceptada
Suraj Kumar
el 27 de Sept. de 2024
Hi Tomaszzz,
To compute the ankle joint angles, you can refer the following steps and the attached code snippets:
1. Compute the relative rotation matrix between the shank and the foot by multiplying the inverse of shank’s rotation matrix and foot rotation matrix.
for i = 1:num_frames
% Extract rotation matrices for the current frame
shank_rot = lshank_rotation_matrix(:, :, i);
foot_rot = lfoot_rotation_matrix(:, :, i);
% Calculate relative rotation matrix
relative_rotation_matrix = shank_rot' * foot_rot;
2. Then, you can extract the Euler angles using the ‘rotm2eul’ function and iterate over each frame, performing the above calculations for all frames in the dataset.
% Convert to Euler angles using ZYX sequence
euler_angles = rotm2eul(relative_rotation_matrix, 'ZYX');
3. Plot the calculated ankle joint angles over time to visualize the results.
figure;
subplot(3, 1, 1);
plot(ankle_angles_degrees(:, 1));
title('Ankle Joint Yaw Angle');
xlabel('Frame');
ylabel('Degrees');
subplot(3, 1, 2);
plot(ankle_angles_degrees(:, 2));
title('Ankle Joint Pitch Angle');
xlabel('Frame');
ylabel('Degrees');
subplot(3, 1, 3);
plot(ankle_angles_degrees(:, 3));
title('Ankle Joint Roll Angle');
xlabel('Frame');
ylabel('Degrees');
You may check the output below for a better understanding:
To know more about the ‘rotm2eul’ function in MATLAB, you can refer to the following documentation:
Happy Coding!
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Biological and Health Sciences en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!