I’ve been involved in some arguments about the inner workings of the Oculus Rift’s and HTC/Valve Vive’s tracking systems recently, and while I don’t want to get into any of that right now, I just did a little experiment.
The tracking update rate of the Oculus Rift DK2, meaning the rate at which Oculus’ tracking driver sends different position/orientation estimates to VR applications, is 1000 Hz. However, the time between updates is 2ms, meaning that the driver updates the position/orientation, and then updates it again immediately afterwards, 500 times per second.
This is not surprising at all, given my earlier observation that the DK2 samples its internal IMU at a rate of 1000 Hz, and sends data packets containing 2 IMU samples each to the host at a rate of 500 Hz. The tracking driver is then kind enough to process these samples individually, and pass updated tracking data to applications after it’s done processing each one. That second part is maybe a bit superfluous, but I’ll take it.
Here is a (very short excerpt of a) dump from the test application I wrote:
0.00199484: -0.0697729, -0.109664, -0.458555 6.645e-06 : -0.0698003, -0.110708, -0.458532 0.00199313: -0.069828 , -0.111758, -0.45851 6.012e-06 : -0.0698561, -0.112813, -0.458488 0.00200075: -0.0698847, -0.113875, -0.458466 6.649e-06 : -0.0699138, -0.114943, -0.458445 0.0019885 : -0.0699434, -0.116022, -0.458427 5.915e-06 : -0.0699734, -0.117106, -0.45841 0.0020142 : -0.070004 , -0.118196, -0.458393 5.791e-06 : -0.0700351, -0.119291, -0.458377 0.00199589: -0.0700668, -0.120392, -0.458361 6.719e-06 : -0.070099 , -0.121499, -0.458345 0.00197487: -0.0701317, -0.12261 , -0.45833 6.13e-06 : -0.0701651, -0.123727, -0.458314 0.00301248: -0.0701991, -0.124849, -0.458299 5.956e-06 : -0.0702338, -0.125975, -0.458284 0.00099399: -0.0702693, -0.127107, -0.458269 5.971e-06 : -0.0703054, -0.128243, -0.458253 0.0019938 : -0.0703423, -0.129384, -0.458238 5.938e-06 : -0.0703799, -0.130529, -0.458223 0.00200243: -0.0704184, -0.131679, -0.458207 7.434e-06 : -0.0704576, -0.132833, -0.458191 0.0019831 : -0.0704966, -0.133994, -0.458179 5.957e-06 : -0.0705364, -0.135159, -0.458166 0.00199577: -0.0705771, -0.136328, -0.458154 5.974e-06 : -0.0706185, -0.137501, -0.458141
The first column is the time interval between each row and the previous row, in seconds. The second to fourth rows are the reported (x, y, z) position of the headset.
I hope this puts the myth to rest that the DK2 only updates its tracking data when it receives a new frame from the tracking camera, which is 60 times per second, and confirms that the DK2’s tracking is based on dead reckoning with drift correction. Now, while it is possible that the commercial version of the Rift does things differently, I don’t see a reason why it should.
PS: If you look closely, you’ll notice an outlier in rows 15 and 17: the first interval is 3ms, and the second interval is only 1ms. One sample missed the 1000 Hz sample clock, and was delivered on the next update.
That’s fascinating info. Given that the camera rate is 60hz, does that mean the minimum latency is still 16ms? Not entirely sure what happens when a 2ms signal is periodically corrected with a 16ms one. IE, when the frame correction comes in its potentially 16ms behind no?
I talk about this in detail in the reddit thread. The effective latency after sensor fusion is 2ms worst-case, 1ms average case. In short, tracking is driven by the IMUs, and the camera is used to correct accumulated drift after the fact.
Thanks, reading it all!
Also are you planning to blog about the vive and oculus tracking system details further? Pretty curious what type of third party diy solutions may emerge for mobile solutions as a result.
Does any of the HMDs that are promised to be released in the near future do some post-processing on the frames in the device itself to compensate for the lag involved in the roundtrip?
That’s what I would love to know. Given that so much is publicly known about tracking systems (regular 60fps webcam + IMU + extended Kalman filter), why are there no cheap open-source, third party solutions for delivering 6dof data to mobile platforms ?
I understand part of the ultimate goal of mobile, is untethered, but I for one, would jump at a solution of a single beacon (IR cam or LEDs), broadcasting low latency BLE position data to cardboard, or gear vr headset.
@okreylos Why isn’t that a thing? And if not, why aren’t you launching a kickstarter for it? 😉
Pingback: Lighthouse tracking examined | Doc-Ok.org
Would you think an external sync generator could gen lock the camera tracker/hmd frames to 60 fps given adapters and removing the included sync hub? I’d like to use a bmd setup for virtual production and think a setup could work. Thank you for your time.