WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   skeleton height from FAAST? (https://forum.worldviz.com/showthread.php?t=4988)

fivel_lab 03-19-2014 01:14 PM

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!

Jeff 03-20-2014 01:16 AM

If you don't modify the pitch, how much error is there in the height value when you run the following?

Code:

import viz
import vizact
viz.go()

SENSOR_HEIGHT = 0.71
HEAD = 0
myHead = vrpn.addTracker( 'Tracker0@localhost', HEAD)

def printHeight():
        print myHead.getPosition()[1] + SENSOR_HEIGHT
       
vizact.ontimer(1,printHeight)


fivel_lab 03-21-2014 10:07 AM

Thanks so much for getting back to us.

I had to tweak the code you sent a bit by adding:
Code:

vrpn        = viz.add('vrpn7.dle')
(pretty sure that doesn't make a difference for our problem but best to be detailed).

Also, I did get the following warning on startup of the script:

check_vrpn_cookie(): VRPN Note: minor version number doesn't match: (prefer 'vrpn: ver. 07.30', got 'vrpn: ver. 07.31 0'). This is not normally a problem.

(Again, not sure if this makes a difference).

OK, so when I run the script:

- the error varies as a function of how far the person is from the kinect
- when standing close (~1.9m), the error is approximately .80 (varies within a cm second-to-second)
- when standing far (~2.9m), the error is approximately .89 (also varies +/- 1 cm)



...?

Thanks again!

Jeff 03-23-2014 08:37 PM

What is the version number of FAAST that you are using?

I'm wondering if all the other tracked objects are off by the same amount. If so, you could do an initial calibration where the user's highest tracked object (head) and the lowest tracked object (foot) are visible to FAAST, and then figure out the difference. That should provide a loose approximation of the user's height. I'm not sure whether or not this would be accurate enough for your application.

fivel_lab 03-24-2014 08:56 AM

Thanks again, Jeff.

We're currently using v1.2 but I've tried all of the above with v1.0 and get the same problem.

I'm not sure whether your method will work but we will try it out.

Stupid question: your suggestion implies that both the head and foot needs to be visible to (tracked by) FAAST -- am I reading that correctly? We were assuming it didn't matter which points were visible to FAAST because the error was present whether or not the feet were being tracked. Also, if this is the way it works, would it help to set FAAST to track only the upper body?

Jeff 03-28-2014 01:01 AM

Quote:

your suggestion implies that both the head and foot needs to be visible to (tracked by) FAAST -- am I reading that correctly?
I meant this for the initial calibration to calculate the user's height.

If you set FAAST to track just the upper body are you getting different readings for the head height?


All times are GMT -7. The time now is 12:17 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, vBulletin Solutions, Inc.
Copyright 2002-2018 WorldViz LLC