Virtual Reality Peripheral Network
New! InterSense tracker support through their latest library, rather than only through the serial interface built into the Fastrak driver. This enables use of USB trackers as well.
New! Syzygy and AVANGO are writing wrappers to enable connections to VRPN devices from within these systems. Watch the mail list to see when these have been wrapped back into the VRPN code base.
New! Configure VRPN library and server before building by editing vrpn_Configure.h. This lets all servers build from the same See the installing and testing page for more info.
While most inquiries about VRPN should go to the user group at email@example.com, the company 3rdTech provides commercial support of VRPN. This support includes writing new device drivers, onsite installation and support, the addition of new features, and "productizing" the code so that it is more clear and robust. Groups that are interested in support for VRPN should see the VRPN support web page or contact firstname.lastname@example.org for more information. The library remains in the public domain, as have all improvements.
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 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, 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.
The VRPN client (application-side) library has been tested on SGI/Irix, PC/Win32, PC/Cygwin (not actively maintained), HP700/Hpux, Sparc/Solaris, PC/Linux, Mac/OSX, Ipaq/Linux, and Zaurus/Linux (see the VRPN PDA page for info on running on Linux/WinCE handhelds). The server-side library compiles under SGI/Irix, PC/Win32, and PC/Linux. Off-site users have compiled for IBM/AIX as well. There are drivers for:
There are major and minor version numbers associated with each release of VRPN. A difference in major version number indicates that the network-level interface (the data on the wire) has changed; versions with different major version numbers will not work together. A difference in minor version numbers indicates a change in device semantics, bug fixes, or any new features that don't affect the network-layer interface. Two systems with different minor version numbers should work together; although perhaps one will not implement all the features requested by the other. After version 3.1, the code should print a warning message and then proceed when there is a difference in minor version numbers. As of version 5.0, all VRPN objects should be derived from the vrpn_BaseClass object; instructions for converting from version 4.X objects to version 5.0 are included at the beginning of the vrpn_BaseClass.h file. See the file release_information.txt for information about what bugs were fixed and features added in each release.
VRPN's base was designed and built by Russell M. Taylor II. Ruigang Yang implemented many of the specific device drivers and vrpn_Analog. Hans Weber implemented clock synchronization and worked on several drivers. Tom Hudson fixed the naming convention and has worked extensively on vrpn_Connection (thread-safety, logging and playing back sessions, forwarding) and on the vrpn_SharedObject code. Phillip Winston wrote the UNC ceiling-tracker driver and helped with the NT port. Jun Chen and Adam Seeger implemented the PHANToM driver. Arthur Gregory added meshes to the PHANToM code and is speeding up collision detection. Lin Cui implemented the vrpn_Text class. Randy Heiland (NCSA) ported the PHANToM driver from NT to SGI. John Stone (Beckman Institute, UIUC) cleaned the code up so that it compiles better on multiple architectures, and in particular so that it will compile outside of UNC. John also wrote the Spaceball drivers and did the Mac/OSX port. Rob King while he was at the Navy Research Labs wrote the ImmersionBox driver, serial-port mouse-button and TNG drivers and submitted several bug fixes. Jason Clark wrote the Miles-based sound server. Zak Kohn augmenting the sound support. Jeff Juliano and Stefan Sain designed a major rewrite of the connection class. Aron Helser has done major bug/feature work on the library. The AIX and Solaris patches that allow compilation on these systems come from Loring Holden and Bob Zeleznik at Brown University. The Wanda driver comes from Brown University; they also helped with the Pinchglove driver. The driver for the 5DT is provided by Philippe DAVID and Yves GAUVIN from Direction de la Recherche. The Linux Joystick drivers (Joylin) were written by Harald Barth. David Marshburn wrote the Java port. Andrea Hilchey and Chris Dwyer wrote the Imager class and the Properties class. Thorsten Scheuerman ported VRPN to run on PDAs running Linux. Marc Baaden from SMPLinux ported the Phantom server to run on SGIs using GHOST 3.1. Sebastien MARAUX from Ondim merged the Phantom server with the regular server to enable more devices to be run from it. Sharif Razzaque submitted a fix for the InterSense native-library driver that lets you connect to USB trackers (Chris Ozeroff also submitted a patch for this).
Roman Shulakov from the Computational Science section of the Faculty of Science at the University of Amsterdam has developed a VRPN client that acts as a trackd server. This is a VRCO 'trackd' alternative for all versions of CAVELib (through at least 6/7/2001) that enables them to work with all VRPN-supported trackers. See his page at http://carol.wins.uva.nl/~rshulako/projects/mytrackd.html for more information (and for his commentary on VRPN). You're welcome to contact him if you are interested in a copy.
Use in Other Packages
The NIH National Research Resource for Macromolecular Modeling and Bioinformatics at the Beckman Institute for Advanced Science and Technology at the University of Illinois distributes a Visual Molecular Dyamics package called VMD. This package uses VRPN to connect to Phantoms and other VR peripherals for interaction with the molecular dynamics simulations. The following versions of VRPN/VMD have been released by them: (4.0/1.4) (4.06/1.5) (5.01/1.6) (5.01/1.6.1) (6.0/1.7).
Benjamin Schaeffer has constructed a VRPN bridge that enables the use of VRPN devices with their Syzygy Toolkit for virtual reality on pc clusters. He says, "my testimonial is that vrpn is good stuff and easy to work with! Thanks again!"
Sascha Scholz has provided a hook to link VRPN to the AVANGO VR Framework produced by the Virtual Environments Group of the Fraunhofer Institute for Media Communication, and is working on making VRPN the standard interface for devices within their system.