VRPN 07.17

How to acknowledge VRPN in your papers

VRPN main page

Known Bugs

Obtaining VRPN

VRPN FAQ

VRPN Support

Installing and Testing

Compiling and Modifying

Client code

Server code

Troubleshooting

Connections

Logging and Playback

Shared Objects

Sound

Text Messages

Doxygen documentation

VRPN on PDAs

Coming attractions & suggestions

UNC-specific information

VRPN 07.17

Virtual Reality Peripheral Network

New! Version 07.17 has bug fixes for parsing the config file and for clutching during orientation changes on vrpn_Tracker_AnalogFly.

New! Version 07.16 has a new server-side interface that hides the vrpn_Connection constructor. Servers must now call vrpn_create_server_connection() rather than the constructor; there are versions of this function with all of the same parameters as the constructor, so this should be a quick fix. This is required as part of making it possible to use non-IP connections (working MPI connections, not yet done). This requires a code update on all servers.

New! Version 07.16 has a Polaris driver submitted by Sharif Razzaque from InnerOptic. It also includes a number of bug fixes and patches submitted by users (Jan Ciger, Aron Helser, Mike Weiblen, Lawrence K., Patric Smitz, M. Casas Sanchez).

New! Wouter Wognum wrote a VR Juggler driver for the WiiMote and interfaced it with VRPN. He tells you how at http://www.xs4all.nl/~wognum/wii.

New! Version 07.15 has a vendor-supplied driver for the MotionNode tracker.

New! Version 07.15 has lots of bug fixes and patches submitted by users (Jan Ciger, Patrick Hartling, Michael Adrian, Eric Griffith). The biggest fix is making it so that machines that have multiple network cards can have UDP packets always traverse the same path the TCP ones do; no more missing tracker or analog messages!

Archived, managed VRPN email list: vrpn@listserv.unc.edu. Web address to look at the archived messages is http://lists.unc.edu/read/?forum=vrpn. You can add yourself or remove yourself from the list by visiting http://listserv.unc.edu. The old vrpn@cs.unc.edu has been redirected to this new list.

While most inquiries about VRPN should go to the user group at vrpn@listserv.unc.edu, commercial support of VRPN is available. 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 vrpn-support@navitasresearch.com for more information. The library remains in the public domain, as have all improvements.

Overview

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 (including 64-bit), 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:

