Hover over parts of the image to see links and info on them. Disclaimer: I don’t endorse any of these products nor do I work for any of the organizations producing, marketing or selling them.
High-resolution image here.
I set up beagaroo to be controllable with my TI EZ430-Chronos development kit (ahem watch). The watch has accelerometers whose data can be transmitted to a wireless access point. The data can be read out from the access point as if you were reading over a serial port.
I also multi-threaded my program such that the thread writing wheel-speeds to the Roomba actually smooths out its output. This is done such that the difference between the set and requested speed halves on each iteration. I don’t need a feedback loop like PID because that’s already built into the Roomba. The Roomba does allow you to make dramatic changes to the inputs that can harm the motors and mechanics. The smoothing ensures this doesn’t happen.
The manual control with the watch was also a test of this algorithm. There are delays between my actions and Roomba’s movements. So there might still be some fine-tuning to be done with the smoothing.
So here’s a video of all this in motion:
I own a beagleboard (Every embedded-systems enthusiast should own something like it). I have been tinkering with it for some time. I’ve always been fascinated with robots and have build a couple from scratch, not this one though.
To me, the most interesting software is one that interacts with the real world. One example is the current incarnation of Jetsons’ Rosey: Roomba – An awesome robot vacuum cleaner. I decided to use the roomba as a starting point for my project. iRobot have been nice enough to include a serial interface that allows you to control the robot and read its sensors.
Thus, beagaroo was born:
So far, I have my beagleboard connected to my roomba over the Roomba Open Interface. I’ll continue to develop this robot over time. Stay tuned.