Kinematics (.move)#
Basic functions for movement related data from optical tracking systems. If I have the time I will make a vector3d class. Most functions assume an [n, 3] or [1, 3] array or dataframe.
- worklab.move.acs_to_car_ang(acs, order=<class 'list'>)[source]#
Anatomical coordinate system to cardanic angles
Note: Only works if used in the DSEM coordinate system Y pointing upward, X pointing laterally to the right and Z point backwards
- Parameters:
acs (np.array) – anatomical coordinate system
order (list[int]) – list of integers 0=’x’, 1=’y’, 2=’z’
- Returns:
angles – cardanic angles
- Return type:
np.array
- worklab.move.distance(point1, point2)[source]#
Compute Euclidean distance between two points, this is the distance if you were to draw a straight line.
- Parameters:
point1 (np.array) – a [1, 3] or [n, 3] array with point coordinates
point2 (np.array) – a [1, 3] or [n, 3] array with point coordinates
- Returns:
distance – distance from point1 to point2 in a [1, 3] or [n, 3] array
- Return type:
np.array
- worklab.move.find_gh_regression(markers)[source]#
Get the location of the glenohumeral joint in the global coordinate system of DSEM In vivo estimation of the glenohumeral joint rotation center from scapular bony landmarks by linear regression C.G.M. Meskers, F.C.T. van der Helm, L.A. Rozendaal, P.M. Rozing
- Parameters:
markers (np.array) – data points of upper-limb kinematics
- Returns:
GH – Glenohumeral rotation center in the global coordinate system
- Return type:
np.array
- worklab.move.flexext_prosup(GH, EL, EM, US, RS)[source]#
Flexion/extension as well as pro/supination in the DSEM reference frame Y pointing upward, X pointing laterally to the right and Z point backwards
- Parameters:
GH (np.array) – data points of the glenohumeral rotation centre
EL (np.array) – data points of the epicondylus lateral
EM (np.array) – data points of the epicondylus medial
US (np.array) – data points of the ulna styloid
RS (np.array) – data points of the radial styloid
- Returns:
angles – angles for flexion/extention, as well as pro/supination
- Return type:
np.array
- worklab.move.get_local_coordinate(marker, acs, origin)[source]#
Make the local coordinate system from the anatomical coordinate system
- Parameters:
marker (np.array) – marker points
acs (np.array) – anatomical coordinate system
origin (np.array) – origin for the local coordinate system
- Returns:
local_marker – local coordinate system
- Return type:
dict[np.array]
- worklab.move.get_orthonormal_frame(point1, point2, point3, mean=False)[source]#
Returns an orthonormal frame from three reference points. For example, a local coordinate system from three marker points.
- Parameters:
point1 (np.array) – first marker point, used as origin if mean=False
point2 (np.array) – second marker point, used as x-axis
point3 (np.array) – third marker point
mean (bool) – using the mean as the origin, default is False
- Returns:
origin (np.array) – xyz column vector with coordinates of the origin which is point1 or the mean of all points
orthonormal (np.array) – 3x3 array with orthonormal coordinates [x, y, z] of the new axis system
- worklab.move.get_perp_vector(vector2d, clockwise=True, normalized=True)[source]#
Get the vector perpendicular to the input vector. Only works in 2D as 3D has infinite solutions.
- Parameters:
vector2d (np.array) – [n, 3] vector data, only uses x and y
clockwise (bool) – clockwise or counterclockwise rotation
normalized (bool) – normalising the result, default is True
- Returns:
perp_vector2d – rotated vector
- Return type:
numpy array
- worklab.move.get_rotation_matrix(new_frame, local_to_world=True)[source]#
Get the rotation matrix between a new reference frame and the global reference frame or the other way around.
- Parameters:
new_frame (np.array) – [3, 3] array specifying the new reference frame
local_to_world (bool) – global to local or local to global
- Returns:
rotation_matrix – rotation matrix that can be used to rotate marker data, e.g.: rotation_matrix @ marker
- Return type:
np.array
- worklab.move.is_unit_length(vector3d, atol=1e-08)[source]#
Checks whether an array ([1, 3] or [n, 3]) is equal to unit length given a tolerance
- worklab.move.magnitude(vector3d)[source]#
Calculates the vector magnitude using a l2 norm. Works with [1, 3] or [n, 3] vectors.
- Parameters:
vector3d (np.array) – a [1, 3] or [n, 3] vector
- Returns:
vector3d – scalar value or column vector
- Return type:
np.array
- worklab.move.make_acs_cl(SC, AC, IJ, PX, C7, T8, AA=None, DSEM=False)[source]#
Make the anatomical coordinate system of the clavicle based on ISB recommendations
Y is pointing upwards X is pointing to the front Z is pointing laterally to the right
- Parameters:
SC (np.array) – data points of the sternoclaviculare joint
AC (np.array) – data points of the dorsal acromioclaviculare joint
IJ (np.array) – data points of the incisura jugularis
PX (np.array) – data points of the processus xiphoideus
C7 (np.array) – data points of C7
T8 (np.array) – data points of T8
AA (np.array) – data points of AA (only necessary for DSEM)
DSEM (boolean (default = False)) – set to True to use coordinate system guidelines DSEM Y pointing upward, X pointing laterally to the right and Z point backwards
- Returns:
local (dict[np.array]) – local coordinate system of the clavicle
acs (np.array) – anatomical coordinate system of the clavicle
origin (np.array) – origin of the local coordinate system of the clavicle
- worklab.move.make_acs_fa(US, RS, EL, EM, DSEM=False)[source]#
Make the anatomical coordinate system of the forearm based on ISB recommendations
Y is pointing upwards X is pointing to the front Z is pointing laterally to the right
- Parameters:
US (np.array) – data points of the ulna styloid
RS (np.array) – data points of the radial styloid
EL (np.array) – data points of the epicondylus lateral
EM (np.array) – data points of the epicondylus medial
DSEM (boolean (default = False)) – set to True to use coordinate system guidelines DSEM Y pointing upward, X pointing laterally to the right and Z point backwards
- Returns:
local (dict[np.array]) – local coordinate system of the forearm
acs (np.array) – anatomical coordinate system of the forearm
origin (np.array) – origin of the local coordinate system of the forearm
- worklab.move.make_acs_hand(M2, M5, US, RS)[source]#
Make the anatomical coordinate system of the hand in DSEM
Y is pointing upwards X is pointing laterally to the right Z is pointing backwards
- Parameters:
M2 (np.array) – data points of metacarpal 2
M5 (np.array) – data points of metacarpal 5
US (np.array) – data points of the ulna styloid
RS (np.array) – data points of the radial styloid
- Returns:
local (dict[np.array]) – local coordinate system of the hand
acs (np.array) – anatomical coordinate system of the hand
origin (np.array) – origin of the local coordinate system of the hand
- worklab.move.make_acs_hu(GH, EL, EM, DSEM=False)[source]#
Make the anatomical coordinate system of the humerus based on ISB recommendations
Y is pointing upwards X is pointing to the front Z is pointing laterally to the right
- Parameters:
GH (np.array) – data points of the glenohumeral rotation centre
EL (np.array) – data points of the epicondylus lateral
EM (np.array) – data points of the epicondylus medial
DSEM (boolean (default = False)) – set to True to use coordinate system guidelines DSEM Y pointing upward, X pointing laterally to the right and Z point backwards
- Returns:
local (dict[np.array]) – local coordinate system of the humerus
acs (np.array) – anatomical coordinate system of the humerus
origin (np.array) – origin of the local coordinate system of the humerus
- worklab.move.make_acs_sc(AA, TS, AI, DSEM=False)[source]#
Make the anatomical coordinate system of the scapula based on ISB recommendations
Y is pointing upwards X is pointing to the front Z is pointing laterally to the right
- Parameters:
AA (np.array) – data points of the angulus acromialis
TS (np.array) – data points of the trigonum spinae
AI (np.array) – data points of the angulus inferior
DSEM (boolean) – set to True to use coordinate system guidelines DSEM Y pointing upward, X pointing laterally to the right and Z point backwards
- Returns:
local (dict[np.array]) – local coordinate system of the scapula
acs (np.array) – anatomical coordinate system of the scapula
origin (np.array) – origin of the local coordinate system of the scapula
- worklab.move.make_acs_th(IJ, PX, C7, T8, DSEM=False)[source]#
Make the anatomical coordinate system of the thorax based on ISB recommendations
Y is pointing upwards X is pointing to the front Z is pointing laterally to the right
- Parameters:
IJ (np.array) – data points of the incisura jugularis
PX (np.array) – data points of the processus xiphoideus
C7 (np.array) – data points of C7
T8 (np.array) – data points of T8
DSEM (boolean (default = False)) – set to True to use coordinate system guidelines DSEM Y pointing upward, X pointing laterally to the right and Z point backwards
- Returns:
local (dict[np.array]) – local coordinate system of the thorax
acs (np.array) – anatomical coordinate system of the thorax
origin (np.array) – origin of the local coordinate system of the thorax
- worklab.move.make_marker_dict(markers, marker_names=None)[source]#
Create a dictionary of nx3 arrays with name samples
- Parameters:
markers (np.array) – marker points
marker_names (list[strings]) – list of marker names
- Returns:
marker_dict – dictionary of nx3 markers with names
- Return type:
dict[np.array]
- worklab.move.marker_angles(v_1, v_2, deg=False)[source]#
Calculates n angles between two [n, 3] markers, two [1, 3] markers, or one [n, 3] and one [1, 3] marker.
- Parameters:
v_1 (np.array) – [n, 3] array or DataFrame for marker 1
v_2 (np.array) – [n, 3] array or DataFrame for marker 2
deg (bool) – return radians or degrees, default is radians
- Returns:
x – returns [n, 1] array with the angle for each sample or scalar value
- Return type:
np.array
- worklab.move.mirror(vector3d, axis='xyz')[source]#
Simply mirror one or multiple axes.
- Parameters:
vector3d (np.array) – vector to be mirrored, also works on dataframes
axis (str) – string with axes to be mirrored
- Returns:
vector3d – mirrored vector
- Return type:
np.array
- worklab.move.normalize(vector3d)[source]#
Normalizes [n, 3] marker data using a l2 norm. Works with [1, 3] and [n, 3] vectors, both arrays and dataframes.
- Parameters:
vector3d (np.array) – marker data to be normalized
- Returns:
vector3d – normalized marker data
- Return type:
np.array
- worklab.move.rotate(vector3d, angle, deg=False, axis='z')[source]#
Rotate a vector around a single given axis, specify rotation angle in radians or degrees.
- Parameters:
vector3d (np.array) – vector to be rotated, also works on dataframes, assumes [n, xyz] data
angle (float) – angle to rotate over
deg (bool) – True if angle is specified in degrees, False for radians
axis (str) – axis to rotate over, default = “z”
- Returns:
vector3d – rotated vector
- Return type:
np.array
- worklab.move.rotate_matrix(ang, axis='z')[source]#
Create a rotation matrix to rotate around x, y or z-axis
- Parameters:
ang (int) – angle of rotation
axis (string (default = 'z')) – axis of rotation, ‘x’, ‘y’ or ‘z’
- Returns:
rotate – rotation matrix
- Return type:
np.array
- worklab.move.scale(vector3d, x=1.0, y=1.0, z=1.0)[source]#
Scale a vector in different directions.
- Parameters:
vector3d (np.array) – array to be scaled, also works on dataframes, assumes [n, xyz] data
x (float) – x-axis scaling
y (float) – y-axis scaling
z (float) – z-axis scaling
- Returns:
vector3d – scaled array
- Return type:
np.array