In any recorded session, we provide two main sources of information: joint center data and joint angle data. Below, we outline the joint center keypoints and joint angles in our data exports.
Joint Center Data
Our models currently export 28 keypoints to the user. Figure 3 outlines these keypoints:
# | Name | # | Name | # | Name |
0 | nose_3d | 10 | right_wrist_jc_3d | 20 | right_first_toe_3d |
1 | left_eye_3d | 11 | left_hip_jc_3d | 21 | right_fifth_toe_3d |
2 | right_eye_3d | 12 | right_hip_jc_3d | 22 | right_heel_3d |
3 | left_ear_3d | 13 | left_knee_jc_3d | 23 | pelvis_3d |
4 | right_ear_3d | 14 | right_knee_jc_3d | 24 | proximal_neck_3d |
5 | left_shoulder_jc_3d | 15 | left_ankle_jc_3d | 25 | right_mid_toe_3d |
6 | right_shoulder_jc_3d | 16 | right_ankle_jc_3d | 26 | left_mid_toe_3d |
7 | left_elbow_jc_3d | 17 | left_first_toe_3d | 27 | mid_head_3d |
8 | right_elbow_jc_3d | 18 | left_fifth_toe_3d |
|
|
9 | left_wrist_jc_3d | 29 | left_heel_3d |
|
|
Note that keypoint 27, the midHead keypoint, is not shown as it would be located directly behind the nose keypoint [0] in this example.
These keypoints represent the joint center trajectories computed from our Inverse Kinematics solver. Thus, segment lengths will be “constrained” (i.e., will not meaningfully change lengths) throughout the motion trial.
Joint Angle Data
In addition to our keypoint data, we also export joint angle (and angular velocity) data. Before outlining the various angles we compute, it will be important to first highlight the two main ways we define a joint angle in our data exports (note: if you have a formal education in biomechanics, you can probably skip ahead to the “Our Joint Angle Exports” section below).
What is a joint angle?
There are two main ways that we compute joint angles using Uplift Capture. The first is called a cosine angle, which is simply the angle between two vectors. One example of a cosine angle that we compute are ankle dorsiflexion angles. This angle can be visualized by drawing one line (vector) from the ankle to the mid toe and another line (vector) from the ankle to the knee:
and then computing the angle between these two lines (vectors). The angular velocity is then computed via the finite difference method.
Other joints, such as the shoulder, are instead computed using Euler Angles. The mathematics are beyond the scope of this document, but instead of creating two vectors and computing a single angle, we instead create two Local Coordinate Systems (LCSs), define the rotation matrix between the “child” segment (usually the distal segment) and the “parent” segment (usually the proximal segment), and then decompose this matrix into rotations about 3 axes (i.e., X, Y, and Z). For a visual explanation of Euler angles, please see this linked video (click here). For example, when computing shoulder angles, we are decomposing the rotation matrix that defines the transformation from the Trunk’s LCS to the Upper Arm’s LCS. By decomposing these rotations in a specific order (outlined by the International Society of Biomechanics), we know that these angles will roughly correspond to the anatomical definitions of shoulder flexion/extension, ab/adduction, internal/external rotation, and so on (note that Euler angles computed with most motion capture systems are only approximations of the joint motions outlined in anatomy textbooks). Because Euler angles are not vectors, the joint angular velocities are not computed via simple differentiation. Instead, we compute an angular velocity tensor using the rotation matrices under the assumption that joints are rotating about a fixed axis.
Our Joint Angle Exports
Listed below are the specific joint angles that we export, by default, during any recorded session. Note that we only show the joint angles in the table below (except for global segment velocities used in the kinematic sequence). Joint velocities are appended with an _velocity naming convention in our data exports. For variables specified as “Euler”, note that angular velocities are computed by differentiating the rotation matrices whereas variables specified as “3D” are computed via finite differences of the joint angle.
Note: Visual explanation images coming soon.
Name | Description | Neutral/ “Zero” |
head_extension | Head Extension relative to the trunk (Euler). | Anatomical Position |
head_lateral_flexion_clockwise | Head lateral flexion relative to the trunk (Euler). | Anatomical Position |
head_twist_clockwise | Head rotation relative to the trunk (Euler). | Anatomical Position |
trunk_lateral_flexion_right | Trunk lateral rotation with reference to the pelvis (Euler). | Anatomical Position |
trunk_twist_clockwise | Trunk rotation with reference to the pelvis (Euler). | Anatomical Position |
right_shoulder_flexion | Upper arm flexion relative to the trunk (Euler). | Anatomical Position |
right_shoulder_adduction | Upper arm adduction relative to the trunk (Euler). | Anatomical Position |
right_shoulder_external_rotation | Upper arm external rotation relative to the trunk (Euler). | T-pose |
right_shoulder_horizontal_adduction | Upper arm horizontal adduction relative to the trunk (Euler). | T-pose |
right_elbow_flexion | Lower arm flexion relative to the upper arm (3D). | Anatomical Position |
right_hip_flexion_with_respect_to_trunk | Thigh flexion relative to the trunk (Euler). | Anatomical Position |
right_hip_adduction_with_respect_to_trunk | Thigh adduction relative to the trunk (Euler). | Anatomical Position |
right_hip_internal_rotation_with_respect_to_trunk | Internal rotation of the thigh relative to the trunk (Euler). | Anatomical Position |
right_hip_adduction_with_respect_to_pelvis | Thigh adduction relative to the pelvis (Euler). | Anatomical Position |
right_hip_internal_rotation_with_respect_to_pelvis | Internal rotation of the thigh relative to the pelvis (Euler). | Anatomical Position |
right_knee_extension | Shank flexion relative to the thigh (Euler). | Anatomical Position |
right_knee_varus | Shank varus relative to the thigh (Euler) | Anatomical Position |
right_knee_internal_rotation | Shank internal rotation relative to the thigh (Euler) | Anatomical Position |
right_ankle_dorsiflexion | Ankle flexion relative to shank (3D) | Anatomical Position |
pelvis_rotational_velocity_with_respect_to_ground | Rotational velocity of the pelvis segment relative to the GCS (Velocity) | NA |
trunk_rotational_velocity_with_respect_to_ground | Rotational velocity of the trunk segment relative to the GCS (Velocity) | NA |
right_arm_rotational_velocity_with_respect_to_ground | Rotational velocity of the upper arm segment relative to the GCS (Velocity) | NA |
Read here how to interact with these kinematic outputs in our raw data exports, our cloud visualizer, and our generated reports.