VR-Driver Project
Custom VR controller driver for SteamVR. Receives UDP data from external controllers (Arduino or mobile devices) and converts it into VR controller input.
Quick Start
Prerequisites
- Install ALVR (GitHub Releases)
- Install PhoneVR (ALVR-compatible version)
- Install SteamVR via Steam
Installation
Option 1 — Pre-built Release
- Download latest release https://github.com/spspider/VR-steam-controllers-driver/releases
- Extract files
- Run manual_install.bat as Administrator
- Follow testing steps
Option 2 — Manual Installation
C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\cvdriver\
Folder Structure
cvdriver/
├── bin/win64/
│ ├── driver_cvdriver.dll
│ └── openvr_api.dll
└── resources/
├── driver.vrdrivermanifest
└── input/
└── cvcontroller_profile.json
Hardware Setup


PCB Ordering
- Manufacturer: PCBWay
- Gerber files: kicad/gerber/gerber.zip
- Assembly guide: smd-placement.pdf
- Print dimensions: print_scheme_sizes.pdf
ArUco Marker Generation
pip install -r requirements.txt
python generate_aruco.py
Markers generated: aruco_marker_0.png – aruco_marker_9.png
How It Works
- UDP server listens on port 5555
- Receives controller sensor data
- Converts data to SteamVR input
- Updates controller states in real time
Data Packet Format
struct ControllerData {
uint8_t controller_id;
uint32_t packet_number;
float quat[4];
float accel[3];
float gyro[3];
uint16_t buttons;
uint8_t trigger;
uint8_t checksum;
};
Python Testing Scripts
| Simulator | simple_simulator.py |
| UDP Server | test_server.py |
Project Structure
VR-Driver/ ├── Android_ArCode/ ├── kicad/ ├── steamVR-controller-driver-C/ └── README.md
Open-source VR driver architecture with UDP-based controller input.

