Code Monkey home page Code Monkey logo

opengloves-driver's Introduction

OpenGloves Driver Steam Badge Discord Badge

A SteamVR (OpenVR) driver for VR Gloves and DIY Hardware.

Download

Steam Badge

OpenGloves is available on Steam,
where it comes with additional tools for configuring driver related features.

Features

Driver Features

  • Force Feedback

  • Full Finger Tracking
    Splay Support
    Individual Joint Support

  • Tracker / Controller Positioning & Offsetting

  • Button / Joystick Inputs
    ➜ Trigger | A | B
    ➜ Joystick | X | Y | Click

  • Multiple Communication Methods
    - Bluetooth Serial
    - Named Pipes
    - Serial USB

Additional Tools

OpenGloves UI

OpenGloves UI is an application that ships with the driver on Steam.
It provides additional features for configuring driver related features, such as:

  • Managing driver settings
  • Force Feedback Testing
  • Automatically calibrating Controller ⟷ Glove offsets

Custom Hardware

To make your own hardware compatible with OpenGloves, refer to the Driver Input page.

Contributing

Pull requests are very welcome.

For major changes, please open an
Issue or contact us first to discuss
what you would like to change.


Credits

Author Discord
danwillm danwillm#8254
Lucas VRTech LucidVR#0001

Manual Installation ⸥ ⸢ Building ⸥ ⸢ Limitations ⸥ ⸢ Compatibility


opengloves-driver's People

Contributors

alexvdberg avatar danwillm avatar electronicsarchiver avatar furrycoding avatar kusomaigo avatar lucas-vrtech avatar masterofshred avatar noob247365 avatar willnilges avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opengloves-driver's Issues

missing .sln file

This makes your driver impossible to build from source. Remove the .sln file extension from the gitignore and that should fix it...

Syncronising versioning

So far as I can tell, the Gloves and this repo are not synced, when it comes to the version numbers.

I think it can help to avoid confusion, if you use 0.5 for prototype 5, 0.6 for prototype 6 and so on

Support for trackpad

The Valve Index controllers have a trackpad, which is used in games like HL:Alyx to select a weapon. It would be nice if such a feature was supported by opengloves, so that you don't have to setup a gesture to simulate it.

Create Releases

Instead of having to build the driver, it would be nice if we could create a release for people to download and use instead of having to build the driver each time.

Transition Checksum

Hi,
Serial transition might have errors at some point it might cause unexpected behavior so adding a checksum for each packet might be useful.

Kind Regards

Create Releases

Instead of having to build the driver, it would be nice if we could create a release for people to download and use instead of having to build the driver each time.

GLTF Parsing

Have the ability to parse GLTF files for finger tracking. Allows more flexibility from what we currently have (lerping between two poses).

Hands don't appear in SteamVR home

Known details:

  • Currently, the hands do not display in SteamVR home when both gloves are initialized.
  • When only one glove is initialized, it works perfectly.
  • In SteamVR home, the hands are tracked by gamepad controller models.

Support for macos

I'm running SteamVR on Macos with my Oculus quest, and was wondering if there is any plan to support macos with this driver?

Feature: Add support for customizable baud rate

I've been trying to get my own simple "glove" working with an ELEGOO UNO R3, and noticed that when attempting to communicate via the current 115200 baud rate, it will consistently send out '\0'. This happens even with the serial monitor included with the Arduino IDE. However when I lower it to 9600, both the serial monitor and your driver appear to read the values correctly. Perhaps there's a higher value I could've used, but I know for a fact 9600 works fine.

Would it be possible to update "communication_serial" section of the vrsettings file to include a "baud_rate" field?

Real time update settings

Allow the driver to work with real-time settings updates, for example switching com ports or communication methods.

This way you won't have to restart SteamVR each time after changing one of these.
This will require refactoring the device provider and device driver classes.

Icons/Images

It would be nice to have some icons which aren't the default avatars from github for the organsation/readme.

Adding Legacy Input Profile

Adding a legacy input profile will help compatibility for games like VRChat which support finger tracking but not skeletal input.

Rename the driver

As discussed with Lucas, we have agreed to rename the driver to freeglove.

Rename the driver accordingly.

Add wiki for how to use config UI

Currently, most of the wiki pages are from before the UI's were created, would be great to be able to add documentation with screenshots of the UI from the steam release.

Jump in finger position caused by capacitive touch or press on button from gestures

Unfortunately, it appears that having thumb approximation enabled on full-tracking enabled games leads to the thumb looking jumpy, as the hand tracking in apps (like SteamVR home) seems prioritize finger positions from capacitive touch first before looking at skeletal input. This appears to happen to the index finger due to the trigger gesture as well.

Perhaps there's a way to have it automatically detect what games don't have analog thumb support and enable from there (maybe by querying a predetermined list), but that doesn't sound like a perfect solution either.

Until there's a definite solution to this, the easiest solution is to default the thumb approximation to false and have people turn it on when they plan to play a game that requires index emulation. This is a setting that would really benefit from real-time updating.

Currently, my testing platform is very laggy because I'm using Virtual Desktop over a non-local network, so it's possible that what I'm noticing is caused by lag and not actually from the approximation.

Device emulation

An interface to provide emulation of other controllers such as the index might come in handy for other games like vrchat which seem to not implement OpenVR skeletal input properly...

Automatic Pose Calibration

Going to have to brush out the quaternions for this one.
Currently, the process of tuning in the pose offsets is quite tedious and causes a lot of friction for new users.
Adding a way to automatically calibrate the pose will assist this greatly.

Cmake: Could not find a package configuration file provided by "nlohmann_json"

Getting an error at the cmake .. step in the build instructions:

CMake Error at driver/overlay/CMakeLists.txt:1 (find_package):
  Could not find a package configuration file provided by "nlohmann_json"
  with any of the following names:

    nlohmann_jsonConfig.cmake
    nlohmann_json-config.cmake

  Add the installation prefix of "nlohmann_json" to CMAKE_PREFIX_PATH or set
  "nlohmann_json_DIR" to a directory containing one of the above files.  If
  "nlohmann_json" provides a separate development package or SDK, be sure it
  has been installed.


Guessing a new package or submodule was added?

ESP as Controller

Why not use an ESP8266 like Wemos D1 mini. It has a faster CPU and also Bluetooth build in.

Code style

Currently, we don't have a code style, and we are using different styles across files.

Adding an .editorconfig should help clean this up.

Support for Splay force feedback

I know that force feedback has been implemented, but it only prevents the fingers from curling more. Imagine you were holding a pen between two of your fingers; it would be useful to prevent those fingers from splaying even further.

how to setup quest2

my arduino can get data .I also setup config step by step.but it can't get my quest2 device .
I use virtual desktop

Tidy Quaternions

We should probably be using const references instead of passing by value, as well as a clean to the controller pose using these functions.

Build Problems

I try to build this driver and got the following error messages:
[build] E:\Quellcode\opengloves-driver\src\DeviceDriver\KnuckleDriver.cpp:11:1: error: a storage class can only be specified for objects and functions [build] static const enum ComponentIndex : int { [build] ^~~~~~ [build] E:\Quellcode\opengloves-driver\src\DeviceDriver\LucidGloveDriver.cpp:15:1: error: a storage class can only be specified for objects and functions [build] static const enum ComponentIndex : int { [build] ^~~~~~
I build in Visual Studio Code with MinGw under Windows 10.

Arduiono uno and Driver lucidgloves has no suitable devices.

I had no Arduino micro so i just used a Uno instead, the Potentiometer readings works fine on the Arduino serial monitor, but the SteamVR web console says there is no suitable device, i did notice that the config file had a different com port so I had changed to the one my Arduino uses, but still steamvr said that no device was suitable. I have no idea if this is because of this error: "OpenService failed (1060)", or the fact that I'm using an Arduino Uno or that I'm just having one Potentiometer connected for testing. SteamVR does say that an unexpected SteamVR Error happened and that its a critical error.

Bluetooth not connecting / crashes

When I try to use bluetooth, the driver crashes at this line:

if (connect(m_btClientSocket, (SOCKADDR*)&m_btSocketAddress, sizeof(m_btSocketAddress)) != 0) //connect to the BT device.

It seems that it can't find the function connect or something.

Note that it is crashing and thus not even outputting Could not connect socket to ESP32. Which would be given out if the return value was not 0.

Build and Link Problems

I have problems building the current main v0.3 branch.

e:\Quellcode\opengloves-driver\build>cmake.exe -G "MinGW Makefiles" ..
-- The C compiler identification is GNU 8.1.0
-- The CXX compiler identification is GNU 8.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: E:/Quellcode/opengloves-driver/build

e:\Quellcode\opengloves-driver\build>mingw32-make
[  8%] Building CXX object CMakeFiles/driver_openglove.dir/src/Bones.cpp.obj
[ 16%] Building CXX object CMakeFiles/driver_openglove.dir/src/Communication/BTSerialCommunicationManager.cpp.obj
[ 25%] Building CXX object CMakeFiles/driver_openglove.dir/src/Communication/SerialCommunicationManager.cpp.obj
[ 33%] Building CXX object CMakeFiles/driver_openglove.dir/src/ControllerPose.cpp.obj
In file included from E:\Quellcode\opengloves-driver\src\ControllerPose.cpp:1:
E:/Quellcode/opengloves-driver/include/ControllerPose.h:23:7: error: extra qualification 'ControllerPose::' on member 'IsOtherRole' [-fpermissive]
  bool ControllerPose::IsOtherRole(int32_t test);
       ^~~~~~~~~~~~~~
mingw32-make[2]: *** [CMakeFiles\driver_openglove.dir\build.make:121: CMakeFiles/driver_openglove.dir/src/ControllerPose.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/driver_openglove.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2

I changed
bool ControllerPose::IsOtherRole(int32_t test);
to
bool IsOtherRole(int32_t test);

After this, the linking process failes with this message:

Consolidate compiler generated dependencies of target driver_openglove
[  8%] Building CXX object CMakeFiles/driver_openglove.dir/src/ControllerPose.cpp.obj
[ 16%] Building CXX object CMakeFiles/driver_openglove.dir/src/DeviceDriver/KnuckleDriver.cpp.obj
[ 25%] Building CXX object CMakeFiles/driver_openglove.dir/src/DeviceDriver/LucidGloveDriver.cpp.obj
[ 33%] Building CXX object CMakeFiles/driver_openglove.dir/src/DeviceFactory.cpp.obj
In file included from E:/Quellcode/opengloves-driver/include/Communication/BTSerialCommunicationManager.h:14,
                 from E:/Quellcode/opengloves-driver/include/DeviceProvider.h:13,
                 from E:\Quellcode\opengloves-driver\src\DeviceFactory.cpp:4:
C:/PROGRA~1/MINGW-~1/X86_64~1.0-P/mingw64/x86_64-w64-mingw32/include/Winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
 #warning Please include winsock2.h before windows.h
  ^~~~~~~
[ 41%] Building CXX object CMakeFiles/driver_openglove.dir/src/DeviceProvider.cpp.obj
In file included from E:/Quellcode/opengloves-driver/include/Communication/BTSerialCommunicationManager.h:14,
                 from E:/Quellcode/opengloves-driver/include/DeviceProvider.h:13,
                 from E:\Quellcode\opengloves-driver\src\DeviceProvider.cpp:1:
C:/PROGRA~1/MINGW-~1/X86_64~1.0-P/mingw64/x86_64-w64-mingw32/include/Winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
 #warning Please include winsock2.h before windows.h
  ^~~~~~~
[ 50%] Building CXX object CMakeFiles/driver_openglove.dir/src/DriverLog.cpp.obj
[ 58%] Building CXX object CMakeFiles/driver_openglove.dir/src/Encode/LegacyEncodingManager.cpp.obj
[ 66%] Building CXX object CMakeFiles/driver_openglove.dir/src/Quaternion.cpp.obj
[ 75%] Linking CXX shared library libdriver_openglove.dll
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x3eb): undefined reference to `__imp_recv'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x4b6): undefined reference to `__imp_shutdown'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x4c9): undefined reference to `__imp_WSAGetLastError'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x5a5): undefined reference to `BluetoothFindFirstDevice'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x6df): undefined reference to `BluetoothFindNextDevice'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x78e): undefined reference to `__imp_WSAStartup'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x7eb): undefined reference to `__imp_socket'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x872): undefined reference to `__imp_connect'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x884): undefined reference to `__imp_WSAGetLastError'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x8c0): undefined reference to `__imp_ioctlsocket'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x92e): undefined reference to `__imp_send'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x940): undefined reference to `__imp_WSAGetLastError'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x962): undefined reference to `__imp_closesocket'
CMakeFiles\driver_openglove.dir/objects.a(BTSerialCommunicationManager.cpp.obj):BTSerialCommunicationManager.cpp:(.text+0x96b): undefined reference to `__imp_WSACleanup'
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [CMakeFiles\driver_openglove.dir\build.make:271: libdriver_openglove.dll] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/driver_openglove.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2

Failed to load driver_openglove.dll

Problem
SteamVR can't find gloves controller, two esp32 chips on two different serial ports. SteamVR log shows as Unable to load driver openglove. Primary driver shared library not found on filesystem (for this architecture): C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\OpenGlove\bin\win32\driver_openglove.dll.

Environment

  • Opengloves driver downloaded from Steam
  • SteamVR, Steam, openXR runtime

I think there is no need to load a Win32 driver, while I've no idea how to deal with this.

steamvr_settings.zip

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.