In the summer of 2007, iRobot ran a competition for projects built on their Create platform. I had an OLPC XO laptop, a Roomba, and a webcam. The result was Fido — an autonomous telepresence robot held together with duct tape that ended up on Engadget, Wired, and MAKE.

Beer Condition Met

The first milestone was simple: SSH into the OLPC, drive the Roomba around, and see where it was going. I wrote PyRobot, a Python library for controlling iRobot Create and Roomba robots, as a cleaner rewrite of iRobot’s openinterface.py. Then I strapped the OLPC to the Roomba with the webcam pointed forward, wrote a bash script to grab a snapshot every 5 seconds and upload it to my web server, and called it done.

The whole thing was held together with duct tape. I could SSH in from anywhere and drive the robot around my apartment while watching near-real-time images on a web page. Beer condition met.

The Instructable and the Contest

I published an Instructable documenting the build for iRobot’s competition. The pitch was straightforward: an OLPC XO gives you WiFi, a webcam, a full Linux OS, and Python — all for $200 (through the Give One Get One program). Strap it to a Create, write some Python, and you have a telepresence robot that you can control from anywhere with an internet connection.

It won third place. Free robot for me.

Night Vision and Arduino

The obvious limitation was that the robot was blind in the dark. I mounted flashlights using an inverted Gorillapod and added an Arduino to control them via relay, so the lights could be toggled remotely.

The Arduino opened up the platform significantly. Beyond the headlight relay, it could control any actuator or read any sensor I wanted to wire up. A friend suggested I call the project Fido. LGTM.

PyRobot got a web UI with logging, soft resets, and enough error handling to keep the robot running unsupervised. I added Flite (a text-to-speech engine from CMU) so Fido could talk — just modprobe snd-pcm-oss on the OLPC and it worked.

Multi-Day Uptime

Fido learned to dock. By piggybacking on the iRobot’s built-in docking algorithm, the robot could find its charging station and manage the OLPC’s power. It ran for multiple days without intervention. The web interface gained dynamic sparkline charts for sensor data — battery voltage, cliff sensors, bump sensors — all rendered in the browser.

At this point, everyone I talked to said “surveillance.” Simple surveillance is boring, though. My goal was to have Fido automatically generate panoramic views of each room in my apartment.

Internet Famous

In November 2007, the project hit the tech press:

  • Engadget — “OLPC XO and iRobot Create brought together for telepresence hack”
  • MAKE — “Roomba meets the XO-1”
  • Gizmodo — “XO Laptop Hacked to Remotely Run Roomba ‘Round Rooms”
  • Wired — “OLPC Telepresence Hack: One Robot Per Child”
  • Hackszine — “OLPC telepresence robot”
  • Ubergizmo — “XO laptop hacked”

Obviously I needed to include a USB missile launcher just to appease the masses.

Fido Erectus

Over the holidays I found my old Erector set and rebuilt Fido from scratch. The new frame was significantly sturdier, more configurable, and had room for all the sensors I’d been accumulating. I also upgraded from my beta OLPC (B1) to a proper XO from the Give One Get One program — much snappier.

Looking Back

Fido was my first real robotics project, and it set the trajectory for everything that followed. PyRobot led to a deeper interest in robot control software. The OLPC-as-robot-brain pattern — a cheap computer with WiFi and sensors strapped to a mobile base — was essentially the same idea I’d later explore with Android phones on robots, which led to SL4A, then Cellbots, then rosjava, and eventually Cartographer.

The project was pure duct-tape engineering, and that was the point. The OLPC cost $200, the Create was free (thanks iRobot), and PyRobot was a weekend of Python. The lesson was that telepresence robotics didn’t require expensive hardware or a research lab — just a webcam, WiFi, and enough software to keep the thing from driving off a cliff.