Virtual Reality Peripheral Network - Official Repo
Quick links: Get it, get involved
- Version control: https://github.com/vrpn/vrpn
- Source downloads with submodules updated: https://github.com/vrpn/vrpn/releases
- Supported devices: https://github.com/vrpn/vrpn/wiki/Available-hardware-devices
The Virtual-Reality Peripheral Network (VRPN) is a set of classes within a library and a set of servers that are designed to implement a network-transparent interface between application programs and the set of physical devices (tracker, etc.) used in a virtual-reality (VR) system. The idea is to have a PC or other host at each VR station that controls the peripherals (tracker, button device, haptic device, analog inputs, sound, etc). VRPN provides connections between the application and all of the devices using the appropriate class-of-service for each type of device sharing this link. The application remains unaware of the network topology. Note that it is possible to use VRPN with devices that are directly connected to the machine that the application is running on, either using separate control programs or running all as a single program.
VRPN includes drivers for many devices. A partial list is here
VRPN also provides an abstraction layer that makes all devices of the same base class look the same; for example, all tracking devices look like they are of the type vrpn_Tracker. This merely means that all trackers produce the same types of reports. At the same time, it is possible for an application that requires access to specialized features of a certain tracking device (for example, telling a certain type of tracker how often to generate reports), to derive a class that communicates with this type of tracker. If this specialized class were used with a tracker that did not understand how to set its update rate, the specialized commands would be ignored by that tracker. The current system types are Analog, Button, Dial, ForceDevice, Imager, Sound, Text, and Tracker. Each of these abstract a set of semantics for a certain type of device. There are one or more servers for each type of device, and a client-side class to read values from the device and control its operation.
VRPN was initially developed at the UNC CISMM NIH National Research Resource. It was later maintained and supported by Sensics (embedded into the OSVR software platform). It is currently maintained and supported by ReliaSolve in collaboration with a productive community of contributors from across the world.
A paper describing VRPN was presented at the VRST 2001 conference. A reprint of the paper can be found here. A copy of the Powerpoint presentation can be found here. A Powerpoint presentation on the vrpn_Imager can be found here.
VRPN has been tested on PC/Win32, PC/Cygwin, PC/Linux, and Mac/OSX (32- and 64-bits on all), as well as on ARM Linux systems and Android. It worked at one time but is not actively maintained on SGI/Irix, HP700/Hpux, Sparc/Solaris, Ipaq/Linux, and Zaurus/Linux (see the VRPN PDA page for info on running on Linux/WinCE handhelds). Daniel Wilches has an online tutorial for compiling the VRPN client side on the iPhone.
Other branch descriptions:
- debian: A packaging branch for ubuntu jaunty for git-buildpackage and/or debuild: note that it should be used with the "upstream" branch, not the "master" branch. Only good for 07.22 right now, due to lack of attention. (The ubuntu/ branches are simply the ports of this packaging to other distro releases.)