V-Rtifacts

How-To; Teardowns; Tutorials

Build Your Own Fluid-based Prismatic Stereoscopic Goggles

For 150 years people have been free-viewing stereoscopic photos (and more recently videos) in a side by side cross-eyed format, where the left view is positioned to the right of the right view. You’re force to cross your eyes like an optical contortionist. For eyeballs with less agility, this can become painful. By using prisms in front of each eye, the eye strain is eliminated. Here’s a truly unique DIY method for building such a viewer on the cheap.

Editor’s note: This article was originally published in Russian by Sergey Velichkin in “Science and Life”, a Russian magazine, and on his webpage. It was updated and translated, with the author’s permission, into English by V-Rtifacts contributor Mnemonic. Many thanks!

Introduction

Fluid-based prismatic stereoscopic goggles it’s full-color no-ghosting stereoscopic goggles tech, that everyone can make in a matter of several hours with use of materials for total cost about $1. No anaglyph or similar principles that can ruin colors, those prismatic goggles are working in other way.

The idea is simple – you know about cross-eyed method of viewing stereo-pictures; the idea of these goggles is to make optical device to view cross-eyed content from monitor, with which you don’t need to strain your eyes, bingo!

It’s working flawlessly on any monitor, even on printed-out pictures.

Construction

To make fluid-based prismatic stereoscopic goggles you will need following materials:

  • Transparent CD box
  • Plastic glue
  • 50g of Glycerol (can be found in drugstore) [we used 85% consistency and no flavor]

If you can’t find glycerol you can use distilled water, but glycerol has a bigger IOR rate and will give better characteristic to goggles.

You will also require following tools:

  • centimeter line (metal one is preferable)
  • knife (to cut plastic, office knife for example)
  • file or emery board (will be used to smoothen corners)
  • syringe (to fill prism with liquid)

Let’s Start!

From bottom-part of CD-box cut detail “A” (you will have needed size for detail automatically if  you will cut from side-to-side), you can cut only a few times, after that plastic can be broken by cut-lines.

Details: “B”, “C”, ‘D” must be made from black plastic of CD-box. Cut two notches in “C” membrane (on the top, and on the bottom) – this must be made to allow liquid and air move from one part of prism to another. Rub glance side of membrane “C” with emery, to make it matt. You will need to glue-in “B” & “D” details by matt side inside prism to minimize mirroring effect.

After you cut all the details – to fit ideally trim them, if needed. You can trim with a file or use your emery board.

When all details are ready, we can glue them together, lets start by glue part “C” to the middle of part “A”, then glue parts “E” & “F”, after this while glue is not dry yet you can fit these details together ideally and glue detail “B” to the bottom.

Give it to dry out totally, don’t let any holes appear, you can mix plastic-chips with glue, to make it denser, and fill all contours with such mix to exclude holes.

When construction dries, you can test it by filling it with cold boiled water. If you see fluid leakage – dry prism, and glue that holes again. After you will be sure that your construction is safe to fill with liquid – glue box top (detail “D”). Be sure to make small holes 3-4 mm diameter in “D” as it shown on picture, before glue it. After glue dry we can fill prism with liquid.

As a liquid for our prism, it’s better to use glycerol (it has better refraction capabilities than water), but if you don’t have glycerol you can use distilled water. To properly fill your prism with glycerol – use syringe, it’s very careful and slow process because glycerol is very dense, but little by little you can fill the prism, try not to make air bubbles, and fill your prism to maximum (some bubbles of air is ok). After you filled the prism, dry out holes and close them with sticky tape, or glue them with another plastic part.

Shutters & Mounting

To improve stereo-image quality, remove left and right mirror images (so only stereoscopic picture will remain visible), you can make shutters (from paper, or not-transparent tape), and fix them on prism with sticky tape as it shown on picture. By the way you can look on this prism from both sides. Size of shutters depends of your monitor, generally – 31 x 35 mm is ok.

How To Use

