Phase 0
Home Project Overview People Resources UCL Code

 

Up

Phase 0 - Develop Initial CVE Infrastructure

Contents

Overview

DIVE

VRJuggler/Interact Platform

The Interaction System

Overview

The first phase of React/Iinteract was the development of an appropriate software platform. It was intended in the proposal phase that the platform would be DIVE. However other forces outside the project had caused us to develop IPT support for DIVE before the project started. DIVE did not completely satisfy our needs as they developed within the experimental phases. Thus we had two technical objectives:
  1. Development of DIVE to support easily configurable tracking input and vehicle support.
  2. Development of a light-weight platform on top of VRJuggler.

DIVE

The obvious choice of the CVE toolkit for our lab was the DIVE software [4] because we had over seven years experience with it. In order to support ongoing project work, an initial port of this to IPTs had been achieved in 2001 [19]. This infrastructure (DIVE 3.3x3 ) was released to collaborators around the start of the React/Interact project in Spring 2002, but it did not fully meet the requirements of React/Interact. Key features we required that were not available in DIVE were guaranteed repeatability down to precise timing of events on specific frames, and total recording of all user activity. Based on project experiences using a variety of input devices [9,10,11], the React/Interact project drove a major revision (DIVE 3.3x5) that is the current public version. 

DIVE version 3.3x5 fully met the requirements of objective 1, and this software supported the third set of experiments in this project. DIVE is a peer-peer system, and it has broad support for many display configurations. However, it was not the ideal platform for running very focussed experiments where precise timing of events is critical. In addition, although publicly available as binaries, and available as source for academic institutes, DIVE is not Open Source software and we wanted to make sure our experiments would be reproducible and extendable by others by making the complete platform code was available. Thus the interaction module that had been designed for DIVE, was re-engineered as a lightweight platform built on top of the VRJuggler software [1]. This platform was used in the first two experiments described in the next section.

VRJuggler/Interact Platform

Because we wanted to concentrate on building an interaction toolkit and not a general VR toolkit, our first step was to choose some pre-existing software as the basis of our system:-

  1. Firstly we had to choose a particular Virtual Environment (VE) toolkit, to setup and run the virtual environment (providing management of hardware). After some discussion we decided to use VRJuggler as our VE. This is a very versatile system, although still under under much development, which aims to offer reliable cross-platform support (i.e. both Windows and UNIX based machines), and can be easily configured to use many different VE peripherals (trackers, screens etc). This was desirable, as we wanted to run the same application code on many different VR technologies and systems; particularly when running the distributed user experiments in Phase 3 of the project.

  2. Our second decision was to choose a suitable scene graph, to manage and store the scene, which could then be manipulated by the interaction system via the various interaction techniques. After many frustrating trials with some of the newer open source scene graphs such as OpenSceneGraph and OpenSG, we found that none were mature enough to be used for our work. We needed a scene graph  that was stable and worked now, and so we opted for the popular SGI OpenGL Performer.

The Interaction System

Once we had chosen our scene graph and VE toolkit, we had to build and integrate these existing software's with the new interaction system. We wanted to develop an interaction toolkit which may be used with other CVEs and scene graphs in the future, and so we tried to contain all the interaction functionality in a single interaction manager class (see simple system schematic below). This interaction manager class would expect a certain set of services from the CVE (such as tracker input), and a particular interface to the scene graph, which would allow manipulation of the scene according to the interactions of the user. The interface would take the form of a set of Interaction Events (IEs) (derived from taxonomies of interaction in VR). For example, a single IE might be PICKUP_OBJECT. 

The use of IEs as an interface to the scene graph has several advantages:-

Firstly portability - any scene graph may be used in the future if it can implement the set of IEs. Thus we are not tied to a particular scene graph. Note, the same is also true of our choice of CVE; we may use any CVE in the future as long as it can provide appropriate user input to the Interaction Manager.

A second advantage of using IEs as our interface to the scene graph, is that we can record the entirety of user interactions in the VE by simply recording all the IEs. That is to say the record of all IEs in a session, represents all the information needed to recreate that session. So by saving all IEs for a user, we can replay and watch the users movements in the VE at our leisure. This  functionality could be very useful for the researcher in evaluation of experimental results for two reasons. Firstly, we have a complete record of all button presses, user movements, objects picked up, framerate etc, and so have a rich data set which can be analysed post experiment in ways which may not have been thought of when the experiment was designed. Secondly, we can better handle any outliers or confusing data, as we can recreate the session and see if anything unusual happened, such as a technology failure like loss of tracking.