I, like many people, own a robotic vacuum cleaner. It's crap. With all the advanced robotic technology it has on board, it's still lacking in vacuum cleaner technology. Although it is bagless, it's not the good kind of bagless. There's no double vortex mechanism here. In fact, there's very little suction on it at all. That's kind of important for a vacuum cleaner I think. Besides which, the robotic technology isn't all that "advanced" anyway. It still gets stuck in corners or on that same part of the rug. So when I feel the carpet needs a bit of a spruce, I pull out the trusty Vax and put my back into it.
Where's my maidbot? It's been 40 years since the The Jetsons and I am still waiting for my flying car, err, I mean, maidbot. Now, of course, I realise that it would be a bit expensive to get together a crack team of Japanese scientists just to make me a maidbot (and yes, they have to be Japanese scientists) and that no amount of mass production magic is going to make a maidbot affordable any time soon, but say I was a rich man, could it be done? How would it be done?
Making a robotic vacuum cleaner is pretty easy I think. Yes, there is lots of hard problems to solve, but overall, the task of a vacuum cleaner is pretty simple: remove dust from carpet. The task of a maidbot includes that too, but it includes so much more. There's removing dust from glassware. There's removing dust from tabletops and other services. There's the whole damn removing dust thing, yes, we get that, but that's not all! Dust is a bad thing and I'd love my home to be free of it, but it isn't what I call "mess" and that's what I want my maidbot to clean up. Frankly, I'd be happy to have a seperate dust-patrol-bot to take care of the dust, and the maidbot can do all the other stuff.
So what is this "other stuff" I'm talking about? I mean, that's pretty vague. If I was to take that specification to my Japanese scientists they might come up with all sorts of things. Probably things that involve automatic weapons or lasers or something. That's Japanese scientists for ya, and I think the reason why I still don't have a maidbot is precisely that: no-one knows what the hell it is supposed to do. Not to the level of detail needed by Japanese scientists anyway.
I've spent all day (well, some of the day, well, a few hours) cleaning up my dwelling and I think I know what it is all about now. I've had one of those rare moments of clarity where, as an engineer, you step back from the situation and think "I could code something to do this." And here it is folks: cleaning is all about classification.
Last time I looked, the state of the art in computer vision technology was the Scale-Invariant Feature Transform algorithm. Given an arbitary object, it can extract features which it can then recognise at a later date, regardless of how the object is rotated or scaled. There are techniques for quickly recognising a large catalog of objects, but I don't think these algorithms run in real-time, nor has anyone attempted to use these features to build categories of objects. So, some refinement of the state of the art is necessary.
Instead of just recognising objects, our maidbot will need to recognise the common features that objects which are already in close proximity, say, on a shelf, have. Then, recognising an object that is not lying in a grouping of similar objects, i.e., a misplaced object, determine which grouping of objects shares the most number of features and placing the misplaced object with that group of objects.
Of course, the maidbot can't just chuck the object with the others and claim it is now tidy.. Books are stacked on shelves in a particular way. Your way of stacking books is probably slightly different to my way of stacking books. This is procedural knowledge that the maidbot needs to be able to reverse engineer from examples and mimic. I'm not aware of any state of the art in this area.
Oh, and there's that binary classification which every maidbot should place higher priority on than any other possible classification: clean or dirty. Otherwise the Japanese scientists are likely to come up with a maidbot that puts dirty cutlery in the draw and clean cutlery in the sink/dishwasher. However, so long as the maidbot has done a good survey of the various collections of objects in the house before it starts cleaning, I don't think it will require any special case programming. The maidbot will see the collection of knives, forks and spoons in the draw and the collection of knives, forks and spoons in the sink and, needed to seperate the classifications of these two groups of objects, it will determine that one set is clean and the other set is dirty. So the dirty knives, forks and spoons will better match a misplaced dirty knife, fork or spoon and so the maidbot will not mix dirty cutlery with clean cutlery.
Of course, the best way to test this hypothesis is to wait until we have running code and then tweak as required.