How can I calculate kinematics of ankle joint after calculating local coordinates of the foot and shank from the 3D position of markers?

12 visualizaciones (últimos 30 días)
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?

Respuesta aceptada

Suraj Kumar
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!

Más respuestas (0)

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!

Translated by