What I ideally wanted was this: a form of movement that allowed for walking/running without the user actually moving (distance/position wise), a form of tracking the user's bodily motions, and a visual system that would completely surround the user.
Body Tracking
I started my research with the different methods of body tracking. Because I have used Wii remotes in multiple pieces, I knew the possibilities and limitations of the device, but I had extremely limited experience with both Sony’s Playstation Move and Microsoft’s Kinect. I had only used each device once prior during last summer (2010) at the Electronic Entertainment Expo trade show in Los Angeles. During the show, I managed to spend a few minutes with each device to explore their potential. Unfortunately, the amount of time allowed was not nearly enough to make an informed decision.
Luckily after the Playstation Move came out, a friend of mine bought one, and I was able to more extensively experiment with it. As I suspected, the peripheral seemed to be more accurate than the Wii remote in many regards; however, it had nearly identical limitations. For example, both devices work by combining light tracking by a camera and information from internal gyroscopes. If the device is moved behind something, obscuring the light from reaching the camera, the only information available comes from the internal gyroscopes. Alone the gyroscopes can become very inaccurate over time due to what is known as “drifting.” The gyroscopes work by measuring gravity on three different axes of movement. However, only two of the axes can depend on gravity at once while the other must be measured by other (far less accurate) means. Imagine a ball in a bowl. If you tilt the bowl by moving your left hand up and right hand down (or vice versa), the ball will remain in the center of the bottom of the bowl; the same thing occurs if you tilt the bowl back or forth. The device is able to detect that the “bowl” has moved, but the ball is still in the middle; therefore, it is very accurately able to detect the current rotation of the device as a whole. However, if you were to rotate the bowl left or right (as if it were on a Lazy Susan), the ball would still be in the center, but the device would not be able to tell that the bowl was moving. At least, not as easily as the other two axes. Over time, the estimation of this less accurate axis is thrown off. In addition to this, if one were to flail the device around quickly enough, the measurements for all axes would likely be thrown off relatively quickly. So again, while it seemed the Move was, for the most part, more accurate than the Wii remote, it still had the same problems. Plus it is twice as expensive and far less durable than the Wii remote. So far, the Wii remote still seemed to be the best bet.
Soon after, Microsoft released the Kinect. One day I decided to go out and buy one to test it out. On top of this, people around the world had been hacking the living daylights out of the device and were doing some really unique things with it. I figured that with so many people working on it and with all of the shared code out there, it was a very real possibility that I could use a Kinect for the piece. After playing around with it for a bit, I realized that this was indeed a very powerful device though it too had its limitations. The device works by combining information from an RGB camera and an infrared camera. With the combined information, the Kinect is able to basically create a virtual 3D representation of whatever is in front of it. Programmed software takes this information and creates a bone structure for any people detected within the frame. With the virtual skeleton, the device can accurately track the person’s movement. However, this 3D environment is only based on the front faces of whatever it sees. For example, it can create an extremely accurate 3D representation of the face of someone facing the device, but it has no information about the back of that person’s head or anything that may be behind the person’s head. For all the device knows, there isn’t anything behind the person’s face. So if one were to turn to the side (as would be very possible in my piece), the Kinect would likely only see one shoulder, one arm, one hand, one leg, and the head; the entire other half of the person would be obscured by the side facing the device. If this were to happen, the Kinect would not be able to accurately track the person’s motions. In addition to this, the device is so new that, despite the large amount of people working to hack it, there is really very little usable code to work with it; everyone is still developing their own methods and very little shared code has been released.
Another considered method was inspired by both the Wii remote and Playstation Move as well as actual motion capture – in other words, tracking light. I have previously made a motion capture suit and used it in a project, and I found that lighting is extremely important in such a situation. With all of the projectors I planned to use, there would be light passing through the sphere/cube onto the user, and this would most likely make it incredibly difficult to accurately track both reflective balls and small LED lights attached to the suit. In addition, it would be very hard to create a suit that fit everyone, particularly considering the importance of the lights’ locations on the body.
With all of this in mind, it seemed that the Wii remotes were still the best way to go. Because of this, I began to do some research into a nifty little program that I have used before – OSCulator. This program, among other things, allows Open Sound Control (OSC) messages to be sent to different computers/applications based upon some connected device. OSC messages are generally used for music creation/synthesizing, but the creator of this program has worked Wii remote functionality into the program. This makes it very easy to connect and send/receive data from connected Wii remotes. While I had used the program before, I had never used it with Wii MotionPluses connected. Some research went into seeing how to send/receive data from the MotionPluses, but due to the program’s ease of use, it wasn’t long before I had that all figured out.
The bigger problem came from connecting the number of Wii remotes I wanted to use. OSCualtor has the ability to store up to eight Wii remotes in its memory at a time. This allows for quicker connection for those eight registered controllers. However, only four remotes can be connected at any one time. I needed far more than that for my piece. Many methods were tried, and most of them failed. The program has the ability to duplicate messages so that each one message can be sent to multiple targets. However, due to the way the program receives data from the Wii remote, this did not work. I found that OSC messages could be routed to a router, and thereby received from any OSC-ready computer on the network, but after many attempts, this too failed. Eventually, I found out that more than one instance of OSCulator could be opened on one computer. This had not occurred to me because this is not possible in many Mac applications. But with two (or more) instances open, I could essentially send different messages to and from the different instances. By doing this, I could connect four Wii remotes to a “host” computer as well as four remotes to one or more “client” computers. The client computers could send the data to the different OSCulator instances of the host computer. Because the host computer had two (or more) instances of OSCulator running, each sending and receiving data from four different Wii remotes, I successfully had the sufficient number of connected Wii remotes.