Kinematics (.move)
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