12
\$\begingroup\$

I currently develop a VR environment for an existing (physically) large motion simulator platform. The user can sit on this motion platform and gets accelerated and tilted to induce the feeling of motion in a research car simulator environment. The Oculus Rift positional tracker is already mounted on the moving platform in front of the user, just as you would do on your PC.

The 3D engine I currently use is Unity 5.3. The rotation angles and linear accelerations of the platform are already fed into Unity. The results are however not what I aimed for. While the rotational compensation works well as long as we tilt the platform, once the angular velocity goes to zero, the tracker gets reset without being called by me or firing an event that it has done so. The linear acceleration compensation always jitters around the true resting point.

I already tried using the native Unity VR implementation and also the Oculus plugin. However, the sensor fusion is not available at this level. The Oculus forums have many topics about this problem, but I could not find any solutions.

Are there alternatives that one might try in order to use the Oculus on a moving platform?

What I would like to do ideally is to subtract the induced motion from the Oculus sensor data before getting processed further. I already considered patching e.g. LibOVR, but I could not find any helpful Sensor fusion related functions there, either.

\$\endgroup\$
7
  • \$\begingroup\$ Aren't your users getting ill with this VR+motion platform combination? \$\endgroup\$
    – Vaillancourt
    May 2, 2016 at 13:29
  • 5
    \$\begingroup\$ No, because we want them to exactly feel what they see. We are, in fact, evaluating all steps with psychology students. The single most influential factor to Simulator Sickness is a mismatch between what users see and what they feel, which is what we try to minimize in our setup and hence came here to ask. \$\endgroup\$ May 2, 2016 at 14:08
  • \$\begingroup\$ That's good to know! Good luck with your project :) \$\endgroup\$
    – Vaillancourt
    May 2, 2016 at 14:12
  • 1
    \$\begingroup\$ What if the sensor is mounted statically outside the platform? \$\endgroup\$
    – Skyblade
    Sep 28, 2016 at 14:51
  • 1
    \$\begingroup\$ If I understand, there's an accelerometer + gyro built into the headset for higher frequency adjustments (it doesn't rely solely on the camera) so when it's being accelerated by the platform it starts to freak out as there is discrepancy between the visual sensor and internal ones. If that's the case I don't see a solution other than rewriting low level drivers. I really like Skyblades idea (if that's an option), and I have heard multiple sensors are an option. \$\endgroup\$ Sep 28, 2016 at 19:27

1 Answer 1

1
\$\begingroup\$

I can't give a definitive answer, but my suggestion is that you experiment with headsets from different manufacturers (Microsoft Mixed Reality, VIVE, and potentially mobile-phone based ones), and see if the reset issue occurs with them as well. My hunch is that the reset issue is Oculus specific, and is not a trait of VR systems in general.

As an example of a successful project that is similar, see the paper CarVR: Enabling In-Car Virtual Reality Entertainment. It talks about using VR in a moving car.

Like what you have done, they have put an IMU in the platform (the car), and subtract that data from the rendering in Unity. It seems they were successful in their tests, and do not mention reset or other issues. In their research, they specifically used Samsung GearVR with a Samsung Galaxy S6 Edge as the VR device.

Another approach would be to use a VR system that relies on cameras to determine orientation. Theoretically, a camera-only system could fully manage all head motion and orientation if sufficiently powerful. Microsoft's Mixed Reality headsets do this to some extent. See this Microsoft page on tracking for some background on this. That said, I believe that Microsoft's system is a mix of camera tracking with integrated sensors for a hybrid approach.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .