This repository contains the documentation and the software and hardware components of the RolliVR project developed at Hochschule Ruhr West. RolliVR aims to create a platform for wheelchair drivers to use their wheelchair to naturally move in existing VR applications and games. For that purpose, we provide a manual along the design files for 3D-prints to create the platform and an OpenVR driver and software package to use the platform in SteamVR applications.
Count | Part | Used For |
---|---|---|
1 | Arduino Uno (or similar) | electronics |
1 | USB cable for the chosen Arduino | electronics |
1 | USB extension cable | electronics |
2 | Grove optical rotary encoder (TCUT1600X01) | electronics |
2 | Grove universal 4 pin cable | electronics |
- | jumper wires | electronics |
2 | film coated plywood 1500x7500mm (thickness 18mm) | platform |
2 | hinges | platform |
8 | height adjustable feet (height around 10mm) | platform |
2 | load bearing rollers (length 200mm, diameter 80mm, 12mm thread) | platform |
8 | stainless steel angle brackets | platform |
8+ | M12 nuts | platform |
40+ | M5 pointed screws | platform |
2 | telescopic tubes (length around 1m, diameter 18mm to 22.5mm) | wheelchair bracket |
8+ | M3 screws (length 40mm) | wheelchair bracket |
8+ | M3 nuts | wheelchair bracket |
8+ | M3 washers | wheelchair bracket |
6+ | M5 screws (length 40mm) | wheelchair bracket |
6+ | M5 nuts | wheelchair bracket |
6+ | M5 washers | wheelchair bracket |
- | flexible filament (TPU) | wheelchair bracket |
- | dark filament | encoder disk |
- | any filament | other 3D-printed parts |
- | double sided tape | encoder disk |
- | duct tape | wiring |
The encoder ring must be printed with a dark filament to properly block the light of the rotary encoder's LEDs. (.stl)
The encoder holder can be printed with a filament of your choice. (.stl)
Both parts of the platform bracket can be printed with a filament of your choice. (first .stl, second .stl)
Most parts of the wheelchair bracket can be printed with a filament of your choice. (first .stl, second .stl) The part holding onto the wheelchair should be printed with flexible filament (TPU) for a better grip and to prevent any scratches. (third .stl) The second and third parts (the parts holding onto the wheelchair) have to be printed twice to form the grip.
Firstly, cut the two film coated plywood boards into semicircles with a diameter of 750mm. Align them and use two hinges to combine the two halves into a complete circle. This allows for easier transport of the platform. Cut out two holes which will later house the load bearing rollers according to the following drawing.
Evenly space out and screw the eight height adjustable feet to the bottom of the board to elevate it to a height of about 10cm.
Place the 3d-printed encoder rings over two of the rollers and fixate them using double sided tape on their bottom side.
Use a single screw to fix the optical rotary encoder onto the 3d printed holder. Anchor each load bearing roller between two angle brackets putting the rotary encoder holders (where applicable) and nuts in between as seen in the image below.
Screw the angle brackets to the platform afterwards.
Assemble the wheelchair and platform brackets using the M5 and M3 screws, nuts and washers as seen in the image below.
Both optical encoders need to be connected to the Arduino's VCC and ground pins and the respective digital input pins 6 to 9 as shown in the image below.
Software | License | Recommended Installation Method |
---|---|---|
Qt5 | LGPLv3 | Download and install from here |
OpenVR | BSD 3 | Install via vcpkg |
GLM | MIT | Install via vcpkg |
Serial | MIT | Fork integrated as submodule of this repository |
NSIS | zlib | Download install from here |
NSIS Json Plugin | See LICENSE.txt | Included in this repository |
CMake | New BSD | Download and install from here |
Arduino IDE | LGPL | Download and install from here |
CMake is used as build tool. OpenVR and GLM libraries need to be installed on your machine. It is recommended that you download them via vcpkg. Make sure to install the x64-windows triplets to be able to build the driver and overlay as 64 bit applications:
vcpkg install openvr glm --triplet x64-windows
Qt5 has to be installed to build the overlay, as it is used for the user interface. To build the installer NSIS has to be installed. With this prerequisites installed and the repository cloned, make sure that you that you have initialized the required submodules via the execution of the following command in the root directory:
git submodule update --init
In the software directory, create a build directory and move to it:
cd software && mkdir build && cd build
Execute CMake, make sure the TOOLCHAIN_FILE and PREFIX_PATH variables match your installation paths. Set your required release type and specify the generator:
cmake .. -DCMAKE_BUILD_TYPE=Release -G"Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.14.2\msvc2017_64\lib\cmake
Perform the build:
cmake --build . --config Release
After the build, the driver folder structure and files will available as <Path to Repo>\software\build\driver\rollivr
and the overlay folder structure and files will be copied to the output folder as <Path to Repo>\software\build\overlay\rollivr
.
If you want to create the installer execute the following command:
cmake --build . --target package --config Release
The installer will then be located at <Path to Repo>\build\RolliVR-Installer.exe
.
Alternatively, you can access the most recent prebuild installer in the latest completed action.
There are two Arduino projects provided in this repository:
-
arduino-software-debug serves as a mean to test the software without the platform. Simply wire two pushbuttons with pullup resistors to the A0 and A5 pins of an Arduino and flash this sketch. Holding down buttons simulates a forward movement of the left and right wheels.
-
arduino-software-encoder is the software required for the real platform. It transmits the movement distance and angle calculated from the values of the optical rotary encoders every 100 milliseconds. It also applies a rolling average filter over 5 samples.
After building RolliVR-Installer.exe
launch it and install RolliVR to a directory of your choice.
Launch SteamVR after the installation. Connect the Arduino with the firmware flashed to the PC running SteamVR and take a look at the information panel. If no icon is shown at all, make sure an entry in the external_drivers
array in the <User>\AppData\Local\openvr\openvrpaths.vrpath
file points to <RolliVR Installation Directory>\driver\rollivr
. If the RolliVR icon is greyed out, the connection could not be established, if it is blue-greenish, the Arduino is successfully sending data.
In case of a failed connection go to the SteamVR developer console:
Search for RolliVR and find the logs of available and accepted hardware ids. Available hardware ids are the ids of serial ports connected to your system. Accepted hardware ids are the ids the driver expects.
If your Arduino has a hardware id that is not accepted, add the hardware id and baudrate to the config file located at <RolliVR Installation Directory>\driver\rollivr\resources\config\comports.txt
. Restart SteamVR afterwards. The Arduino should successfully connect and you can test the controller by accessing #/USER/TREADMILL
under Controllers > Test Controller. VR Applications that allow custom controller bindings can now be configured to use the RolliVR controller as an input.
When using roomscale VR applications with RolliVR, the overlay is required. To make sure the overlay has correctly registered itself as an autostart application, go to Choose Startup Overlay Apps under Startup / Shutdown. If RolliVR is displayed, you are good to continue, otherwise run install_manifest.bat
in the installation directory and restart SteamVR. RolliVR should now be correctly registered and enabled as autostart application:
The driver and the overlay need to be connected next. Go to the Controllers and make sure advanced settings are shown. Click on Show Old Binding UI.
Now proceed to edit the bindings of RolliVR. You may need to click on Show More Applications before it shows up.
Firstly, change the controller used for the RolliVR application. This defaults to your VR headsets controllers, but it needs to be changed to the RolliVR Controllers. To do so, click on the name of the Current Controller and select the RolliVR Controller in the following menu.
Secondly, activate the default RolliVR Overlay bindings for the RolliVR controller under Official Bindings.
With that step done, the overlay is fully functional and you can access it in VR using the SteamVR menu. The RolliVR icons appears on the lower left corner.
To start moving in roomscale VR applications, push the Start Forced Movement button while seated on the platform and looking straight ahead. The menu must be closed for the movement to work.
Inputs to the wheelchair now move you around the room. To reset your movement and return to the origin, push Reset Accumulated Movement. To stop the movement with the wheelchair, push Stop Forced Movement. Turn and Movement Speeds as well as a height offset can be configured in this menu, too.