Just bring prism to your eyes and look at some cross-eyed format stereoscopic content, try to vary different distances to your monitor and choose the best that suited for you.

Other Materials

These goggles also can be made from organic glass (make certain it is shatter-proof), but it will require more sophisticated instruments and techniques! You can vary the size of prisms, but be sure to make 18 degree angle between its front and back surfaces.

Content

Any  cross-eyed stereo pair can be viewed with these goggles.

Here’s some interesting links for pictures:

Good collection of stereoscopic cross-eyed pairs can be found here: http://www.mtbs3d.com/gallery/

Movies:

Various short movies in side-by-side format can be found here:http://www.3dtv.at/Movies/Index_en.aspx

Many stereoscopic movies can be found on Youtube, search “stereo pair” or view this link:http://www.youtube.com/results?search_query=stereo+pair&search_type=&aq=f
Don’t forget to select cross-eyed mode in Youtube options.

Games:

If you have Queke3 by ID Software, you can download this stereoscopic mod to play with stereo-prism: http://games.mirrors.tds.net/pub/planetquake3/modifications/stereoquake.zip
Just unpack it into “baseq3” directory of Quake3 and run the game!
Example of how it looked can be found here: http://www.youtube.com/watch?v=tXvirxRK-Ww

Avatar game can output picture in cross-eyed stereo-pair, to make this: turn on stereo and select “side-by-side” output, also turn on “swap-eyes” option. You can download Avatar game demo here:http://www.gamershell.com/download_53202.shtml

Stereoscopic drivers:

There are two stereoscopic drivers on the market that can output cross-eyed stereo-pairs from DirectX games, they both payware, work in different ways, but both have trial versions, so you can try and choose which driver you liked most.

IZ3D driver: http://www.iz3d.com/driver
DDD TriDef Ignition driver: http://www.tridef.com/ignition/

Build a 2 DOF Wireless Head Tracker – Cheap!

Not long ago I needed a whole bunch of head trackers for just one week. Not wanting to invest tens of thousands of dollars in high-end tracking systems, I came up with an easy DIY head tracking system constructed from the guts of a Gyration Air Mouse. The Air Mouse contains a 2 degree of freedom (2 DOF – Yaw and Elevation) orientation sensor. In my application, users didn’t really roll their head (i.e. tilt their head from side to side), so 2 DOF actually worked pretty well. The tracker is really responsive with very little lag. I used Gyration’s Go Pro Air Mouse, but I suspect any of their Air Mouse family can be made to work. This article presents the hardware modification in detail and source code to integrate the tracker into your own software.

A quick disclaimer… The resulting head tracker will exhibit some drift over time. Its not perfect. However for short gaming sessions or experimental use, it is great. Also there are some good methods, explained at the end of this article, to minimize the drift.

Head Tracker in Action on a V6 HMD

Head Tracker in Action on a V6 HMD 

Step 1 – Tear out the guts of the mouse.

Start with a Gyration Cordless Optical Air Mouse

Start with a Gyration Cordless Optical Air Mouse

The Air Mouse is way too heavy to put on your head. Fortunately most of the weight is in the case and battery back, neither of which is needed. The actual circuit boards weigh less than an ounce, perfect for head attire.

Just Keep These 2 Pieces: the Receiver and the Mouse

Just Keep These 2 Pieces: the Receiver and the Mouse

Remove the Battery. Its not needed.

Remove the Battery. Its not needed.

To open the mouse case, first remove these 3 screws.

To open the mouse case, first remove these 3 screws.

Then peel up the 2 teflon pads on the bottom front of the mouse and remove the 2 screws under the pads.

Then peel up the 2 teflon pads on the bottom front of the mouse and remove the 2 screws under the pads.

The mouse case will come apart. Discard the dark plastic piece on the left of this photo.

The mouse case will come apart. Discard the dark plastic piece on the left of this photo.

Step 2 – Extract the Circuit Boards

To free the circuit boards, remove these 2 screws.

