Jump to content

VIVE Trackers: Incorrect Rotation Values from OpenVR SDK when Using 2 Trackers & Controller


Recommended Posts

Hello folks,

I am running into a problem interfacing with the OpenVR SDK when using two trackers with one controller. Specifically, the IVRCompositor::WaitGetPoses( ) function will sometimes return incorrectly transformed matrices to my C++ application. I was wondering if anyone has experienced a problem like this before, or if there is a known solution.

The scenario: I place two VIVE trackers about 1 foot apart from one another, facing the same direction. I would expected that the matrices of each tracker (stored in TrackedDevicePose_t -> mDeviceToAbsoluteTracking) will be very similar. If I power up in this order - Tracker 1 On, Tracker 2 On, Controller On - the matrices of both trackers are indeed almost identical.

However, if I power on in a different order - Controller On, Tracker 1 On, Tracker 2 On - The matrices of one of the trackers will be rotated exactly 90 degrees from what I would expect. The other tracker still retains the correct values/orientation as before. So now, even though both physical trackers are sitting in similar positions and orientations in the real world, their matrices returned by the VIVE SDK's WaitGetPoses( ) are different.

In the same session, I can power on/off the controllers in different orders to change whether I get the correct or incorrect matrix values from the tracker.


I am certain this is not a problem with my tracked device indices, nor a problem with overflowing array bounds, because the XYZ Position of the "Bad" Tracker is always correct - it is only the rotation of the tracker about that position in space that changes. So at least one value in every row in the matrix is what I expect.


The correct Tracker[index == 3]  4x4 matrix (left) vs. the incorrect Tracker[index == 3]  matrix (right)

[ -0.99,  0.00, -0.17, -0.20 ]                       [ 0.99,  -0.05, -0.12, -0.20 ]

[ 0.00,  1.00,  0.00,  0.72  ]                       [ -0.01,  0.00, -0.990.72  ]

[ 0.01,  0.00, -0.99,  1.38  ]                       [ 0.05,  0.99,  0.00,  1.38  ]

[ 0.00,  0.00,  0.00,  0.00  ]                       [ 0.00,  0.00,  0.00,  0.00  ]


To specify the configuration I am using, my OpenVR SDK is version 1.0.10, my VIVE trackers are the newer model with the blue triangle, and my base stations are the older model.


If anyone knows of a fix, workaround, or simply something to try, I would be very grateful for the help! Right now I am thoroughly stumped!






Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...