User Tools

Site Tools


visual3d:documentation:pipeline:model_based_data_commands:angular_momentum_example

This is an old revision of the document!


Angular Momentum Examples

This page demonstrates how to compute angular momentum using sports data sets, with normalization methods based on recent biomechanics research. The approach follows principles established in studies like “How maximal whole-body and segmental angular momenta relate to fastball speeds in high school baseball pitchers”[1] and “Changes in angular momentum during the golf swing and their association with club head speed”[2]. The pipeline computes both segmental angular momentum (with local and remote components) and model angular momentum, then projects these 3D vectors onto the swing planes for both baseball patting and a golf swing. The examples below show how to implement these calculations in Visual3D for batting and golf analysis, though the same principles apply to pitching, throwing, and other rotational sports movements.

Baseball

This example shows how to compute the angular momentum of the model (MODEL_ANGULAR_MOMENTUM) as well as finding the angular momentum of a segment (ANGULAR_MOMENTUM) using babseball data with accounting for the swing plane.


1. Below outlines the creation of the event sequence that occurs during the contact sequence (when the ball is being contacted by the bat).

Event_Explicit
/EVENT_NAME=START
/FRAME= ! Frame # when the bat makes contact with the ball !
! /TIME=
;

Event_Explicit
/EVENT_NAME=END
/FRAME= ! Frame # when the ball leaves the bat !
! /TIME=
;

Event_Define_Event_Sequence
/EVENT_SEQUENCE_NAME=CONTACT_PLANE
/EVENT_SEQUENCE=START+END
! /EXCLUDE_EVENTS=
! /INSIDE_OF_SEQUENCE=
! /OFFSET_FROM_START=
! /OFFSET_FROM_END=
! /OFFSET_BY=PERCENT
/EVENT_SEQUENCE_INSTANCE=0
;

2. The pipeline's Best_Fit_Plane calculation creates a plane based on the bat's actual path during the contact sequence (CONTACT_PLANE). This represents the true swing plane for that specific swing. This is done since this calculates only the angular momentum that is contributing to the bat speed in the actual swing direction (within the swing plane).

Evaluate_Expression
/EXPRESSION=METRIC_MEAN(SIGN(DOT(VECTOR(0,0,1,0),Best_Fit_Plane(CURRENT_SIGNAL,EVENT_LABEL::SEQUENCE::CONTACT_PLANE))))
*Best_Fit_Plane(CURRENT_SIGNAL,EVENT_LABEL::SEQUENCE::CONTACT_PLANE)
/SIGNAL_TYPES=LANDMARK
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=BAT_DISTAL
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=BAT
/RESULT_NAME=CONTACT_PLANE
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;

3. The following model based items that are being computed is the angular momentum, of both segments as well as the entire model.

!! Segment angular momentum: thorax angular momentum including the thorax's linear momentum relative to the body’s center of mass (COM) !!
Compute_Model_Based_Data
/RESULT_NAME=Thorax_AngMom_Remote
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=ANGULAR_MOMENTUM
/SEGMENT=RTX
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
/NORMALIZATION=TRUE
/NORMALIZATION_METHOD=DEFAULT_NORMALIZATION
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
/INCLUDE_REMOTE_ANGULAR_MOMENTUM=TRUE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

!! Segment angular momentum: right forearm angular momentum including the forearm's linear momentum relative to the body’s center of mass (COM) !!
Compute_Model_Based_Data
/RESULT_NAME=RFA_AngMomRemote
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=ANGULAR_MOMENTUM
/SEGMENT=RFA
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
/NORMALIZATION=TRUE
/NORMALIZATION_METHOD=DEFAULT_NORMALIZATION
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
/INCLUDE_REMOTE_ANGULAR_MOMENTUM=TRUE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

!! Model angular momentum: Total body's angular momentum!!
Compute_Model_Based_Data
/RESULT_NAME=AngMomTotal
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=MODEL_ANGULAR_MOMENTUM
/SEGMENT=
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
! /NORMALIZATION=FALSE
! /NORMALIZATION_METHOD=
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
! /INCLUDE_REMOTE_ANGULAR_MOMENTUM=FALSE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

4. The projected values below represent the magnitude of angular momentum aligned with the swing plane calculated in step 2 , expressed as a scalar rather then a vector.

Evaluate_Expression
/EXPRESSION=DOT(DERIVED::BAT::CONTACT_PLANE,VECTOR(CURRENT_SIGNAL,0))
/SIGNAL_TYPES=LINK_MODEL_BASED
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=AngMomTotal
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
 /RESULT_FOLDERS=BAT
 /RESULT_NAME=_PROJ
 /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;

Evaluate_Expression
/EXPRESSION=DOT(DERIVED::BAT::CONTACT_PLANE,VECTOR(CURRENT_SIGNAL,0))
/SIGNAL_TYPES=LINK_MODEL_BASED
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=Thorax_AngMomRemote
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=BAT
/RESULT_NAME=_PROJ
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;

