Jump to content

Vive Trackers orientation & pogo pins in Untiy


Recommended Posts

Hello everyone,

I'm writing this post to share the recent issues I ran into past couple of weeks and the conclusions my companie and I made to fix them. First I'd like to specify that we work on a VR solution implying the use of 3 trackers (2 of them with pogopin inputs) and a leap motion on Unity. We recently ran into a series of problems involving :

- First we couldn't connect some trackers in our App, even tho they where connected just fine in SteamVR.

- After i fixed that, we had "random" troubles with the orientation of trackers (apparently a (90, 0, 0) rotation).

We read many posts issuing the same problem but I figured out an information I never found on the forums so I thought might as well share it. Here's a sample of the posts we read : 



So here the good stuff :

As you can see there is a problem currently with the orientation of trackers marked as "Held in Hand". It is not a problem if you don't seek to retrieve inputs from pogo pins as you can simply mark them with any other roles and never see the issue again. In the same way we read that supposedly you can retrieve pogopin inputs from any roles since SteamVR 1.16.8 but it's not working for us (we are currently on SteamVR 1.16.10). This was, more than a fix, a kind of work around in order not to run into orientation problems. But let's face it, it's not a real solid fix (small reminder, some people actually use HTC Vive and trackers for serious business reasons, and our work and income can be directly impacted if SteamVR ain't working). 

But it appears that in our app we had this little code line that checked if the connected device was a tracker :

if(deviceClass == ETrackedDeviceClass.GenericTracker)

There's the spicy stuff : it is this line that caused our first issue, the connecting trackers problem. And the problem appeared ONLY when tracker was set to "held in hand". You see where i'm going ? It appears, for some reason, that SteamVR tells to Unity that the last connected device is a normal controller. Wich should not be a problem since normal controllers and tracker pogopins share the same input identification so your custom controller's buttons should work as intended. But you know what trackers and controllers do NOT share ? Yup, orientation in virtual world. 

In conclusion we think, and i can't accentuate this enough since it's a random problem so you can never be sure if you fixed it or if you are just extremely lucky, that if your tracker is set as "Held in hand" SteamVR will tell Unity that you just connected a normal controller (even tho in the Steam VR window you see a tracker) so Unity will display it with the orientation of a controller wich is different from the one of a tracker (why ? nobody knows, they could very well share the orientation as well but you know...). 

So our fix for now is this :

if(deviceClass == ETrackedDeviceClass.GenericTracker || deviceClass == ETrackedDeviceClass.Controller)
	if(deviceClass == ETrackedDeviceClass.Controller)
		//Change tracked object orientation with a (90, 0, 0) rotation 

In hope that will help some of you, and that Vive developpers can maybe fix that problem any time soon.



Edited by Syko
Link to comment
Share on other sites

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...