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!






Share this post

Link to post
Share on other sites

@SpaceNoid78 Sorry for the late reply.

Could you provide more details on your project?

Which version of Unity/SteamVR/SteamVR Plugin?

By the way, where did you get the OpenVR SDK 1.0.10?

Is it this one you are referring to?

Could you update your OpenVR SDK to the latest version and see if the issue still existed? Thanks!

Share this post

Link to post
Share on other sites

Please sign in to comment

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

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...