lonetech / nolo-osvr

OSVR plugin for LYRobotix Nolo VR tracker system
Apache License 2.0
12 stars 8 forks source link

SteamVR Integration? #8

Open Conzar opened 7 years ago

Conzar commented 7 years ago

I just found this code by Nolo for the osvr-steamvr plugin. I just was wondering if you have seen it and think it might be helpful. https://github.com/NOLOVR/NOLO-Others/tree/master/NOLO_OSVR_SteamvrDriver

Is this working already with SteamVR?

lonetech commented 7 years ago

I have not tried to connect it to SteamVR. The linked code seems to be a version of the SteamVR plugin for acting as an OSVR client, which is one of the layers needed to use OSVR drivers such as nolo-osvr with SteamVR. The upstream plugin would be https://github.com/OSVR/SteamVR-OSVR - someone should check if the two handle tracked devices differently. There shouldn't be a need for the SteamVR-OSVR translator (which is an OSVR client and OpenVR plugin/driver) to have Nolo specifics, except maybe for the vibration which OSVR doesn't seem to have a protocol for.

Conzar commented 7 years ago

I have contacted one of the OSVR developers and here is what he had to say in regards to steamvr:

The SteamVR-OSVR plugin just uses the /me/head alias for the position and rotation of the HMD. So as long as you point /me/head to the right Nolo tracker, then it’ll Just Work™

If you want to disable the HDK’s IMU input entirely, you can rename the com_osvr_Multiserver plugin to com_osvr_Multiserver.manualload (with the .dll or .so extension as appropriate for your OS). This will tell OSVR not to load that plugin automatically. The /me/head stuff is done in the osvr_server_config.json file. (Look at the bottom under aliases.)

lonetech commented 7 years ago

Well, that's a tiny bit of the story. /me/head is one of the names provided by nolo-osvr, pointing to the Headset Marker. Headsets like HDK2 will also provide other data sources for it, like the camera tracking and builtin gyros, and I think the multiserver plugin would be what merges those. For SteamVR you likely want the hands too, similar to how you'd use a Razer Hydra; nolo-osvr provides names /me/hands/{left,right} based on those I found in the Vive driver descriptors. You'll also still need some offset for where your headset marker is actually mounted. Currently the nolo-osvr plugin doesn't have any configuration of its own, but an OSVR configuration can still remap them.

Conzar commented 7 years ago

I was able to get the headset tracker working in SteamVR. Does this driver currently support the controllers? If so, how do I sync those?

lonetech commented 7 years ago

That's great! The nolo-osvr plugin does support the controllers. Associating them with the base station and headset marker should be a one time thing (set up with the buttons on them, instructions at https://www.nolovr.com/pairing-en ). They show up in the OSVR tracker viewer, so I'm pretty sure I got the names right too. So getting them to work in SteamVR also should be a question of configuring SteamVR-OSVR, possibly followed by adjusting the edge positions for the trackpad.

https://github.com/betavr/SteamVR-OSVR/wiki has some instructions regarding a similar setup using Hydra controllers with SteamVR through OSVR. While that's been replaced by a native OpenVR driver, the OSVR method would still apply for us.

Conzar commented 7 years ago

I was able to pair the controllers so that the lights indicate green. However, the controllers still do not register in SteamVR. I looked through the source a bit from the hydra, the only thing I found that I thought might be interesting was the steamvr settings. Its the following. However, I don't think this is applicable.

{
   "collisionBounds" : {
      "CollisionBoundsGroundPerimeterOn" : false,
      "CollisionBoundsStyle" : 0
   },
   "hydra" : {
      //"enableIMUEmulationAtStart" : true,             // enable imu emulation at start
      //"renderModel" : "{hydra}hydra_controller",      // use the included hydra rendermodels
      // "joystickDeadzone" : 0.08                      // try to increase this value if the joy doesn't return to the center.
   },
   "jsonid" : "vrsettings",
   "keyboard" : {
      "TutorialCompletions" : 1
   },
   "perfcheck" : {
      "heuristicActive" : true
   },
   "steamvr" : {
      "activateMultipleDrivers" : true,
      "allowReprojection" : true,
      "background" : "#0A0A0A",
      "loglevel" : 3
   },
   "version" : "1"
}
lonetech commented 7 years ago

You can try checking with https://github.com/OSVR/OSVR-Tracker-Viewer that they do track in OSVR. The next step is figuring out what SteamVR-OSVR translates; it might be skipping over them for some reason.

Conzar commented 7 years ago

The issue is with the SteamVR OSVR plugin. I have spoken to one of the devs and have updated the issue: https://github.com/OSVR/SteamVR-OSVR/issues/30

Conzar commented 6 years ago

FYI, I have been working on the SteamVR plugin here. I still have no luck with getting steam to recognise the controllers though. Here is the latest steamvr.txt logs that should match the code in terms of print statements.

Conzar commented 6 years ago

@lonetech is there any other way for me to test nolovr other than the OSVR-Tracker-Viewer. I have issues running OSVR-Tracker-Viewer (basically freezes the openGL window as soon as it starts up).

nanospork commented 6 years ago

@Conzar One way to test is to install the latest version of Unity, install the Unity-OSVR plugin, then run some of the sample scenes. I know at least one of those includes visual effects tied to the hand paths.

If you'd prefer not to go through the hassle of installing Unity (it is very easy, though) let me know your OS and I can build those sample scenes for you. Apparently the Unity OSVR plugin only works on Windows right now. Can still do it for you if needed.

nanospork commented 6 years ago

@Conzar and @lonetech There has been some work on getting other controllers, such as PS Move, to show up in SteamVR via OSVR. Minotaurus0 uploaded all of his work here: https://www.reddit.com/r/OSVR/comments/4bqyyx/steamvr_controller_osvr_controller_wiimotepsmove/

In fact there was even an un-merged pull request a long time ago: https://github.com/OSVR/SteamVR-OSVR/pull/50

Here is some different software for Kinect that also allegedly worked with SteamVR via OSVR at one point, although I don't know if it was for the controllers or just the head: https://www.reddit.com/r/OSVR/comments/4rof7n/using_kinect_v2_as_a_position_tracker_for_the_hdk/

I don't really have the knowledge or dev environment to be much help on this, but I hope this information is useful to you two. I'll post again if I find more potentially helpful stuff!

nanospork commented 6 years ago

Also, there is some source code in the Nolo-Osvr-Windows driver repo. Might be useful!

https://github.com/NOLOVR/NOLO-Others/tree/master/NOLO_OSVR_SteamvrDriver/Source_Code

Conzar commented 6 years ago

Thanks nanospork, I will have a look at PR#50. That should help me with my fork to find any differences. My fork is already 'up 2 date' with master so its probably easier for me to just pick out any changes that they made that I think might work.

Conzar commented 6 years ago

FYI, there doesn't seem to be any differences between PR#50 and my fork except that PR#50 is outdated. My fork is using the latest changes in the SteamVR-OSVR master branch. PR#50 forked godbyk's original work which of course my fork uses godbyk's too. I think the reason the PR#50 was never accepted was due to the changes to the master branch code which makes PR#50 not work anymore.

I have also looked at LYRobotix github page already. See my original post :)
So far, I haven't been able to leverage their code as its a bit different since its calling out directly to their own drivers.