To free the circuit boards, remove these 2 screws.

Pull the circuit boards free. The tiny board at the tip of the mouse is lightly glued on. Pull it off the plastic bottom of the mouse.

Pull the circuit boards free. The tiny board at the tip of the mouse is lightly glued on. Pull it off the plastic bottom of the mouse.

Discard the silver plastic mouse bottom shown on the left of this photo.

Discard the silver plastic mouse bottom shown on the left of this photo.

Step 3 – Remove the unnecessary junk from the circuit boards

There’s a bunch of stuff that just adds weight and size that we won’t be using. You’ll need a decent soldering iron, an X-acto knife, and either a solder sucker or solder removal braid.

Pull the mouse wheel free and discard it.

Pull the mouse wheel free and discard it.

This is what’s left to work with.

This is what’s left to work with.

Side View

Side View

Separate the Big Board (with silver cube) from the little board.

Separate the Big Board (with silver cube) from the little board.

Step 4 – Remove more junk…

Unsolder 3 wires (Orange, Green, and Blue) from big board. These are the 3 wires that connect to the tiny board. Discard tiny board and attached wires.

Unsolder 3 wires (Orange, Green, and Blue) from big board. These are the 3 wires that connect to the tiny board. Discard tiny board and attached wires.

Unsolder these 3 black switches by prying from the top and unsoldering one side, then the other from the bottom.

Unsolder these 3 black switches by prying from the top and unsoldering one side, then the other from the bottom. 

Pry up switch while unsoldering from other side.

Pry up switch while unsoldering from other side. 

Here’s a switch with one side unsoldered. Just pull the other side free while unsoldering it. These are normal mouse buttons. You could keep them, or remote the switches elsewhere.

Here’s a switch with one side unsoldered. Just pull the other side free while unsoldering it. These are normal mouse buttons. You could keep them, or remote the switches elsewhere. 

Clip away the encoder for the mouse wheel. Its hard to unsolder. I remove it to reduce weight and size of the final tracker.

Clip away the encoder for the mouse wheel. Its hard to unsolder. I remove it to reduce weight and size of the final tracker. 

This is what’s left of the big board after removing the switches and encoder. You could remove the remaining 3 switches, but they’re difficult to unsolder and don’t weigh much anyway.

This is what’s left of the big board after removing the switches and encoder. You could remove the remaining 3 switches, but they’re difficult to unsolder and don’t weigh much anyway. 

Step 5 – Remove the power connectors and bypass Air-mode switch

The battery contacts are a nuisance and might short themselves out later on. We’ll remove them. Also the Air Mouse has an inconvenient 2D/3D switch. We’ll bypass it so that the tracker is always in 3D Air Mode, not 2D Mouse Mode.

Remove the battery contacts by prying and unsoldering one side, then the other.

Remove the battery contacts by prying and unsoldering one side, then the other. 

You’ll need to bend up the electrolytic capacitor at the bottom left in order to unsolder the contact underneath. Bend the cap flat to it’s original position when you’re done.

You’ll need to bend up the electrolytic capacitor at the bottom left in order to unsolder the contact underneath. Bend the cap flat to it’s original position when you’re done.

Solder a jumper across the Air Mouse switch. Wirewrap wire works well. The tracker should always be in 3D “Air” mode.

Solder a jumper across the Air Mouse switch. Wirewrap wire works well. The tracker should always be in 3D “Air” mode. 

Gyration_2445

Head over to the little circuit board. Remove the battery charger contacts by using a solder sucker to remove excess solder, then prying each side up while heating with a soldering iron.

Head over to the little circuit board. Remove the battery charger contacts by using a solder sucker to remove excess solder, then prying each side up while heating with a soldering iron. 

Solder sucker on underside of battery clips.

Solder sucker on underside of battery clips. 

Step 6 – Trim some extra circuit board away to make it smaller.

Make the big board a little smaller by trimming the mounting tabs with a Dremel cutoff wheel.

