Code Monkey home page Code Monkey logo

openvr-customhmd's Introduction

openvr-customhmd

DIY attempt for building OpenVR compatible HMD and controllers, and drivers (Windows only).

I started my VR experience with a custom built HMD by using parts of a disassembled Sony HMZ-T2, an Arduino based Head Tracker, and OpenTrack software. But only few games were supporting FreeTrack-like protocols. So I decided to write a complete OpenVR driver which hopefully will support newer games, and I hope I will be able to play some VR games with friends who cannot afford ridiculously expensive hardware.

Some features:

  • Tracking and controller hardware is based on STM32F103.
  • Supporting fake framepacked 3D signal for HMD's with two monitors or 3D TV's. (double horizontal resolution ๐Ÿ‘)
  • IVRVirtualDisplay supporting driver for Android phone based orientation tracking and display. (in progress...)
  • Working IVRDirectModeComponent implementation, just for reference.
  • Lighthouse-like positional tracking, (or ultrasound TimeOfFlight based, still experimenting, also in progress...)
  • Expose any USB WebCam (YUY, YUV or RGB) to OpenVR (for Room-View or other camera functions).
  • Autodetect monitor position and size in Extended mode for placing the HeadSet Window.
  • Minimal electronics in trackers/controllers. (eg. no button debouncing filters, all done in code. 72Mhz can handle it.)
  • Controllers communicate wireless with the HeadSet, which is connected via USB cable to the computer.
  • PSVR support
  • ...

Dependencies:

  • ffmpeg from NuGet, for compiling the driver AMD AMF libraries.
  • dotNet 4.6.2, for the HMD monitor program.
  • LibUsbDotNet
  • http://zadig.akeo.ie/ Zadig to install usb driver for handling PSVR
  • VC2015 Runtime, for using the driver

ToDo:

  • Positional tracking. (Already done some experiments with 2 DIY laser lighthouses, servo and stepper. Servo is too noisy and slow, stepper needs extra controllers. cheapest solution may be tracking by ultrasound...)
  • Fix/flip quaternion from RotationVector sensor for Android tracking. Using GoogleVR
  • Hardware encoding instead of ffmpeg?
  • Use OpenGL mesh for distortion correction on Android display?
  • Remove magnetic sensor input from trackers.
  • Find a friendlier way to calibrate tracker sensors.
  • Lower latency in encoding -> network -> decoding -> display pipeline. (1920x1080@60 FPS encoding already less than 10 ms, no framedrops on network, MediaCodec decoding @60 FPS, but seems a bit delayed)
  • ...

After long resisting to buy one of the expensive but ready VR solutions, I finally bought a Vive (for twice of the actual price ๐Ÿ˜ญ ). Unlike my older Sony headset's and unlike both my phones screens (G5, Z3), the ones in this expensive HMD are crap; the screen-door effect is annoying, the lenses generate too much flare when there are bright areas in corners etc. Text is unreadable even when doing 2x oversampling. Seems positional tracking is the only thing I paid for ๐Ÿ˜ . Shame on me, for buying such an immature product for such a price. I'm going to sacrifice some FOV, FPS, accuracy and latency for readability, and use my phone as output display for playing games like Elite Dangerous or DCS, which are uncomfortable to play on the Vive because it gives me eye pains. I used to play ED for hours with the orientation-only DIY'ed Sony ...

openvr-customhmd's People

Contributors

sencercoltu avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.