Over the Spring 2006 semester, I worked closely with Lee Thompson and Andrew Chizhik to built a virtual marionette. For those unfamiliar with the term, a marionette is a type of puppet controlled by strings (see Wikipedia). There were two components in our system: the physical marionette controller and the software to animate the virtual puppet.
I was primarily responsible for the hardware, which needed to capture three-degrees of motion: rotation left/right, tilt up/down and tilt left/right (yaw, pitch and roll respectively). This was achieved using a custom built, tabletop controller fitted with three potentiometers. Two were combined in a joystick configuration (giving pitch and roll) while a third, mounted above, provided 270 degrees of rotation. Using the controller like a real marionette, natural and unencumbered.
Values from the controller were read and processed by a BASIC Stamp board, which packaged the data and passed it to a computer running the front end. The user application was written in C++ and used OpenGL for the graphics. A simple physics engine provided momentum and gravity, which added to the realism.
Ultimately, the software and hardware that was developed could be used for a collaborative, remote, virtual puppet show. Several users, each with their own controller, could direct a cast of puppets. The movement data is simple (integer triplets), and could be streamed over the internet for a collaborative and totally remote puppet show.
|© Chris Harrison|