I wanted to create a virtual puppet. The twist was that the creature did not move like a human, or perhaps not like anything on Earth. I wanted users to feel like a baby learning to walk for the first time.

My creature had seven muscle groups. Like your leg, accurate movement required controlling several muscles simultaneously. These virtual muscles, like their real counterparts, have many states (infinite even). A keyboard and mouse couldn't hope to provide interactivity with all seven muscles at once; It would be clunky and unnatural. I designed and built a physical interface to provide intuitive and natural interaction. Of course, this is an odd creature, so the controls were designed to be equally strange.

The movement interface was a series of levers. The levers varied by height, pivot position, length, and thickness. Some were placed such that they interfered with others. The state of the levers was determined using a series of potentiometers. This data was captured and processed by an Arduino board, which forwarded the lever states via USB to a frontend Java application that animated and controlled the creature.

The result was very fun. You really did have to work many controls at once to control direction. I've become pretty proficient, but first time users are baffled for a while.

Below is an applet version of the virtual puppet. The physical controls are replaced with seven sliders. I've simplified the movement by making single muscles powerful enough to move the creature. Of course, controlling this demo with a mouse is not nearly as engaging. Some photos of the physical hardware are included below.



Test application with virtual controls (applet above)
Final application using physical controls - large image

physical interfaces input
Two twistable knobs
Six twistable knobs with varying pivot points, heights, lengths, and shapes

physical interfaces input
physical interfaces input
Large physical interface - dangling levers measure 1.5 feet long
Reverse side of hardware shown above


Note: The applet uses McGill's Bias package to compute a convex hull.




© Chris Harrison