ValveSoftware / openvr

OpenVR SDK
http://steamvr.com
BSD 3-Clause "New" or "Revised" License
6.09k stars 1.28k forks source link

Skeletal Data not showing up in SteamVR #1304

Open fuag15 opened 4 years ago

fuag15 commented 4 years ago

I'm working on a Project Northstar driver for OpenVR and am having trouble verifying skeletal data. Afaik I've set up the bindings correctly and am submitting the right pose. I've set up the left and right skeleton to be bound to the left and right skeleton, and left and right pose to be bound to the left and right pose for Steam Home yet the avatar representation options do not show glove hands as an option like they do for Index / touch controllers.

I'm not aware of any other way of verifying skeletal data is correct aside from using Steam Home and switching your representation to the glove. I'll do my best to link relevant config below.

Driver input profile

Driver legacy input profile

Input registration in Driver

Input update in Driver

The rest of the positioning / input work as expected. I've verified I am sending the data in pose relative space and updating each frame with fresh data. I don't see any errors in the logs.

fuag15 commented 4 years ago

Got a quick follow up to this from today. I realized I hadn't verified the return codes from SteamVR since initially setting things up. I added a function to log an error if the return code wasn't as expected and verified that EVRInputError_None was being returned by both pose updates and skeletal registration.

However! In confirming it i did notice that blowing away my controller bindings and cache that when initially setting the skeletal components in bindings for steam home I get this error in the logs

Item /user/hand/right/input/skeleton/right in "skeleton" array missing path invalid device path for skeleton output
Item /user/hand/left/input/skeleton/left in "skeleton" array missing path invalid device path for skeleton output

However, on restarting steam and messing with the bindings again it no longer appears. and afaik I'm doing all registration according to existing samples in the indexcontroller driver settings / the documentation

fuag15 commented 4 years ago

I made a debug branch debug/skeletal_data_debug_options. If you have the beta versions of leap motion Orion this branch is setup to repro things without a Northstar or structure sensor. I hope this helps. Please let me know if I can help in another way, the skeletal issue is a blocker right now and I think all the leads available have been chased down.

fuag15 commented 4 years ago

Ha! Finally got it. A driver that submits skeletal pose data must supply at least one frame of data before it will be considered to be valid, if it does not do this before the application running initially requests skeletal data, it throws an error that it doesn't seem like it recovers from. Not sure if this is a bug or not. I assumed it would use some default skeletal transform relative to the controller if this was requested before a hand had been seen. Down to debugging the reletave skeletal positions. Not closing as I'm unsure if this behavior is a bug or intended. Either way it would be good to call out in the wiki.