Making Oculus Rift a little better



    Hello, Habr!

    More than a year has passed since the appearance of the first production samples of Oculus DK1. In this short period of time, tens of thousands of developers around the world have already touched the world of virtual reality, including from Russia ( one , two , three ).

    In March, Oculus DK2 was announced, which has a number of improvements, of which the updated screen and support for tracking the absolute position of the head are especially significant. And if everything is more or less clear with the first one - increasing the resolution reduces the effect of image graininess, which is especially noticeable in the first generation of the device, and using an OLED screen instead of an LCD improves the matrix response speed, then on the second point (namely, its importance and how we have added support for this feature in DK1) I would like to dwell more ...

    Most people begin to understand the importance of tracking the absolute position in helmets of virtual reality only by trying them on themselves: without it, after several minutes the immersion effect begins to be lost, since linear movement of the head to the sides does not completely change the picture of the virtual world. And even if for a second we imagine that the head does not perform linear movements, the need to monitor the spatial position of the helmet for the correct rendering of virtual reality still remains, since the head is rotated around the center of the neck (when viewed from above), and not around the bridge of the nose. The animation below demonstrates this problem - with the rotation of the head, the eyes move. Plus, the screen itself is located at a certain distance from the user's eyes, which is an additional problem for developers.



    In addition to everything, helmets whose work is based solely on a bunch of gyroscope + accelerometer + (optionally) magnetometer (like Oculus DK1) accumulate an error over time and the orientation of the entire system shifts over time. Support for absolute tracking is a solution to this problem.

    In Oculus DK2, this problem was solved with the help of an external camera operating at a frequency of about 60 frames per second (at least 16-17 milliseconds of delay in reaction) and tracking infrared LEDs integrated into the helmet body. Is this frequency sufficient for comfortable use of the helmet - the question remains open. In any case, an increase in tracking frequency would decrease the delay time and, as a result, would provide a greater immersion in virtual reality.

    The task of quickly and effectively tracking the absolute position of the virtual reality helmet seemed interesting to me and my colleagues, and therefore, as an experiment, it was decided to upgrade DK1, ensuring the highest possible speed of the entire tracking system. As a result, it was possible to achieve a speed of more than 130 frames per second with almost zero CPU load. A high-speed DUO 3D stereo camera was used with built-in powerful IR LEDs synchronized with the matrix shutters.



    Reflective markers are glued to the helmet itself (visible on the very first photo), which are detected by the camera. Due to the fact that the tags are located not only on the body of the device, but also on the straps, tracking is stable even when the user is looking in the opposite direction from the camera. A wide viewing angle allows you not to lose your helmet with a strong head deviation away from the camera, and the features of the highlighter markers make it possible to track them even in an environment that is aggressive in terms of external IR light.

    All of the above can be observed in the following video:



    I will be glad to hear comments, suggestions, comments ... Thank you for your attention!

    Also popular now: