Let's talk about robots. More specifically, let's talk about robots that suck. Yes, those wonderful vacuum-cleaner robots.
I've got a Neato XV-11. It's a pretty fancy machine. It's got a schedule feature and it leaves and returns to its charging station all on its own -- so in theory, all you have to do is empty its dust bin every once in a while and you're set.
But we don't quite live in a sci-fi world. Instead, this machine has a couple of quirks that change my impression of it from "awesome futuristic domestic robot" to "somewhat useful mentally-deficient pet".
So the biggest problem is that it loves to eat power cords and carpet fringes. Naturally, being a geek with a bunch of rugs, this makes my house a hostile environment. Whatever, that's my fault for leaving stuff out. About one out of every ten runs it'll chomp down on a carpet fringe and get stuck. Fair enough.
And if it just stayed stuck, that'd be great. It doesn't. Or rather it does, but it also decides to tell you about it with one of its distress beeps and a notification on its backlit LCD screen. Now you're probably thinking "Wait, that sounds like a good feature, no?" Yes, it would be. Only it doesn't just do this once. No, it will do this every couple of minutes forever. Well, not quite forever. Just until its battery dies.
That in and of itself wouldn't be too bad were it not for one extra quirk: when it runs out of charge (or at least enough that it shuts off) it loses its clock setting. Strangely, it will almost always have enough charge to turn on again when you press the power button so you can immediately find this out -- just apparently not enough to stop it from shutting off in the first place.
All of these things come together to cause something that seems like the following:
My brush is stuck! My brush is stuck! My brush is stuck! *thud*
Oh! Hi! Say, what time is it?
C'mon Neato, a CMOS battery costs like what? 80 cents in volume? Stick a small backup battery in there to power the clock when the CPU's off and call it a day.
The second issue is a combination of a mechanical engineering problem and a software engineering failure. First the mechanical. So the vacuum's pretty sophisticated in that it has this neat little conning tower in which sits a laser "eye". This eye spins around in a circle within the tower and bounces a beam off of the robot's surroundings, mapping it using what I can only imagine is a pretty efficient sampling algorithm. It builds a map of the room and uses that to navigate around and avoid obstacles.
That part's cool. Well done. There's one flaw though. So you know how I said "map of the room"? Yeah, not quite. It's more a "map of about 4 inches off the floor of the room". Which is fine, except there are plenty of things in my house that have overhangs and lips that are, say, 4.1 inches off the floor. You might see where this is going, huh? So the robot will dutifully run into those things with the top of the conning tower (which is, obviously, slightly above where its eye can see) and... well this is where it gets fun.
See Neato solved the problem of running into things that are below the conning tower. They've got a nice little bumper with a switch on the front, and when the robot runs into something that trips it, the behavior is to back off, turn, and carefully edge forward again. If you've ever seen a Roomba, that's pretty much the idea (only it doesn't need to do that for everything like Roomba does, just the stuff it can't "see"). But there's no bumper switch on the top of the conning tower. No, instead when the robot hits something that it can't see and can't feel, the behavior is apparently to dig its little wheels in and try harder until it realizes that it isn't moving. This takes it about ten seconds.
And now we get to the part of the algorithm that I think the interns wrote, because after it realizes that it's not moving it backs up and... tries again. It doesn't turn, doesn't edge forward slowly, nope. Screw it, if it didn't move before maybe it'll move now, right?
This generally goes something like:
*slam* *whir* *whirr* *whirrrrr* (silence) *whir* (silence) *slam* *whir* *whirr* *whirrrrr*
And so on, until I get sick of it and either pick it up or shut it off.
No, you're not going to move it. No, you damn robot -- it's an end table that's about ten times your height and weighs about fifty pounds. You are not moving it. You are denting it and you. Stop it.
*slam* *whir* *whirr* *whirrrr*
Look on the bright side: if Skynet ever does take over, if Neato designed it then I might be able to survive by just standing on an ottoman.