Well, I finally gave into erco's subliminal messages
and purchased a Roomba.
I didn't purchase the June 17 (dead link removed) Roomba but I did purchase one from Woot on July 9 (dead link removed).
It cost $125 shipped and came with two virtual walls.
The robot does what I wanted to great. I have a room that frequently gets dirty and the Roomba makes it easy to clean it up.
But then I read that Roombas were supposed to be easy to hack. And sure enough they have a little serial port over the charge connector.
I finally got around to hacking the Roomba this weekend. It was surprisingly easy to get the robot moving and vacuuming.
I'm still working on getting the Roomba to drive smoothly. It can easily go straight ahead or rotate in place but nice arced turns have been a little harder to program.
Nice turns can be made with some practice with the controller but I hope to make them the norm with some changes to the program.
I'm using a PlayStation 2 controller to drive the Roomba. This is the same controller setup I'm using with this project
The challenge is the way the Roomba whats it drive information. It wants two bytes for speed and two bytes for radius. The problem arises when a particular radius can not be achieved because the given speed is too high. I just need to get out pencil and paper and compute the average speeds the wheels will have as a function of the radius given the outside wheel can travel up to max speed (500mm/s).
I use the arrow buttons on the left side of the PS2 controller to turn on and off the cleaning motors. The Roomba lets you program songs. So far I've just program an one octave scale going up then down. With a limit of 16 notes per song there isn't much room to do more than that. I do think you could make a longer song by breaking the song up in to 16 note portions and saving them as different song numbers. 16 different songs can be stored in the Roomba so that means a 256 note song could be stored.
I'm using a QuickStart board on the Roomba with a Nordic module for communication. I added a four digit 7-segment display to the setup to aid in debugging. A button on the PS2 controller toggles the display between speed and radius.
I'll post the code and hopefully a video when I get this working a bit better. I'm just excited at how far I've come in a couple of days.
Edit(2 June, 2020): Fixed links where possible. Removed unfixable links.
Edit(26 September, 2015): I've attached the archives Roomba110830c - Archive [Date 2011.08.30 Time 11.04].zip and Remote110827b - Archive [Date 2011.08.30 Time 11.05].zip to this post.
These programs were written when I was still pretty new to writing code for the Propeller. I hope the code isn't too awful.