Forum Discussion
alexcolgan
12 years agoProtege
Troubleshooting guide for Leap Motion + VR
Running into trouble with Leap Motion VR tracking? This quick guide will show you how to check your hardware setup and environment: http://blog.leapmotion.com/troubleshooting-guide-vr-tracking/
Highlights for the TL;DR folks:
Check for throttling by opening the Diagnostic Visualizer. (Right-click on the Leap Motion taskbar icon and launch “Visualizer.” Once the program launches, hit H and L to show additional diagnostic data.) A healthy setup will display device and data framerates running ~120 FPS and processing time ranging between 3-7 milliseconds. If your setup isn't running that well... read the post for more ;)
You can also check for background interference with the VR Intro app. You'll find that ambient lighting is much less of a problem than background interference caused by the Leap LEDs reflecting off nearby objects. For quick diagnosis, try the double-distance test:
If these approaches don't resolve the problem, email us at developers@leapmotion.com, post in this thread, PM me... whatever works best for you :D
Highlights for the TL;DR folks:
Check for throttling by opening the Diagnostic Visualizer. (Right-click on the Leap Motion taskbar icon and launch “Visualizer.” Once the program launches, hit H and L to show additional diagnostic data.) A healthy setup will display device and data framerates running ~120 FPS and processing time ranging between 3-7 milliseconds. If your setup isn't running that well... read the post for more ;)
You can also check for background interference with the VR Intro app. You'll find that ambient lighting is much less of a problem than background interference caused by the Leap LEDs reflecting off nearby objects. For quick diagnosis, try the double-distance test:
If these approaches don't resolve the problem, email us at developers@leapmotion.com, post in this thread, PM me... whatever works best for you :D2 Replies
- MikeFTrusteeThanks for these tips, good to know!
At this point, are there still issues with the head mount tracking compared to the desktop tracking?
In general i'm noticing more cases of the wrong hand being instantiated and general tracking stability when using the head mount option - DanBHonored GuestMy laptop handles the Leap by itself okay, but when used simultaneously with the Rift & Rift camera the USB 2.0 ports seem to struggle a bit so I have to switch to low resource mode to keep latency down. Plugging the Leap into the DK2 port is possibly one of my faster USB ports perhaps due to the arrangement of connectors. I have the Rift USB & Rift HDMI cables in one side of my laptop (as it would be inconvenient to have these cables on opposite sides of laptop) and everything else in the 3 ports on other side.
Does the Leap Motion low resource mode only affect resolution, or does it also reduce the amount/accuracy of processing that is done? My CPU still has most cores sitting idle for now, so could probably cope with reduced USB bandwidth but normal CPU usage if that were possible.
One problem I have is that if I have the Leap unplugged from a USB port when I start my program I get a single frame shortly after starting where Leap::Controller::frame() takes a long time (in the region of 200-800 ms) to return and the rest of the time it returns immediately (0 ms). If I have it plugged in there is sometimes one frame that takes a little longer near the start to return (in the region of 20-100 ms) and the rest of the frames take 0-4 ms to return. I tried profiling it to locate what was causing it but since it was only one frame & I couldn't start/stop the profiler that easily I'm not completely sure I located the cause, but a possible call stack that showed up in the profiler was:WaitForSingleObjectEx (0.72s)
Leap::Config::setStringCString (0.72s)
Leap::Config::setStringCString (0.72s)
Leap::InteractionBox::toCString (0.72s)
Leap::Controller::isGestureEnabled (0.72s)
Leap::Controller::frame (0.72s)
RenderThread
0.72 seconds (720ms) was about the time the render thread hung for while waiting for frame = controller.frame() to return. I haven't enabled any gesture tracking & the same call stack shows up as taking about 6% of thread time during normal operation so I'm not sure whether it is accurate or not. Also, is controller.frame() meant to return almost instantly (just grabbing frames that background threads have prepared) or is varying between 0-4 ms normal?
Another thing that could be useful is a tutorial showing how to use a mesh to un-distort the Leap Motion camera images rather than using pixel shaders so they can be displayed easily on the Rift. Would it be better to distort the vertex positions of a mesh or the texture coordinates if it were to be done this way?
A final question about frame histories. If you were to callFrame frame = controller.frame();
Frame previous = controller.frame(1);
Is it possible that a new frame (or multiple frames) has arrived in the background (and is now frame 0) so that frame and previous now point to the same frame?
Leap Motion & DK2 has let me know I really need to tidy my desk up, because the Leap Motion keeps trying to identify the mess (such as tangled cables/bits of paper) as hands. Or maybe I can just sit further from the desk and delay tidying till another day :)
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 3 months ago