All Collections
Using Uplift Capture
Defining our Kinematic Outputs
Defining our Kinematic Outputs

A description of Uplift Capture kinematic and joint center metrics.

Jonathan Wills avatar
Written by Jonathan Wills
Updated over a week ago

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

Anatomical Position:

T-Pose:

Read here how to interact with these kinematic outputs in our raw data exports, our cloud visualizer, and our generated reports.

Did this answer your question?