Friday, August 03, 2012

Finch: the Robot that Thinks it is a Keyboard

Following a tangentially related link from Mark Guzdial last week, I finally found the robot I was looking for: the Finch.

It is a pre-assembled robot developed at CMU and marketed commercially by BirdBrain Technologies. It has the same micro-controller as an Arduino Leonardo and a pretty standard array of sensors, RGB LED's in the nose, a buzzer, a molded shell, and of course motor driven wheels. Prices start at $99, with volume discounts.

The most distinctive aspect of the is robot is the way it operates while connected to the computer via USB. This has one major drawback, that you have to rather gingerly follow it holding the cable above it trying to minimize the influence of the relatively heavy cord on the light robot's movements. This will never be a precise drawing robot.

On the other hand, this approach has many advantages:

  • No radio keeps the cost low;
  • No battery saves money and means that the robot is always ready to go (especially important in schools) and can run indefinitely as long as it is connected;
  • Communicates via a simple command set over the USB Human Interface Device (HID) protocol so that it requires no special drivers;
  • Programs run on the host computer so there is no separate compile/download step for the robot;
  • You can control it from a variety of programming languages, hypothetically any that run on the host computer.

Right now, there are a variety of Java-based methods of controlling the Finch, including a Scratch knock-off, Jython and a Greenfoot module. What I'd really like to do is write a Turtle Art plugin for Vivian's XO. So I spent a couple evenings fiddling with PyUSB while watching the Olympics. Unfortunately, while using a protocol primarily used for keyboards and mice is clever, it is also obscure. As Dima Tisnek put it:

There is an enormous void of hiddev programming information out there... "in hiddev space none can hear you scream" kind of thing.

So I got to the point where I was facing a close reading of the USB HID spec, when I decided it might be easier to generate a Python wrapper for the C++ module provided by the Finch developers. I got the C++ source to compile and run correctly, so now I guess the next step will be to learn some SWIG.

No comments: