Roomba

I finally watched a Roomba dance its funky dance.

The iRobot Roomba 550 we affectionately named Butler spent a half-hour cleaning the 4 downstairs rooms of a home, sucking up an impressive gob of dust from the previous night’s party.

Hello, Roomba
Hello, Roomba!

I finally watched a Roomba dance its funky dance.

The iRobot Roomba 550 we affectionately named Butler spent a half-hour cleaning the 4 downstairs rooms of a home, sucking up an impressive gob of dust from the previous night’s party.*

As I watched Roomba, I realized I’d forgotten…

How much we are inclined to anthropomorphize technology.

How we’re wired to perceive complex reasoning where only simple behavior exists.

How important it is to have users on your side!
(Roomba was occasionally bumbling but always so helpful — looking everywhere for last night’s crumbs, remembering which area needs more attention, and just generally “doing his best.”)

First Impressions

The design of the unit is clean, sleek, and functional.

Roomba in Motion across the rug
Roomba in Motion, scooting across the rug

The “wall following” behavior is particularly clever and plays to the strengths of the round unit.

Object detection mostly works (it’s supposed to slow down before a bumper-kiss), but it was blind to some antique table legs on our test run, threatening to knock over some photo frames and antique china.

Its motion is smooth, and it successfully un-stuck itself from the curtains.

I loved watching it ultimately find “home base” by IR and dock with it, 2001 Blue Danube style.

But I worried..

  • About non-techie users having to choose a “home base” location. A sleepy Roomba needs to locate its home, but a resting Roomba is hardly showpiece décor.
  • About long-term battery wear and life.
  • About how often you’d need to empty the dust out of his bowels, and what happens if you forget to do so.
Roomba Cleaning Patterns (from the manual - click for .pdf download link)
Roomba Cleaning Patterns (from the manual .pdf)

Navigation & Hackery & Papers

Roomba uses behaviors like spiraling, wall-following and room crossing (as explained in the image, right, from the manual) to create its not-quite-completely-random walk.

And below, check out this very clever 30-minute long-exposure photo (found at SignalTheorist via Botjunkie) that reveals the Roomba’s “Lovely, Inefficient” cleaning path.

Roomba Path Long Exposure
Roomba Cleaning Path – Long Exposure Image

This brings us inevitably to the hacking. iRobot, to their credit, encourage you to hack Roomba!

Martha, whose Roomba apparently can bring her beer (wait… what?!), recommends the book Hacking Roomba. Here’s the book’s companion website.

Is anyone still using Microsoft Robotics Studio for stuff like this?  (ah, the memories of dancing Lego robots.)

In the meantime, with my head full of Roomba, it’s the perfect time to re-read some of iRobot Founder Rodney Brooks‘ seminal papers, like Intelligence Without Representation and Elephants Don’t Play Chess.

Because Elephants these days apparently can clean living rooms!

*the dust was left behind from the previous night’s party, in an otherwise impeccably clean home (i.e. not mine)

WPF Keyboard Navigation and Focus Considerations

Managing WPF keyboard focus can be a challenge, especially if you’re retrofitting an application that’s full of custom styles and templates, and lots of customized ItemControls, each of which was originally designed by your Designer principally for pointer-based input.

Tab-tab-tab between controls should “just work,” but it turns out, it’s a lot more complicated (with good reason) than just setting the tab order.

Mark Smith just posted a series of very practical series of three articles about this subject. However, he has no contact link or comments enabled in his blog (that I could find), so the best I can do is link to him here. Thank you Mark!

Part 1: It’s Basically Focus

Part 2: Changing WPF Focus in Code

Part 3: Shifting focus to the first available element in WPF

My biggest learning from this process? No matter what you’re buliding, don’t let keyboard focus in your application be an afterthought!