BioVR
VR therapy sessions with live heart data from a Galaxy Watch.
The problem it solved
A therapist running a VR session can see what the patient is watching but not how the patient's body is responding. BioVR put the heart next to the session: heart rate, beat-to-beat variability and the raw pulse waveform reach the clinician console live, alongside control of the video the patient is watching.
Similar problems it can solve
Any session where the body's response matters as much as the content: biofeedback and relaxation training, stress and attention research in VR, and sports or rehabilitation monitoring with consumer smartwatches instead of lab equipment.
BioVR is the 2025 prototype that brought biosignals into VR therapy. A Galaxy Watch app streams heart rate, beat-to-beat intervals, HRV and raw PPG to a WPF clinician console, while a Unity app on Meta Quest plays 360° and stereoscopic therapy video under the same console's control. It laid the groundwork for the biosignal line of SyneuraX.
- Galaxy Watch app on the Samsung Health Sensor SDK: heart rate, IBI, PPG, accelerometer, skin temperature, SpO2
- HRV (RMSSD or SDNN) computed on the watch over a sliding window of up to 120 beats
- Unity 6 on Meta Quest plays 360°, side-by-side and top-down video, driven from a WPF console
Overview
BioVR is a 2025 prototype that brought the patient's body into VR therapy. A Galaxy Watch streams heart signals to the clinician's console while a Meta Quest headset plays therapy video under that console's control, so the therapist sees both what the patient is watching and how the patient's heart is responding. It is a research prototype, not a certified medical device: it was built to learn what a consumer smartwatch can measure reliably during a VR session.
One system, four parts
- Watch app (Kotlin, Wear OS, Samsung Health Sensor SDK 1.4.1). Continuous heart rate and beat-to-beat intervals, raw PPG in green, infrared and red, accelerometer and skin temperature, with SpO2 on demand. It computes HRV on the watch itself, as RMSSD or SDNN over a sliding window of up to 120 beats, and streams everything as typed JSON packets over TCP.
- Headset app (Unity 6, Meta XR SDK, URP, on Meta Quest). A generated sphere mesh and a custom shader play 360° video as well as side-by-side and top-down stereo layouts, and the headset's own view streams back to the console.
- Clinician console (.NET 9, WPF). Finds headsets on the network, sends commands and content, shows what each headset is showing and receives the watch's signals.
- Video catalog tool (.NET 9, WPF, FFmpeg). Reads the therapy videos and builds the annotated catalog the headset plays from.
All four speak one packet model, defined in a shared .NET Standard 2.1 library and mirrored on the watch, with twenty packet types from connection keep-alive and battery level to raw PPG, RR windows and HRV metrics.
Engineering
- Many headsets on one network. Each headset takes its own discovery, control, command and video ports, derived from its ID, so several sessions run side by side without configuration.
- HRV where the data is. Computing HRV on the watch keeps the traffic small and the metric consistent between sessions, while the raw intervals and PPG still reach the console for later analysis.
- Current Wear OS. The watch app targets Android 16 (API 36), where every health sensor needs its own runtime permission, and was built through those platform changes.
Where it led
BioVR's console and networking lessons fed into SyneuraX, the VR rehabilitation platform that followed, where biosignals are planned as the BioVR product line.
Technology
Kotlin with Jetpack Compose for Wear OS and the Samsung Health Sensor SDK on Galaxy Watch; Unity 6 with the Meta XR SDK, OpenXR and URP on Meta Quest; .NET 9 WPF for the console and the catalog tool, with FFMpegCore; a .NET Standard 2.1 shared protocol with JSON packets over TCP.