Trackers

  • Ascension Flock-of-birds (either running through one serial port, or with each sensor connected to its own serial port). This driver (and the other tracker drivers) resets the tracker in case of power cycle, serial disconnect or other flukes. Do not use this driver on a Nest of Birds because it will burn out the transmitter drive circuitry (see email from Kyle Smith).
  • Polhemus Fastrak tracker and 3Space trackers on several architectures, Liberty tracker under at least Linux. The Patriot tracker is supported using the Liberty driver.
  • InterSense IS-600 and IS-900 (using augmented Fastrak interface on any architecture).
  • Other InterSense trackers (using InterSense native library, even USB-based ones); there is currently a discussion on the VRPN email list about whether the position and orientation information are returned consistently when using this interface.
  • Origin Systems DynaSight tracker (with passive reflector). This driver also supports the older tracker in the SeeReal D4D stereo Display.
  • Sensable Technologies PHANToM force-feedback device.
  • 3rdTech HiBall-3000 Wide Area Tracker (formerly the UNC Ceiling tracker).
  • Analog devices used as a tracker (Magellan, CerealBox with joysticks attached, Radamec SPI, Mouse).
  • Button devices used as teleporters or trackers (Global Haptics GeoOrb).
  • WorldViz Precision Position Tracker PPT 1.2.
  • Advanced Realtime Tracking GmbH DTrack tracker, including Flystick2.
  • Logitech 3D mouse.
  • Crossbow RGA300 accelerometer using a serial interface.
  • Immersion Microscribe.
  • PhaseSpace tracking system.
  • Inertialmouse and Event Mouse from Bauhaus University Weimar.
  • MotionNode inertial tracking device.
  • NaturalPoint OptiTrack Rigid Body Toolkit (VRPN server is built into the vendor's server).
  • NDI Polaris optical tracking system.

Other devices

  • The Totally Neat Gadget (TNGs) from MindTel (buttons and analogs).
  • Logitech Magellan and Spaceball 6DOF motion controllers with buttons (not yet the Spaceball 5000).
  • The Fraunhofer IMK ADBox and Fakespace Cubic Mouse.
  • DirectInput enabled joysticks (including force-feedback joysticks) on Windows (see howto). Also, DirectInput enabled rumble packs on Windows.
  • Other joysticks on Windows.
  • PC joysticks running under Linux.
  • Various XKeys devices from P.I. Engineering: the Desktop, Professional, Jog&Shuttle, and Joystick.
  • The 3DConnexion SpaceNavigator, SpaceExplorer, and SpaceTraveler devices (buttons and 6DOF differential analog).
  • Global Haptics GeOrb (buttons and analogs).
  • The buttons on several styles of serial mice plugged into a serial port.
  • 5DT glove tracker (analog device with 5 values for the fingers plus pitch and roll). Also, the 5DT16 glove is supported along with a driver to convert the 16 analog values into button presses.
  • Radamec Serial Position Interface video/movie camera tracker (unscaled zoom/focus, untested motion base).
  • B&G systems CerealBox button/dial/slider/joystick controllers plugged into any server-capable machine.
  • NRL ImmersionBox serial driver (support for buttons only).
  • Wanda analog/button device.
  • National Instruments A/D cards.
  • Zaber.com's linear positioning elements.
  • Mouse devices on Linux (when logged in at the console) and Windows.
  • Keyboard on Windows.
  • Win32 sound servers, based on the Miles SDK (obsolete), the AuSIM sound hardware, and Microsoft DirectSound.
  • SGI button and dial boxes (on an SGI or other machines).
  • UNC Python hand-held controller (or any device with up to 5 buttons; can be plugged into the parallel port on a Linux or Windows box -- its use is deprecated, use the TNG3 instead).

Versions

See the file version_history.html for information about what bugs were fixed and features added in each release. 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.

Authors

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 (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 sped 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 and the Solaris_64 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 and added the instant buzzing effect to the driver. He also wrote the Joywin driver that enables the use of joysticks on Windows without using DirectInput. He also found a slew of memory leaks which should be fixed in 06.05. 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). Matt McCallus wrote the AuSIM and DirectSound sound servers. Blair MacIntyre added code to the native InterSense driver to enable adding wands and styli. Haris Fretzagias updated the fast Windows clock so that you can reliably get more than 60 ticks per second. David Borland added the Poser and Analog_Output classes (inverses to the Tracker and Analog classes). David Nahon from Virtools provided updates on the native Intersense driver and the Ascension driver (removed requirement for extended-range transmitter). He also worked with Kurt Achatz of Advanced Realtime Tracking GmbH to develop a driver for that company's DTrack tracker. Kurt later supplied a clean port that handles multiple Flysticks and doesn't require linking with outside code, and another version compatible with their new Flystick2. Daniel Myall from Westco provided the Polhemus Liberty driver and the description of how to make this run on Linux. Jeff Feasel implemented reference counting on the vrpn_Connection objects so that a connection is deleted when the last object referencing it is deleted; this causes correct behavior when storing logfiles. Chris VanderKnyff made it possible to link VRPN using DLLs, and invented the VRPN_CALLBACK convention so that the library can play nicely with application frameworks that require different calling conventions for functions. He also contributed a driver for the Crossbow RGA300 accelerometer using a serial interface while at SAIC. He also write the HID class and the Windows implementation, which included drivers for the XKeys devices. Roland Schroeder-Kroll from Steffi Beckhaus' group at the University of Hamburg has submitted drivers for the Polhemus Patriot tracker (uses the Liberty driver) and for the SeeReal D4D stereo Display. Jinseok Seo from the Virtual Reality Laboratory of POSTECH in Korea contributed a Logitech 3D Mouse driver. Mike Weiblen from 3DLabs contributed the vrpn_Mouse class that works on Linux. Tom De Weyer's group at EDM-Uhasselt in Belgium contributed the Microscribe interface along with the 5DT16 analog and button drivers. Patrick Hartling from Infiscape.com added support for Mac OSX universal binaries. Version 07.09 has support the inertialmouseand event mouseinterfaces from Bauhaus University Weimar, submitted by Jan Springer. Version 07.15 has lots of bug fixes and patches submitted by users (Jan Ciger, Patrick Hartling, Michael Adrian, Eric Griffith). Version 07.16 has a Polaris driver submitted by Sharif Razzaque from InnerOptic. It also includes a number of bug fixes and patches submitted by users (Jan Ciger, Aron Helser, Mike Weiblen, Lawrence K., Patric Smitz, M. Casas Sanchez).

Other Resources

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.

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://staff.science.uva.nl/~rshulako/projects/mytrackd/ for more information (and for his commentary on VRPN). You're welcome to contact him if you are interested in a copy.

Wouter Wognum write a VR Juggler driver for the WiiMote and interfaced it with VRPN. He tells you how at http://www.xs4all.nl/~wognum/wii.

Use in Other Packages and Locations

VRPN was used as the tracker and button library driving a "Monticello Through the Window" exhibit at the New Orleans Museum of Art from April 12 - August 31, 2003. Two systems set up side by side ran for 142 days, serving 110,000 visitors, without any software failures.

VRPN forms the device-independent layer for the Panda3D Graphics Engine, which is an open-source system developed by Mike Goslin and Mark Mine at Disney's VR Studio.

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).

