Local Joint Coordinate & Rotation Matrix problem

Hi Guys,
I currently use c# to extract skeleton-relevant data from D435. I saw the spatial orientation is stored as a 3x3 rotation matrix. And all 9 entries of matrix are stored in an array. Does anyone know the sequence by which the entries stored? Like Matrix[2] is m12 or m21?

For another question, I really don’t know what’s the orientation of local XYZ coordinate when the subject is in T-pose. I do need to know coordinate orientation in T-pose but the SDK didn’t provide any info. The local coordinates are like this:



In the coordinate system of a depth camera, local X would have coordinates (orient.matrix[0], orient.matrix[3], orient.matrix[6]), local Y would have coordinates (orient.matrix[1], orient.matrix[4], orient.matrix[7]), and local Z would have coordinates (orient.matrix[2], orient.matrix[5], orient.matrix[8]).

As for the question about the T-Pose, please take a look at this video (red vector is X, green is Y, blue is Z): https://www.dropbox.com/s/3boo4tr2a1e7umw/Nuitrack_Joint_Orientation.mp4?dl=0

1 Like

I do appreciate it!!!

According to your video, the X,Y,Z axis of each joint frame seems to follow the left-hand rule (Z != X cross Y). Does nuitrack sdk decide to use left-hand rule instead of the standard right-hand rule?

By default, the origin of coordinates coincides with the position of the depth sensor (given that registration of depth frames and color frames is turned off). Coordinate axes are directed as shown in the image. This system is used by default in the OpenNI framework.

How to filter abnormal data of SkeletonTracker of nuitrack d435 ?

abnormal data has already change to Euler angles.eg(1:-4.13547e-07)(head:Euler angles)

enum JointType
JOINT_NONE = 0, ///< Reserved joint (unused).

JOINT_HEAD				= 1, ///< Head
JOINT_NECK				= 2, ///< Neck
JOINT_TORSO				= 3, ///< Torso
JOINT_WAIST				= 4, ///< Waist

JOINT_LEFT_COLLAR		= 5, ///< Left collar
JOINT_LEFT_SHOULDER		= 6, ///< Left shoulder
JOINT_LEFT_ELBOW		= 7, ///< Left elbow
JOINT_LEFT_WRIST		= 8, ///< Left wrist
JOINT_LEFT_HAND			= 9, ///< Left hand
JOINT_LEFT_FINGERTIP	= 10, ///< Left fingertip (<b>not used in the current version</b>).

JOINT_RIGHT_COLLAR		= 11, ///< Right collar
JOINT_RIGHT_SHOULDER	= 12, ///< Right shoulder
JOINT_RIGHT_ELBOW		= 13, ///< Right elbow
JOINT_RIGHT_WRIST		= 14, ///< Right wrist
JOINT_RIGHT_HAND		= 15, ///< Right hand
JOINT_RIGHT_FINGERTIP	= 16, ///< Right fingertip (<b>not used in the current version</b>).

JOINT_LEFT_HIP			= 17, ///< Left hip
JOINT_LEFT_KNEE			= 18, ///< Left knee
JOINT_LEFT_ANKLE		= 19, ///< Left ankle
JOINT_LEFT_FOOT			= 20, ///< Left foot (<b>not used in the current version</b>).

JOINT_RIGHT_HIP			= 21, ///< Right hip
JOINT_RIGHT_KNEE		= 22, ///< Right knee
JOINT_RIGHT_ANKLE		= 23, ///< Right ankle
JOINT_RIGHT_FOOT		= 24 ///< Right foot (<b>not used in the current version</b>).