One of the electives I chose, Introduction to Robotics and Perception, had a semester-long group project of programming a WowWee Rovio (tech specs and api available on linked product support page) to do various tasks:
- Given a file from the professor indicating waypoint coordinates, have the robot autonomously travel to them
- Given a colored object, have the robot autonomously detect it via webcam and move to park inches from it
- Given a hallway with multiple similar colored papers, have the robot use the webcam to map the environment
- Have the robot perform autonomous SLAM (simultaneous localization and mapping) after being picked up & placed back down elsewhere in the same hallway, eventually returning to a “home” position after figuring out its new location.
The Rovio can receive commands over 802.11 wireless and send back images taken with its webcam, but on its own, it’s not actually programmable.
And as our class and professor discovered, no group’s Rovio had wheel encoders that would return data in the way the API claimed; we all found ourselves relying on dead reckoning.
Our group chose to write a Java program that would run on a laptop to connect to the robot, send movement commands, and receive webcam images for decision-making. Though each of us had a hand in helping the others with their portions, for the most part:
- Shawn handled netcode
- I handled image processing
- Jon handled the data structure for mapping and SLAM
- John helped come up with code optimizations or algorithm alternatives
- Saba helped with bugtesting & troubleshooting
Though there was room for improvement on the very last milestone (our robot was more consistent at performing SLAM successfully if placed in certain parts of the hallway instead of others), our group was generally at the head of the class.