Waving 2.0

Once I was able to digitize myself, the power of Kinect was truly realized. I initially made a digital drum set, with different virtual zones corresponding to different sounds. However as an Arduino lover, I wanted to make my next project have a physical component. Since I like to wave, I figured what better project than a friendly robot that can wave back.

The first step was to connect the Arduino to the computer. Since I was already using  Processing and had several prior programs interface between the two programs, this was relatively straightforward for me. The hardest step was to make sure that the correct COM port was selected.

The next phase of the project was to use Kinect to get the arm positions. Luckily there were Kinect skeleton libraries that made this relatively quick work. Transforming the 3d positions to 2d positions was also straight forward. The last step was reviewing some geometry so that I could determine the angle to send to the servos attached to the Arduino. The easiest way to send the data was through an array, so I just had to ensure that the angles sent to the Arduino matched my processing sketch. The video below is from the test to make sure that the Servos were controlled by my movements.

For my “robot” I wanted to make it very approachable. My goal with the Kinect platform was to have an easy way to introduce students to vision based projects. Therefore I was reluctant to make a finished machined metal or even 3d plastic robot – and I opted for a wooden robot like the example in “Making things See.”

The Making things See book was a fantastic start and resource for the geometry review/learning and the code. However I always try to use someone else’s project as a starting point and take it to another level to make sure that I learned the information. Therefore I added an extra arm:

I really like how this turned out… but I really didn’t like the jerkiness of the servos. Therefore my next step was to filter the input to the Arduino to get rid of this jerkiness. I looked into some filtering options, and I needed a quick and easy method to filter the data. I tried a rudimentary averaging filter. Lucky for me, this worked really well at reducing the noise!