Make the big board a little smaller by trimming the mounting tabs with a Dremel cutoff wheel. 

Notice the “F” shaped PCB trace at the top. That’s the 2.4 ghz antenna. Don’t cut it away.

Notice the “F” shaped PCB trace at the top. That’s the 2.4 ghz antenna. Don’t cut it away. 

Step 7 – Setup the new power source.

I chose to keep my head tracker as a “wired” device, the wire being a 3 VDC power cable. However, you can choose to make it wireless at the expense of some extra battery weight.

Power cord. I like soft flexible 3.5mm stereo audio cable. Any 2 conductor cable will work. The Gyration draws less that 15 ma at 3 volts DC. Since this is a self contained wireless device, you could make it battery powered at the expense of additional weight. Three AA alkaline batteries start at 4.5 volts and would last about 100 hours until they discharged down to 3 volts. A CR2450 lithium coin battery would last 15-20 hours of continuous use.

Power cord. I like soft flexible 3.5mm stereo audio cable. Any 2 conductor cable will work. The Gyration draws less that 15 ma at 3 volts DC. Since this is a self contained wireless device, you could make it battery powered at the expense of additional weight. Three AA alkaline batteries start at 4.5 volts and would last about 100 hours until they discharged down to 3 volts. A CR2450 lithium coin battery would last 15-20 hours of continuous use. 

Connect Positive and Negative to the big board.

Connect Positive and Negative to the big board. 

Detail of the power connections. 3 to 4 volts DC will work. I mark the positive side on the PCB with a felt tip pen.

Detail of the power connections. 3 to 4 volts DC will work. I mark the positive side on the PCB with a felt tip pen.

Step 8 – Reassemble the boards.

Put the 2 boards back together.

Put the 2 boards back together. 

The boards are done!

The boards are done! 

Step 9 – Hooking up the head tracker

Its time to connect everything and fire it up!

This is the push button switch to automatically choose channels to match the receiver. Its on the underside of the small board. The Gyration manual tells you how to sync the transmitter and receiver. Do it once and its done forever!

This is the push button switch to automatically choose channels to match the receiver. Its on the underside of the small board. The Gyration manual tells you how to sync the transmitter and receiver. Do it once and its done forever! 

Solder on a 2.1 mm power socket on the other end of the 2 conductor cable. Be careful to put positive on the tip and negative on the sleeve.

Solder on a 2.1 mm power socket on the other end of the 2 conductor cable. Be careful to put positive on the tip and negative on the sleeve. 

A Radio Shack 3 VDC 500 ma supply works well. The connector should be CENTER positive.

A Radio Shack 3 VDC 500 ma supply works well. The connector should be CENTER positive. 

The completed tracker board assembly.  Don’t forget to strain relief the power cord when you put this assembly in an enclosure.  The component at the upper left labeled “DS1” is an activity LED. Whenever you move the tracker, this green LED will light in synchronization with the green Status LED on the USB receiver.

The completed tracker board assembly. Don’t forget to strain relief the power cord when you put this assembly in an enclosure. The component at the upper left labeled “DS1” is an activity LED. Whenever you move the tracker, this green LED will light in synchronization with the green Status LED on the USB receiver. 

The Gyration receiver connected to a USB port on the back of the computer. Don’t install the Gyration software CD. Just let Windows install it’s own driver.

The Gyration receiver connected to a USB port on the back of the computer. Don’t install the Gyration software CD. Just let Windows install it’s own driver. 

Step 10 – Packaging

I made a little thermo-form enclosure out of thin textured styrene. The cube is positioned bottom down. Rather than make the enclosure thicker, I chose to have the cube stick out the bottom, inasmuch as the velcro I used to secure the tracker to the helmet matches the protruding height of the cube.

Top view. Vacuum formed case with peephole for channel switch.

Top view. Vacuum formed case with peephole for channel switch. 

Silver cube sticking out of underside of case. Soft Velcro to attach to helmet.

Silver cube sticking out of underside of case. Soft Velcro to attach to helmet. 

