Skip to main content
All CollectionsUsing Uplift Capture
Uplift Kinematic Variables Information
Uplift Kinematic Variables Information
Jonathan Wills avatar
Written by Jonathan Wills
Updated over a year ago

The purpose of this document is to outline the Coordinate System used by, and Kinematic Outputs generated from, Uplift Capture. Although we outline some technical aspects of the system, the purpose of this document was not to provide an encompassing technical overview of how Uplift Capture exports 3D biomechanical data from two iPhones.

Defining our Global Coordinate System

Before outlining the kinematic outputs, it is essential to first outline the Global Coordinate System (GCS) of the biomechanical data. First, we’ll outline the “original” GCS used internally for the computer vision data. Then, we’ll outline the “External” GCS that is included in the csv exports (i.e., what you receive in Webhooks or by clicking “Download Kinematics Data” in the visualizer).

Our “original” GCS is shown in Figure 1 below:

Figure 1. Our “original” Global Coordinate System (GCS). The global origin is situated in the top left of the primary camera. The X-axis points to the right in the video, the Y-axis points downwards in the video, and the Z-axis points “into” the video.

However, since most biomechanical analyses assume a vertical axis pointing “up”, our data exports are rotated 180 degrees about the global X-axis. Then, we translate the origin to the average (with outliers removed) position of the left hip joint center of the capture. Thus, our “External” GCS (i.e., the GCS in the data exports) is shown in Figure 2 below:

Figure 2. Visual depiction of the Global Coordinate System (GCS) of Uplift Labs’ kinematic outputs. The global origin is located in the average (outliers removed) position of the left hip joint center throughout the session. The X-axis points relatively to the right in the video captured by the primary camera, the Y-axis points vertically, and the Z-axis points “back” towards the primary camera.

In summary, our Y-axis points vertically in our data exports, but the X-axis and Z-axis are dependent on the positioning of the primary camera. Depending on your applications, you may want to rotate your GCS so a particular axis points (roughly) to a particular object (e.g., the Z-axis pointing towards the mound during a swing). If this is something you are interested in, please contact the Uplift Team for more information about how to perform this transformation.

Defining our Kinematic Outputs

Uplift Labs provides two main sources of information. In any recorded session, we report the position of key joint centers, angles, and angular velocities of several joints.

Joint Center Data

Our models currently track 65 total keypoints, but export 28 keypoints to the user (23 tracked, 5 derived; the 42 additional keypoints are all on the hands and are undergoing additional testing before we export them to our users). The 23 tracked and 5 derived keypoints are shown below in Figure 3:

Figure 3. Visual depiction of our tracked and derived keypoints. Note that keypoint 27, the midHead keypoint, is not shown as it would be located directly behind the nose keypoint [0] in this example.

The joint center location data in our exports are the marker 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:

[insert visual here]

and then computing the angle between these two lines (vectors).

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 internal/external rotation, ab/adduction, flexion/extension, and so on (note that Euler angles computed with most motion capture systems are only approximations of the joint motions outlined in anatomy textbooks).

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.

Name

Visual Explanation

Text Explanation

head_extension

Head Extension relative to the trunk (Euler)

head_lateral_flexion_clockwise

Head lateral flexion relative to the trunk (Euler)

head_twist_clockwise

Head rotation relative to the trunk (Euler)

trunk_lateral_flexion_to_right

Trunk lateral rotation with reference to the pelvis (Euler)

trunk_twist_clockwise

Trunk rotation with reference to the pelvis (Euler)

right_shoulder_flexion

Upper arm flexion relative to the trunk (Euler)

right_shoulder_adduction

Upper arm adduction relative to the trunk (Euler)

right_shoulder_external_rotation

Upper arm external rotation relative to the trunk (Euler)

right_shoulder_horizontal_adduction

Upper arm horizontal adduction relative to the trunk (Euler)

right_elbow_flexion

Lower arm flexion relative to the upper arm (3D)

right_hip_flexion_with_respect_to_trunk

Thigh flexion relative to the trunk (Euler)

right_hip_adduction_with_respect_to_trunk

Thigh adduction relative to the trunk (Euler)

right_hip_internal_rotation_with_respect_to_trunk

Internal rotation of the thigh relative to the trunk (Euler)

right_hip_adduction_with_respect_to_pelvis

Thigh adduction relative to the pelvis (Euler)

right_hip_internal_rotation_with_respect_to_pelvis

Internal rotation of the thigh relative to the pelvis (Euler)

right_knee_extension

Shank flexion relative to the thigh (Euler)

right_knee_varus

Shank varus relative to the thigh (Euler)

right_knee_internal_rotation

Shank internal rotation relative to the thigh (Euler)

right_ankle_dorsiflexion

Ankle flexion relative to shank (3D)

pelvis_rotational_velocity_with_respect_to_ground

Rotational velocity of the pelvis segment relative to the GCS (Velocity)

trunk_rotational_velocity_with_respect_to_ground

Rotational velocity of the trunk segment relative to the GCS (Velocity)

right_arm_rotational_velocity_with_respect_to_ground

Rotational velocity of the upper arm segment relative to the GCS (Velocity)

Interacting With This Data

There are two main ways for users to interact with our data. The first is through our reports we generate for certain activities and movements. The second is through our csv exports.

Activity Reports

For select activities, data computed from our pipelines is aggregated into a single summary report. Please see _____ for some example summary reports.

Outlining our CSV Exports

In addition to our joint center and angle data, our csv exports also provide additional information about a session, such as:

  • Athlete name

  • Athlete id

  • Session id

  • Org id

  • Capture time (the time, in seconds, since the Unix epoch, which is January 1, 1970, 00:00:00 UTC)

  • Frames per second (fps)

  • Activity tag

  • Movement tag

  • Handedness

  • Footedness

  • QA tag (defaults to 1 except for certain activities and movements where the Uplift Team has built a dedicated QA process- a good “hint” as to whether our team has created a dedicated QA process is if there are additional events and metrics included in the export)

  • Time (in seconds)

  • Frame (number)

  • Any additional events and metrics based on the activity and movement selected (e.g., baseball pitching will also export a string containing the kinematic sequence ordering under the column kinematic_sequence_order)

These data exports provide the user with the flexibility to ingest the data to conduct their own bespoke analyses that we may not yet support.

Did this answer your question?