What Is It? Why Bother? Components How This Was Done Files Why didn't I try...  

How was all this put together?

There are 4 main components to this project:

Head Mounted Display (HMD)
Head tracker
Motion/floor tracker
Virtual Environment

 
 

Head Mounted Display
You cannot have VR or AR without some sort of input device for your eyes. These range from things like a HUD (heads up display) with some textual information on glass, to full blown peripheral vision covering high definition screens.
The unit used for this project was a cheap Evertek branded HMD that was retrofitted into an old VFX1 VR helm. (see above picture). Check the Why section as to why I didn't use the VFX1 for this project. The helm was donated by Colin Richards who did the retrofitting along with simplifying the electrical connections to the helm.
The Evertek HMD has a standard NTSC video input, and my laptop just so happens to have a matching video output. This also makes things very convenient for making this project wireless, especially since this HMD comes with a battery pack. A video transceiver would be used to take care of the rest.

Pitch - the forward tilt, or looking up/down.
Roll - the lateral tilt, this happens when your head leans towards either shoulder.
Yaw - turning left/right, simply looking left to right is an important part of expanding a field of view.
These 3 directions are very important to understand as they will be referred to often.

The sixaxis controller has 3 accelerometers and a gyroscope. An accelerometer is something that measures force. Specifically from acceleration. The simplest application for accelerometers is detecting gravity as it is always constant, and always in 1 direction. Because the force of gravity is always down, relative to the sensors, the angles of pitch and roll are able to be calculated.

- back to the top -

Head Tracking 

As mentioned in the other pages here, the head tracking is being provided by the technology that is in the Sony Playstation Sixaxis controller. (often referred to as simply the 'sixaxis'). To be able to look in all directions, the computer needs to be able to read 3 directions.

Pitch - the forward tilt, or looking up/down.
Roll - the lateral tilt, this happens when your head leans towards either shoulder.
Yaw - turning left/right, simply looking left to right is an important part of expanding a field of view.
These 3 directions are very important to understand as they will be referred to often.

The sixaxis controller has 3 accelerometers and a gyroscope. An accelerometer is something that measures force. Specifically from acceleration. The simplest application for accelerometers is detecting gravity as it is always constant, and always in 1 direction. Because the force of gravity is always down, relative to the sensors, the angles of pitch and roll are able to be calculated. Typically, the turning motion of yaw is perpendicular to the force of gravity. This means that there is no change in direction of gravity that would allow a measurement that indicates the current angle of yaw. Accelerometers cannot measure yaw, but a gyroscope can.

A number of additional tools were necessary to interface the controller with a computer. Normally it is intended to be used on the Playstation 3 console. There are 3 layers of front end software that must be set up for the motion data from the sixaxis to be able to reach the game/virtual environment on the PC. (For specific steps, check the how it was done section.)

USB driver (or wireless bluetooth driver) free, based on an open source USB library.
GlovePIE - free, user created software to enable a Programmable Interface Emulator.
PPjoy - a virtual joystick emulator. also free, but no longer in development.
(Generally this software is only reliable on Windows XP 32 bit)

- back to the top -

Motion Tracking

The motion tracking component was by far the most challenging. For how I came up with this idea, and how this was built, check the How section. But to summarize here, the motion tracking works on the same principle as an old fashioned ball mouse. I chose a bouncy ball because the rubbery material has such a high friction.
The floor tracker augments a joystick on the sixaxis. Motion on the floor equates to leaning on the joystick in the same direction, which then equates to moving at a specific speed in the virtual environment.

It is important to mention that this was designed and built on-the-fly, meaning there was no planning ahead, blueprints or schematics. Being limited on materials, tools, budget, and time, and having, skill, and experience with on-the-fly design (hobby), there was little choice in the methods on how to go about building it. (ie; no method, just do it)

- back to the top -

 

The Virtual Environment
The last component to this is the virtual environment. An open source 3d shooter type game was sought out. It was important that the ability to control the view's roll was available in some for. This feature is generally not used in 3d shooter games, but can be found in flight simulators. Regardless, the game known as Nexuiz met all the requirements. Though the ability to roll the view could only be enabled by modifying the source code and re-compiling to a windows executable. It was deceptively convenient that the code was there already, and simply needed to be 'un-commented' to work. The working, compiled version of the game is here, note that you will need to download the rest of Nexuiz 2.3 here for it to work.

Initially, the pitch and yaw data was mapped onto the system mouse, and roll was mapped to a joystick axis. These variables were easily mapped to the controls in the game, however, it solved a few problems and simplified some things to use joystick axis for both pitch and roll, and mouse axis for yaw.
2 more joystick axis are required for forward and sideways motion, (provided by the augmented joystick in the sixaxis/floor tracker combination). The map that was built for this project is here.

- back to the top -