VRTrack 1.0 – headtracking driver for the vr920 HMD

As I promised in New version of the vr920 headtracking driver coming soon here is the new version of my headtracking driver for the Vuzix VR920 iwear for Linux. It calculates yaw, pitch and roll from the accelerometer and magnetometer data (The device has got three of each). This makes a 3DOF tracking possible and allows you to look around in a 3D Scene.  In example you can use the driver with my stereoscopic image viewer SIV. The driver averages the sensor readings with an improved algorithm, which gives a far smoother experience than with the initial driver version. The driver package consists of a daemon which can be run in the background and for convenience a basic control application that enables one to easily tweak the various driver settings and to callibrate the device. For general Information on how to use the device with Linux see: Vuzix VR920 with Linux and active 3D stereo.

The driver provides the trackingdata in different formats to the application using it. It always writes the data to /dev/headtracking. A line read from /dev/vrtrack consists of six floats that correspond a sensor reading in this format:

yaw pitch roll x y z

Yaw, pitch and roll are angles from 0 to 360 degrees. X, y and z are always zero for the vr920, since it only supports three degrees of freedom. These values are reserved for future devices which may support six degrees of freedom, in the hope to propose a standard for tracking devices.

The driver can scale the readings and invert the axes independantly to get the needed value range for the used application and a pleasant experience.

For maximum compatibility with existing applications there are four other modes of operation available that can be enabled separately:

  • Joystick emulation
    The driver emulates a joystick device /dev/input/jsX. The readings for yaw, pitch and roll are the X,Y and Z axis of the emulated joystick. This may be used to enable basic headtracking support in games that do not natively support headtracking.
  • Mouse emulation
    The driver emulates a joystick device /dev/input/mouseX. The readings for yaw and pitch are being translated to X and Y of the mouse device, so when you look right the mouse pointer moves to the right and when you look up the pointer moves upwards and vice versa.  This may also be used to enable basic headtracking support in games that do not natively support headtracking. It can also be used to just control the mouse pointer of the window system. Controlling the viewport of the window system can also be a resonable purpose. With the new MPX extension in xorg this may be possible.
  • UDP – network
    In UDP mode the driver sends the tracking data via network as UDP unicast. The approach to send the data out via network makes the language used for writing the application independant from the language used for developing the driver. The packet sent to the clients contains the three angles, yaw, pitch and roll and x,y and z as 32 bit fixed point in Q16.16 format. This mode may i.e. used to control flightgear.
  • Multicast – network
    In multicast mode the driver sends the tracking data via network as UDP multicast, thus many clients may read the data, which makes parallelization more possible, i.e. one could use one machine for rendering and another machine for calculations. In addition to this, the approach to send the data out via network makes the language used for writing the application independant from the language used for developing the driver. The tracking data sent to the clients contains the three angles, yaw, pitch and roll and for easy usage a viewmatrix, one can directly use with scenegraph libraries. If you intend to develop an application using the headtracking of the VR920 see the file democlient.cpp included in the download for details on how to get the data into your application. This mode is used by the stereoscopic image viewer SIV.
Below is a screenshot of the control application during callibration of a vr920 device:
control_appvrtrack driver during calibration ( screenshot)

Important note: During calibration make sure that the display of the device is displaying something. Since the displays not only showing a blue screen influences the sensor data (at least with my device) you’ll end with wrong calibration else. You may use i.e. nvidia-settings to ensure this. For detailed usage instructions see the readme included in the download.


I decided to publish the driver under the creative common noncommercial license. You may download the full source from here: vrtrack-1.0.tar.gz (1224), an x86_64 binary from here: vrtrack-1.0-x86_64.tar.gz (1108) , or an i686 binary from here: vrtrack-1.0-x86.tar.gz (1086). An Archlinux PKGBUILD provided by Feilen is available here: aur.archlinux.org More binary/distribution specific formats may be available in the future. The x86_64 binary has been build on an up to date gentoo system, the i686 binary on ubuntu hardy. For the i686 binary you may install libconfig++ i.e. libconfig++8_1.3.2-2 from here: libconfig++ If none of the binaries works for you, you may have to build from source…

You need to have libusb, libconfig++, libfuse and libcurses installed on your system. For ubuntu users I included the small shell script ubuntu_install_deps.sh that installs the dependencies. Maybe it works also for for other Debian-based distributions. Gentoo users just have to make sure that  libusb, ncurses, fuse, and libconfig have been emerged. Your kernel version has to be at least 2.6.31 and you must have cuse enabled in your kernel.


