Welcome to the Oculus Developer Forums!

Your participation on the forum is subject to the Oculus Code of Conduct.

In general, please be respectful and kind. If you violate the Oculus Code of Conduct, your access to the developer forums may be revoked at the discretion of Oculus staff.

DIY 6 DoF Optical Position Tracking - Now with added Leap!

zalozalo Posts: 135
zalo's Optical Positional Tracking


For the last few months I have been working on an Optical Positional tracking solution. I'm coming close to maximizing the functionality to cost ratio. It utilizes a single Playstation Eye mounted near the ceiling to track two lit LEDs on the Oculus Rift. With this information and the orientation information from the rift itself I can determine the full 6 DoF Position and Orientation of the rift in a large cone of view. It also does not matter which direction the rift is looking, and can be utilized to calibrate yaw instead of the magnetometer. The innovation (over similar systems like Johnny Chung Lee's) comes from the fact that I am using the Rift's IMU to fill in the missing orientation information that would normally be captured Optically (but would restrict the freedom of movement). I am using a PSEye and Processing to funnel the point tracking data to Unity at 125 Hz.

The whole system comes out to ~$35 (Tripod, Camera, LEDs).

What do you think?

-Update 7/19/13-
Positional Tracking and the Leap

At the beginning I calibrated where the leap was by placing the rift on top of it.

Comments

  • meanfigmeanfig Posts: 49
    Very cool. Money well spent I have to say might even try this DIY set up. :D
    I GOT'S TWO!
  • geekmastergeekmaster Posts: 2,866
    Nexus 6
    That is looking good, and certainly an inexpensive solution. The jitter looks small enough that you could probably get used to it. Could that jitter be filtered out with jerk (differential acceleration) clamping, or by discarding jerk-vector statistical outliers?
  • zalozalo Posts: 135
    It's true, you can kind of get used to it because the head tracking from the IMU is still super smooth, but it's not something I want my system to have.

    I'll try brighter wide-angle LEDs first and if that doesn't work then I'll look into filtering. Smooth jerking will probably fix the problem (as it often does in life ;) ).
  • geekmastergeekmaster Posts: 2,866
    Nexus 6
    zalo wrote:
    Smooth jerking will probably fix the problem (as it often does in life ;) ).
    In the real world, jerk filters are often called shock absorbers. We can do that in software too.
  • PatimPatamPatimPatam Posts: 293
    Art3mis
    Very good, i think this is probably the cheapest and easiest DIY to get positional tracking that we are going to get (even though i still want to explore the option of not relying on a camera above the user, which obviously complicates matters a bit).

    I would suggest try to apply a standard Kalman filter, it gave me some pretty good results with OpenCV.
  • Felix12gFelix12g Posts: 149
    Brain Burst
    That looks like a nice and cheap setup. What sort of distances do you need for the view on the camera?
    Code Monkey
  • zalozalo Posts: 135
    Felix12g wrote:
    What sort of distances do you need for the view on the camera?
    With bright enough LEDs, the detection distance can be very far. The ceiling-mount easily detected my rift on the floor. It also works up to about six inches from the camera (the jitter disappearing when it's right up next to it).

    Here is a diagram that illustrates the capture volume:



    Also, the RFC thread just inspired me to make another leap/rift mashup where the leap is used normally, but tracked in relation to the point of view to give you real virtual hands! I'll use an extra calibration step to calibrate where the leap is located by placing the rift on top of it.
  • zalozalo Posts: 135
    Positional Tracking and the Leap

    I'm combining my Oculus Rift Positional Tracking System with some basic leap motion input. Positional Tracking is the enabling technology that allows the Leap properly in VR (since you have to know where the HMD is relative to the leap). At the beginning of this video I calibrate the Leap's position by setting my rift down on top of it.
  • svensven Posts: 339
    Hiro Protagonist
    Excellent, I have bought some IR LEDs for optical tracking with a PS Eye camera myself and was going to play around with it. Are you using one of the existing software packages for optical tracking?
  • ArneOdlandArneOdland Posts: 49
    Brain Burst
    Outstanding work zalo in the area of position tracking. And just as important is the low cost!
  • zalozalo Posts: 135
    sven wrote:
    Excellent, I have bought some IR LEDs for optical tracking with a PS Eye camera myself and was going to play around with it. Are you using one of the existing software packages for optical tracking?
    Be careful, the PSEye comes with an IR filter.

    I'm using the Code Laboratories driver and Processing with some custom point tracking code. Here's the source for the PointTracker+Sender (requires codelabs stuff and OSCP5 for sending data to Unity): http://pastebin.com/5fJ8jy12 (the newer CL drivers might require a part to say CLEYE.GRAYSCALE_PROCESSING instead of what it says now).

    It shouldn't be too hard to delete the bits you don't need, but I should warn you that it's also terribly inefficient. It'll do a solid 125fps at 320x240 for a couple points which is good enough for me.
Sign In or Register to comment.