Virtools has incorporated VRPN into their Virtools VR Pack, which is a commercial immersive VR interface for CAVEs, projection systems, and head-mounted displays.

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 wrote the driver for the Fraunhofer IMK AD-Box device and the Fakespace Cubic Mouse.

Mike Weiblen announced osgVRPN, which is a set of classes to integrate OpenSceneGraph with VRPN. It was developed with OSG 0.9.6-2 and VRPN 06.04 and tested with WinXP+VS.net2002 and Debian Linux+gcc3.2.3. He says: "osgVRPN is in an early stage of development, but seems functional enough to share." The one VRPN device abstraction currently supported is the "tracker": osgVRPN::TrackerManipulator allows a camera to be positioned using a tracker and osgVRPN::TrackerTransform allows a scenegraph Node to be positioned using a tracker. See http://mew.cx/osg/

WorldViz has included VRPN support into their Virtual Reality Toolkit Vizard.

Gerhard Reitmayr announced an integration of VRPN with the Studierstube OpenTracker library. This has been a goal since papers of VRPN and OpenTracker were presented back-to-back at VRST 2001! OpenTracker is a C++ library for manipulating tracking data. It features a data flow concept, where a graph of transformation nodes operate on the data stream from tracking devices. It also includes a range of device drivers and network support among other things. Using this port, an OpenTracker program can receive data from a VRPN server, but also act as a VRPN server as well. Therefore you could use an OpenTracker process to filter and transform VPRN data and provide the result to other clients. Currently only the tracker and button devices are supported, both as clients and servers. It was tested with VRPN version 6.06_beta2 on Windows with VC++ 6.0, but it should also work under Linux.

Blair MacIntyre reports that they make heavy use of VRPN in DART, their Director-based AR system.

Version 07.09 has support for the inertialmouseand event mouseinterfaces from Bauhaus University Weimar, submitted by Jan Springer.

Kurt Achatz of A.R.T. sent in an updated driver for their newest A.R.T. DTrack trackers.

MotionNode contributed the driver for their inertial tracker.

NaturalPoint distributes a VRPN driver for their NaturalPoint OtiTrack Rigid Body Toolkit. They have a video of using VRPN to stream their tracking data into an application online at http://www.naturalpoint.com/optitrack/products/rigid-body/videos.html.