View Single Post
  #1  
Old 03-19-2014, 01:14 PM
fivel_lab fivel_lab is offline
Member
 
Join Date: Mar 2011
Posts: 36
skeleton height from FAAST?

Hi there,
We're having a bit of difficulty figuring out exactly how the Kinect measures the y coordinates (in real world units) of the tracked points on the skeleton it is streaming via FAAST. For example, we want the height of the head in the real world to be the height of the head in vizard, so we figure we just need:

Code:
HEAD = 0
myHead = vrpn.addTracker( 'Tracker0@localhost', HEAD)
height = myHead.getPosition(ABS_GLOBAL)[1] + SENSOR_HEIGHT
(the head y position is measured relative to SENSOR_HEIGHT, correct?)

But we're probably doing something wrong because the following odd behavior occurs when using this technique:

1) If we change the pitch of the Kinect (through FAAST, prior to running the vizard script), we obtain different values for "height" for different pitches, even though we're using the same person for the skeleton
2) When SENSOR_HEIGHT is set to its actual, measured value (in our case .71m), "height" is incorrect relative to measurements made in the real world.
3) If we arbitrarily change SENSOR_HEIGHT to get "height" to the correct value (which we know cannot be correct!), it works for some skeletons but not others (i.e., SENSOR_HEIGHT has to be changed arbitrarily for each new skeleton).

It's crucial for us that the height of the virtual head is the same as the height of the actual head because our application depends on taking a particular perspective on the scene. We thought this would do the trick (we're using an Oculus):

Code:
hmd = oculus.Rift(window=viz.MainWindow)
head6DoFTracker = viz.mergeLinkable(myHead, hmd.getSensor())
headLink = viz.link(head6DoFTracker, viz.MainView, srcFlag=viz.ABS_GLOBAL)

height = viz.MainView.getPosition(viz.ABS_GLOBAL)[1]
But this doesn't seem to give us the correct value for height.

Any ideas? Thanks!
Reply With Quote