WorldViz User Forum

WorldViz User Forum (
-   Vizard (
-   -   Optical Heading reverses (

dcnieho 08-30-2016 09:43 AM

Optical Heading reverses
I am using a DK2+optical heading setup with two markers rigidly mounted on the DK2 at 19.5 cm distance. The markers a tracked by a PPT-X system running on PPT studio 2008. It's basically the DK2+optical heading preset.

Sometimes, even when in the best part of my tracking area, but more frequently when near the edges where not all cameras have a good view, the view suddenly rotates by 180 degrees, like my head is facing down my back. I could probably detect this programmatically and rotate it right back, but what is the correct call for this? callign _swap() of the optical heading module is probably not a good idea.

Or better yet, how to avoid this?


Jeff 08-31-2016 07:43 AM

When this occurs, are the markers swapping in PPT Studio? We avoid this by using Marker ID markers but I'll see if there are other suggestions.

dcnieho 08-31-2016 08:37 AM

Hi Jeff,

Its a bit hard to say, as when it reverses i have to pull off the hmd and run to the PPT computer which shows the history of the marker positions. But when i do so, i see that each marker's path remains smooth (no sudden jumps), so i guess it is not a changing of marker ID. Is it possible to assign specific IDs to specific markers? I am not sure what Marker ID markers are.

Perhaps a settable 180 deg head rotation is all that i need to do, let me try that as a stopgap measure.

All the best,

dcnieho 08-31-2016 09:00 AM

Hi Jeff,

It appears that there indeed is an easy stopgap solution. when i do headLink.postEuler([180,0,0],target=viz.LINK_ORI_OP) does the trick.
headLink = vizconnect.getTracker('head_tracker').getLink()

where 'head_tracker' is the OpticalHeading module.

A possibly relevant thought. I also have the following operator on the headLink:
mirrorRotationOperator = headLink.postEuler([0,0,0], target=viz.LINK_FULL_OP)

In my setup, participants walk from one side of the room to the other. I then call mirrorRotationOperator.setEuler([180,0,0]) to rotate the room so that they don't have to walk back to the starting position. This flipping of orientation by mirrorRotationOperator happens much more often than the sudden reversals of head orientation. Also, the head orientation reversal can happen at any time. Thought I'd mention it anyway in case its relevant.


dcnieho 09-01-2016 05:31 AM

hi Jeff,

I have now confirmed that the markers do not seem to swap IDs (at least, if the 'ppt_left' and 'ppt_right' always refer to the same physical marker).
I had the following code run during a run of my experiment:

def debugVizConnectOpticalHeading():
        import vizconnect, viztask
        # collect raw position and orientation info, as well as merged result
        while True:
                samp = [d.time] + vizconnect.getRawTracker('ppt_left').getPosition() + vizconnect.getRawTracker('ppt_right').getPosition() + vizconnect.getRawTracker('dk2').getEuler() + vizconnect.getRawTracker('head_tracker').getPosition() + vizconnect.getRawTracker('head_tracker').getEuler()
                # print samp to cmd
                d = yield viztask.waitDraw()

Looking at the results, when my head turned, all that changed was the yaw, not the position of the ppt_left and ppt_right or anything else like that. I have sent a plot of the data and the recorded data to your email.

All the best,

All times are GMT -7. The time now is 11:08 AM.

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