Finished tracker in enclosure - side/bottom view.

Finished tracker in enclosure – side/bottom view. 

Step 11 – The Software

To Windows, the Gyration looks like a mouse. Most PC games handle mouse input directly and you won’t need any added drivers or software at all.

If you’re writing your own game, the code below provides a basic low level interface in raw mode to avoid window focus issues. You will still need to scale the coordinates so that one revolution of your head translates into one revolution inside the game space.

Call InitRawMouse() once at the beginning of your application to set up your tracker. Then call getRawMouse() whenever you need Yaw and Elevation

The code works just fine, but doesn’t do anything graceful with error conditions. Feel free to clean it up!

#if (_WIN32_WINNT < 0x0501)
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include
#include
RAWINPUTDEVICE Rid[1];
void InitRawMouse()
{
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY; // adds HID mouse and ignores legacy messages
Rid[0].hwndTarget = 0;
if (RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) {
//registration failed. Call GetLastError for the cause of the error
}
}
Int getRawMouse(LPARAM lParam, long *x, long *y)
{
UINT dwSize;
RAWINPUT lpb;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize,
sizeof(RAWINPUTHEADER));
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, &lpb, &dwSize,
sizeof(RAWINPUTHEADER)) != dwSize )
{
return 0;
}
if (lpb.header.dwType == RIM_TYPEMOUSE)
{
*x += lpb.data.mouse.lLastX;
*y += lpb.data.mouse.lLastY;
}
return 0;
}
/* Below is a sample of what your Windows event loop
might look like. Look for a WM_INPUT message and
pass it to the function OnInput() which calls
getRawMouse() to update two static variables:
Mouse_x and Mouse_y. Somewhere else in your
program you probably want to scale Mouse_x
and Mouse_y to be degrees, radians, or whatever
form your program represents angles in.
*/
OnInput(LPARAM lparam)
{
getRawMouse(lparam, &Mouse_x, &Mouse_y);
}
LONG FAR PASCAL
WinVisProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
// Other messages
case WM_INPUT: // WM_INPUT
OnInput(lparam);
break;
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}

Step 12 – How to minimize tracker drift

I discovered three different ways to minimize the inherent drift in the Gyration sensors:

  1. Most of the drift resulted from dropped RF updates from the transmitter to the receiver. Even though the Gyration is spec’ed for 100 ft. of distance between the transmitter and receiver, I found that it started to drop updates at around 5-10 feet, or more. That’s not a problem as an air mouse which is a relative device, but is troublesome for an absolute orientation device such as a head tracker. My solution was to put the receiver at the end of a long USB extender cable so that it remained close to the tracker transmitter. In retrospect, given that I worked with the “wired” power configuration described above, I could have brought the USB cable up to the VR helmet and tracker transmitter, thus putting the receiver within inches of the transmitter and tapping power directly from the USB port.
  2. Some drift is induced by turning the tracker very rapidly; on the order of 200 deg. per second, or more. In practice, this is quite difficult to do while wearing a helmet. Neck injury will likely precede any drift.
  3. As a failsafe, I used an extra button on my hand controller which reset (in software) the mouse X/Y position to horizontal/forward. If the tracker drifted to far, the user could simply hold their head in a normal forward position and click the hand controller reset to get the tracker back in sync with their orientation.

VRASP, Pix-Elation, and Phlogiston

1992 brought a non-virtual swarm of young and eager students to every VR event (and there were WAY too many) under the sun. Perhaps there were massive show discounts for attendees who were too young to drink legally, but members of the Virtual Reality Alliance of Students and Professionals (VRASP) were everywhere. You’d think this would be a major annoyance for the corporate crowd, but au contraire; what a joy to hang with the best and brightest… no hype, no BS, none of the pretentiousness so evident elsewhere in VR-land. VRASP directors included both VR industry management and an incredibly motivated and knowledgeable cadre of university students.

