FIDO is a robotic dog that fetches tennis balls. FIDO is an acronym for Fetch Interesting Deliverable Objects. Physically, he looks like a small dog perched on a skateboard-like platform about 20 inches long. The platform has 2 differentially-driven wheels and two omni-wheels that act as casters. His body is made of orange acrylic; the skateboard platform is made of white Sintra expanded PVC. His body has 5 axes of hobby servo motors: front legs up/down, neck up/down, head left/right, mouth open/close, and tail wag.
FIDO uses a webcam to locate a tennis ball, drives up to it with the platform, uses 3 Sharp IR sensors to guide the final approach, then opens his mouth and bends down to pick up the ball. He then attempts to detect a human face (any face at all), drives up to the person, and uses his head and mouth to toss the ball toward the person, then waits for them to toss the ball again. He can follow a slowly tossed or rolled ball, but a fast ball will elude him at this time, due to limitations of the webcam, processor, and software I'm using.
FIDO's main control system is a Core-I3 processor on a mini-ATX motherboard. This is the third brain FIDO has had. The first was a Beagleboard XM, but it didn't have the performance to do computer vision. His second brain was a Sony Vaio subnotebook with a 1.2GHz single-core processor, which worked OK for ball recognition, but wasn't adequate for face detection. The Core-I3 seems to finally have enough performance to do what is needed. It's running Linux (currently Ubuntu 12.04); the high-level software is written in Python, making use of the OpenCV software for ball and face detection, and ROS (the Robotic Operating System) as the glue that holds things together. Beneath that, there is an Arduino handling low-level motor control and data aquisition from the IR sensors, and a serial servo controller for the 5 servo axes.
At this time, FIDO can see a ball or a face about 8 feet away. I'll probably have to get a better webcam to improve on that. The fetching algorithm is working pretty well, but the face detection is still somewhat problematic; I can't seem to detect a face while FIDO is moving, so he has to rotate a bit, then stop and look for a face, then rotate some more, etc. I just added sound capability, so that he can bark or whine to indicate his mood.