lucidvr / opengloves-driver Goto Github PK
View Code? Open in Web Editor NEWAn OpenVR Driver for VR Gloves
Home Page: https://store.steampowered.com/app/1574050/OpenGloves/
License: MIT License
An OpenVR Driver for VR Gloves
Home Page: https://store.steampowered.com/app/1574050/OpenGloves/
License: MIT License
Is it possible to allow only controller buttons to remain active while using the gloves. For example, having the option to press the menu button on the controllers would be handy since there isn't one for the gloves.
It would be useful to set the scalar trigger values for legacy game support.
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.
This makes your driver impossible to build from source. Remove the .sln file extension from the gitignore and that should fix it...
We may want to have the ability to configure if we want to either flip the rotation, or the position, or both.
I'm running SteamVR on Ubuntu with my Valve Index.
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.
I'm running SteamVR on Macos with my Oculus quest, and was wondering if there is any plan to support macos with this driver?
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
I can handle this one. Will be adding a Euler angle offset, and a boolean value for flipping left hand offset.
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.
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.
Add a setting in default.vrsettings that allows them to construct only one hand's driver without having to rebuild from source
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?
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
I think there is no need to load a Win32 driver, while I've no idea how to deal with this.
A great first task for those who have already experimented with the driver.
It would be nice to add some more troubleshooting scenarios to the wiki page https://github.com/LucidVR/opengloves-driver/wiki/Troubleshooting
Integrate a force feedback interface between the driver and games.
Using OpenVR's IVRIOBuffer
interface is probably the most suitable way to do this, but modding may also be necersarry.
Currently, we don't have a code style, and we are using different styles across files.
Adding an .editorconfig
should help clean this up.
Probably due to it being deleted at some point in the history, the link to the LucidGlovesDriver.cpp
file in Limitations.md
doesn't go anywhere. It'd be groovy if we could find it and link to the latest commit that has that file.
Having an interface for different formats will make it easier to encode differently for different comms and devices
Shouldn't it be relatively easy to adopt the generic driver by microsoft (https://docs.microsoft.com/en-us/samples/microsoft/windows-driver-samples/bluetooth-serial-hci-bus-driver/)?
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...
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.
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.
Have the ability to parse GLTF files for finger tracking. Allows more flexibility from what we currently have (lerping between two poses).
Currently, we don't actually have bindings exposed for pinch and B button - these should probably be implemented.
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.
Using 0.1.1 on a Win 10 and an Oculus Quest (not #2) changes controller icon in SteamVR home to what looks like a PS2 controller. buttons no longer work.
As a vrsettings file is simply section and key lookups, we should prefix our sections to avoid name conflicts with other developers.
Why not use an ESP8266 like Wemos D1 mini. It has a faster CPU and also Bluetooth build in.
Bluetooth reconnection doesn't work yet -- let's fix that
There is some issue with the conversion from Quaternion to Euler. Values are also not set in degrees but in radians.
I tried clicking on the discord invite link but it seems it's expired or something. Did something happen?
Will probably switch to a bluetooth LE communication protocol eventually, but going to start with BTSerial as a simple bluetooth test
A crash occurs on steamvr startup when no headset is plugged in.
It would be nice to have some icons which aren't the default avatars from github for the organsation/readme.
my arduino can get data .I also setup config step by step.but it can't get my quest2 device .
I use virtual desktop
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?
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.
As discussed with Lucas, we have agreed to rename the driver to freeglove
.
Rename the driver accordingly.
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
Adding a legacy input profile will help compatibility for games like VRChat which support finger tracking but not skeletal input.
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
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.
When I try to use bluetooth, the driver crashes at this line:
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.
We should probably be using const references instead of passing by value, as well as a clean to the controller pose using these functions.
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.
Known details:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.