Evaluate_Expression
/EXPRESSION=DOT(DERIVED::BAT::CONTACT_PLANE,VECTOR(CURRENT_SIGNAL,0))
/SIGNAL_TYPES=LINK_MODEL_BASED
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=RFA_AngMomRemote
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=BAT
/RESULT_NAME=_PROJ
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;

Golf

First, the Best_Fit_Plane is used to calculate the swing plane at impact. This will be used in subsequent commands to identify the angular momentum projection on the swing plane.

Evaluate_Expression
/EXPRESSION=METRIC_MEAN(SIGN(DOT(VECTOR(LANDMARK::ORIGINAL::VLB_ANTERIOR,0),Best_Fit_Plane(CURRENT_SIGNAL,EVENT_LABEL::SEQUENCE::CONTACT_PLANE))))
*Best_Fit_Plane(CURRENT_SIGNAL,EVENT_LABEL::SEQUENCE::CONTACT_PLANE)
/SIGNAL_TYPES=KINETIC_KINEMATIC
/SIGNAL_FOLDER=CLUB_FACE
/SIGNAL_NAMES=ProxEndPos
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=CLUB
/RESULT_NAME=CONTACT_PLANE
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;

Segment Angular Momentum About Segment COM

The following example show how the angular momentum of the thorax about its own center of mass can be calculated:

Compute_Model_Based_Data
/RESULT_NAME=Thorax_AngMom
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=ANGULAR_MOMENTUM
/SEGMENT=RTX
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
/NORMALIZATION=TRUE
/NORMALIZATION_METHOD=DEFAULT_NORMALIZATION
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
! /INCLUDE_REMOTE_ANGULAR_MOMENTUM=FALSE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

Segment Angular Momentum Including Remote Angular Momentum

This example shows how the angular momentum of the thorax can be found, like above, this time including the remote angular momentum of the segment. The remote angular momentum is defined as a segment’s linear momentum relative to the body’s center of mass. This value is then projected, using Evaluate_Expression, onto the swing plane we defined earlier:

Compute_Model_Based_Data
/RESULT_NAME=Thorax_AngMomRemote
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=ANGULAR_MOMENTUM
/SEGMENT=RTX
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
/NORMALIZATION=TRUE
/NORMALIZATION_METHOD=DEFAULT_NORMALIZATION
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
/INCLUDE_REMOTE_ANGULAR_MOMENTUM=TRUE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

Evaluate_Expression
/EXPRESSION=DOT(DERIVED::CLUB::CONTACT_PLANE,VECTOR(CURRENT_SIGNAL,0))
/SIGNAL_TYPES=LINK_MODEL_BASED
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=Thorax_AngMomRemote
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=CLUB
/RESULT_NAME=_PROJ
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;

Whole Body Angular Momentum About Model COM

The following commands show how the total angular momentum of the model can be found by summing the angular momentum of every model segment about the model COM. This value is then projected onto the swing plane using the same method as above. Model angular momentum can either include or exclude the remote angular momentum of each segment, in this example it is excluded.

Compute_Model_Based_Data
/RESULT_NAME=AngMomTotal
/SUBJECT_TAG=ALL_SUBJECTS
/FUNCTION=MODEL_ANGULAR_MOMENTUM
/SEGMENT=
/REFERENCE_SEGMENT=
! /RESOLUTION_COORDINATE_SYSTEM=LAB
! /USE_CARDAN_SEQUENCE=FALSE
! /NORMALIZATION=FALSE
! /NORMALIZATION_METHOD=
! /NORMALIZATION_METRIC=
! /NEGATEX=FALSE
! /NEGATEY=FALSE
! /NEGATEZ=FALSE
! /AXIS1=X
! /AXIS2=Y
! /AXIS3=Z
! /INCLUDE_REMOTE_ANGULAR_MOMENTUM=FALSE
! /TREADMILL_DATA=FALSE
! /TREADMILL_DIRECTION=UNIT_VECTOR(0,1,0)
! /TREADMILL_SPEED=0.0
;

Evaluate_Expression
/EXPRESSION=DOT(DERIVED::CLUB::CONTACT_PLANE,VECTOR(CURRENT_SIGNAL,0))
/SIGNAL_TYPES=LINK_MODEL_BASED
! /SIGNAL_FOLDER=ORIGINAL
/SIGNAL_NAMES=AngMomTotal
! /SIGNAL_COMPONENTS=
! /RESULT_TYPES=DERIVED
/RESULT_FOLDERS=CLUB
/RESULT_NAME=_PROJ
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;

// [1] How maximal whole-body and segmental angular momenta relate to fastball speeds in high school baseball pitchers
[2] Changes in angular momentum during the golf swing and their association with club head speed

visual3d/documentation/pipeline/model_based_data_commands/angular_momentum_example.1766163147.txt.gz · Last modified: by wikisysop