none
Kinect v2.0 Preview SDK JointOrientation vs BoneOrientation

    Question

  • I was trying to understand the JointOrientation values for each joint in v2.0 preview SDK. I was wondering what is orientation being calculated against, as opposed to the BoneOrientation in 1.5-1.8 SDK where we had absolute and hierarchical options.

    If someone can provide some sample usage of JointOrientation that would be awesome sause.

    Thank you much in advance,

    Dhruv

    Adding reference: http://msdn.microsoft.com/en-us/library/microsoft.kinect.jointorientation.aspx
    Wednesday, July 30, 2014 3:42 PM

Answers

  • Joint Orientation is a per-joint yaw, pitch, and roll. Each quaternion is the absolute orientation of the parent bone. The basis of each joint is defined by:

    - Bone direction(Y green) - always matches the skeleton.
    - Normal(Z blue) - joint roll, perpendicular to the bone
    - Binormal(X orange) - perpendicular to the bone and normal


    Carmine Sirignano - MSFT

    Friday, August 01, 2014 7:22 PM
    Owner

All replies

  • Joint Orientation is a per-joint yaw, pitch, and roll. Each quaternion is the absolute orientation of the parent bone. The basis of each joint is defined by:

    - Bone direction(Y green) - always matches the skeleton.
    - Normal(Z blue) - joint roll, perpendicular to the bone
    - Binormal(X orange) - perpendicular to the bone and normal


    Carmine Sirignano - MSFT

    Friday, August 01, 2014 7:22 PM
    Owner
  • The parent bone of the joint Head is itself "Head" hence 0,0,0,0
    The parent bone of the joint SpineShoulder is the "neck"
    The parent bone of the joint ShoulderLeft is the "Left clavicle"
    The parent bone of the joint ElbowLeft is the "Left upper arm"
    The parent bone of the joint WristLeft is the "ForearmLeft"
    The parent bone of the joint HandLeft is the "Hand Bones Left"

    - Bone direction(Y green) - always matches the skeleton

    Is this what would normally be quaternion "roll" then?

    This would be the
    - Normal(Z blue) - joint roll, perpendicular to the bone

    Is this what would normally be quaternion "Yaw" then?

    and :
    - Binormal(X orange) - perpendicular to the bone and normal

    Is this what would normally be quaternion "Pitch" then?

    What is the value of the W mean?

    What are the units of these? Are they normalized? To what?


    Ken

    Monday, August 04, 2014 6:26 PM
  • Hey Ken,

    These quaternions are absolute, so you can take a mesh in local space, transform it by the quaternion, and it will match the exact orientation of the bone.  If you want relative orientation quaternion, you can multiply the absolute quaternion by the inverse of the parent joint's quaternion.

    As for the vectors listed in the picture - if you want to obtain these, you transform the corresponding unit vector by the quaternion.  For example if you want the binormal vector, transform the vector (1,0,0) by the quaternion.  If you want the bone direction, transform the vector (0,1,0) by the quaternion.

    The components of the quaternion cannot be used directly as yaw, pitch, and roll.  You'd have to compute that as a separate step.

    Casey


    Tuesday, August 12, 2014 10:16 PM
    Owner
  • Hi,

    what I understand is that using the kinect sdk v2.0, we can only get Hierarchical orientations?

    thanks in advance!

    Sohaib

    Wednesday, August 13, 2014 1:44 PM
  • So, the orientation quaternion is the orientation of the parent bone, though for end joints this quaternion is zero, so no "roll" angle for the end bones. The provided orientation is 3-degrees-of-freedom, but given 3D position information of all joints, this orientation can only provide 1-degree-of-freedom rotation i.e. around the bone axis. But of course, the next child joint position in 3D will also define this "roll" angle around the parent bone axis, so joint orientation gives no extra information except for the end bones -- and given that the end joints have no orientation data, it seems evident that this orientation data is 100% redundant given the position of each joint. This makes sense for orientations that are computed from position estimates. Well, perhaps one orientation is not redundant i.e. spine base, which may be the orientation of the entire body.


    • Edited by sault Sunday, August 17, 2014 11:13 PM
    Sunday, August 17, 2014 11:09 PM
  • Have you noticed any jumping? I am using code similar to the Face Basics demo for calculating the yaw, pitch and roll. However, degrees may jump from 0 to 10 within a couple of frames. When I stay still, these values still jump from 0 to 5, while there is no motion.
    Sunday, August 31, 2014 8:35 AM
  • Have you noticed any jumping? I am using code similar to the Face Basics demo for calculating the yaw, pitch and roll. However, degrees may jump from 0 to 10 within a couple of frames. When I stay still, these values still jump from 0 to 5, while there is no motion.
    I noticed the same behavior with the SDK Browser samples, too. Face rotation seems extremely sensitive.

    http://pterneas.com Kinect, mobile and web apps

    Wednesday, September 10, 2014 7:22 AM
  • Have you noticed any jumping? I am using code similar to the Face Basics demo for calculating the yaw, pitch and roll. However, degrees may jump from 0 to 10 within a couple of frames. When I stay still, these values still jump from 0 to 5, while there is no motion.

    I noticed the same behavior with the SDK Browser samples, too. Face rotation seems extremely sensitive.

    http://pterneas.com Kinect, mobile and web apps

    Please note that this is causing significant business impact to our project.  Will Microsoft Dev team continue to improve the accuracy of rotation for joint orientation?  Some feedback would help our planning.  Thanks, David
    Wednesday, September 10, 2014 4:29 PM
  • Have you noticed any jumping? I am using code similar to the Face Basics demo for calculating the yaw, pitch and roll. However, degrees may jump from 0 to 10 within a couple of frames. When I stay still, these values still jump from 0 to 5, while there is no motion.
    I',ve noticed the same behaviour. The worst offender in my case is the roll, which moves erratically with every change in the bone position.
    Wednesday, September 10, 2014 4:59 PM
  • Hi, the newest September SDK is still having problems with rotation.  Is there anyway to find out if this is known issues that will be addressed at some point?
    Wednesday, September 24, 2014 4:15 PM