VR steam controllers driver

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

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 3D View
PCB Schematic

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

Simulatorsimple_simulator.py
UDP Servertest_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.