VRASP was the brainchild of Karin August, a Rutgers alum, and all around energizer bunny (Karin where are ya now??) Among other things, she and her cohorts had no problem moving right into a spare room at my company’s office; in exchange we got a full page inside-cover advertisement in VRASP’s almost-monthly publication Pix-Elation (Read a sample issue: Pix-Elation Issue 11) Taken from VRASP’s statement of purpose:

VRASP encourages immersion, interaction, and information dissemination amongst our membership, as well as between people and technology. Each VRASP Cell holds educationally-oriented meetings and events at which VRASP members get to socialize “ftf”, sharing their eclectic knowledge and cooperatively pursuing a future where Virtual Reality is a Reality.

There was certainly an element of socialization from Gordon Biersch to the Carnegie Deli, and this was reflected in their ‘zine: Pix-Elation. Columns like: “Dear Glovey”, “Lawnmower Lounge Lizard”, and “Fraunhofer Frolic” put the tease on; was Captain Beefheart inside?  Anyway, no need to pimp ’em further. Just read the ‘zine and weep!

Ascension Technology SpacePad 6DOF Tracker Teardown

Six degree of freedom (x, y, z, azimuth, elevation, and roll) are hard and expensive to come by these days. Stuff like the Wii remote, iPhone, and Droid only track rotations, not fine position (yes the GPS will find you within +- 10 meters, but I’m talking about millimeters here!) Magnetic tracking schemes dominate the 6DOF market, and the leaders after 20+ years still remain Polhemus and Ascension Technology. These magnetic systems have a set of transmitter coils which create oriented magnetic fields. One or more sugar cube sized receivers use three coils to read these magnetic fields and use that information to quickly and accurately determine the receiver position and orientation.

A brief video demonstrates the Ascension SpacePad, shows all the individual components, tears down a transmitter coil, and walks you through programming the whole system on your PC:

Tearing Out the Guts of a Virtual Research VR-4 Helmet

Last week I shredded a Liquid Image MRG2.2. This week we go for the classic Virtual Research VR-4 stereoscopic head mounted display. There’s a lot to love about the VR-4: wide field of view optics, adjustable interpupilary distance, coated aspheric lenses, excellent fit to different heads, and provision for eyeglasses. The optics are timeless; used again in the V6, V8, and 15 years later in today’s Virtual Research VR-1280.

All these HMDs rely on 1.3″ displays… so the challenge is out: to find improved LCDs to drop into the classic VR-4, although the resolution of the original displays isn’t half bad.

So… in two parts… have a look inside the VR-4.


and

Liquid Image MRG2.2 Disassembly and Potential Upgrades

I’ve gotten a ton of emails hurled at me about the Liquid Image MRG2.2 VR helmet. The gist of most of them is: “Hey, I love the wide field of view and how rugged the MRG2.2 is, but I wish I could upgrade the LCD resolution, and, is there a way to make this HMD stereoscopic?”

It’s time to hurl the challenge back at you. These two videos explain in detail how to tear down an MRG2.2, what each of the components are, how they interconnect, and suggestions for how this puppy could be upgraded. If that’s not enough, head over to the V-Rtifacts store for a FREE download of all the technical info on the Sharp LCD, backlight, and all the MRG2.2 cable and connector pin outs.

There ain’t no doubt that the LCD resolution can be upgraded, but the challenge is to see who can do it the most cost effectively. Stereoscopic viewing? The video suggests some possible approaches, but they’re untried as far as I know.

Part 1

Part 2

Typical desktop magnifier, similar to what's used in the MRG2.2

As you might have already guessed, my attorneys from Itchy & Twitchy, Esq. want you to know that disassembling and modifying electronics and power supplies can be dangerous and even life threatening. Don’t mess with this stuff if you don’t know what you’re doing. Thanks to Itchy and Twitchy, you really shouldn’t mess with this stuff, even if you do know what you’re doing. If you zap yourself, it’s not my fault; you were warned. And… don’t rub that thing, you could go blind!