If you like the driver, feel free to link to www.mygnu.de. If you developed an application using the tracking data provided by the driver please leave a comment, because then I can review the application and eventually write about it. To request commercial licenses contact us at info(at)mygnu.de. Well, if you just want to support our work on MyGNU.de use the donate button 😉

best regards


1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)

Wrong units in gnome-sensors-applet

A while ago I noticed my gnome-sensors-applet displaying wrong units for some sensors. I.e. it displayed an “A” next to a fan sensor value.  Since I had the same problem once before I remembered quickly how to solve it. Because I did not find anything about this problem in the web, I decided to write this post.

The reason for the wrong units is wrong data stored in gconf. Each sensor has a type. If this type is stored wrong the applets configuration the applet displays the wrong unit for the sensor. Sensor types I know are:

  • 0 – current (A)
  • 1 – fan (RPM)
  • 2 – temperature (C or F, depends on selection)
  • 3 – voltage (V)

To change the applets configuration to the right sensor types start gconf-editor.

Search for the key name sensors_applet_version. At the same location you will find the properties of the sensors applet. Then open (doubleclick onto each)  the keys ids or labels and sensor_types edit key pages and move them next to each other to identify which sensor type entry belongs to which sensor.


Now change sensors with wrong type settings to the correct ones. Then from console issue a killall gnome-panel to force the configuration to get reloaded. Afterwards you should get the correct unit being displayed next to your sensor data.


1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Vuzix VR920 with Linux and active 3D stereo

I recently received my VR920 3D stereo glasses from USA. A detailed review of the device can be found here : Introducing the Vuzix iWear VR920. A photo of the VR920 can be seen below:


The device of course works flawlessly using Windows. The situation under Linux is a bit different, due to missing driver support from the manufacturer, as usual.

Stereo vision works at least with nvidia quadro boards, probably also with others. I.e. Ati FireGL should work, but I never tried this. Setting this up was easy. I only had to start a second XServer and add the line

Option “Stereo” “1″

into the screen section of its xorg.conf. With this setting you get a different image for both eyes and thus real stereo vision if your application supports quad-bufferred stereo. It is important that the screen resolution is between 640×480 and 1024×768 and the refresh rate is 60 Hz. The xorg.conf you are using for this must not use the composite extension. For disabling the Composite extension append the following to the xorg.conf:

Section “Extensions”
Option         “Composite” “Disable”

Sadly this also prevents the use of compiz, hopefully Nvidia fixes the incompatibility between stereo and the composite extension some day.

For starting the xserver i use the following little script, which opens 2 xterms and starts the program (given as parameter with arguments) in one of them.


/usr/X11R6/bin/X :1 -dpi 96 -xf86config ./xorg.conf.3d -auth /var/gdm/:1.Xauth vt8 &
export DISPLAY
sleep 5
xterm -fn 9×15&
xterm -fn 9×15 -e $@&

The headphone gets detected as alsa device:

usb 2-2: new full speed USB device using uhci_hcd and address 8
usb 2-2: configuration #1 chosen from 1 choice
generic-usb 0003:1BAE:0002.0002: hiddev0,hidraw1: USB HID v1.00 Device [Icuiti Corp. VR920 Video Eyewear] on usb-0000:00:1d.1-2/input3
usb 2-2: New USB device found, idVendor=1bae, idProduct=0002
usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-2: Product: VR920 Video Eyewear
usb 2-2: Manufacturer: Icuiti Corp.
usbcore: registered new interface driver snd-usb-audio

cat /proc/asound/cards:

1 [ Eyewear ]: USB-Audio – VR920 Video Eyewear
Icuiti Corp. VR920 Video Eyewear at usb-0000:00:1d.1-2, full speed

I was able to get mplayer to play on the device by setting the output device to hw=1,0 .

Sadly the mixer does not seem to work. At least the mixer levels are not controllable. Perhaps any alsa developer has an idea for this? It is even more important since the mixer control wheel at the device freezes after three steps when using linux.

More important than having controllable sound is to get the integrated headtracking to work. There is a non-working driver at vuzix forums. At least it can read the sensor data from the device but does not seem to handle the data correctly. I will look into this soon.

Update: My VR920 headtracking driver is now available here: VR920 headtracking driver for Linux

Playing with the device I had to find out that there is no jps stereoimage viewer for linux. The only programm I found, which is able to read jps-images, is gqview (GQView3D). Sadly gqview is not able to display theese images using active quad-buffered stereo. Thus I decided to write my own jps viewer. It will be based upon OpenSceneGraph (OpenSceneGraph) since I have some experience in OpenSceneGraph development. Perhaps I can integrate headtracking into it. Would be really cool to view a sea panorama image in 3D by turning the head :)

Stay tuned for updates.


1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)