Roomba Challenge #1 is a set of "cattle chutes", i.e. a maze with 1 path and no detours. The maze is 6ft by 12ft and requires the Roomba to make several turns to reach the end. The maze can be "short cut" for a faster time via some measurements and sensing.
Though the first maze is relatively easy compared to the other two, setting up the environment will provide that extra bit of frustration that makes it on par with the other mazes. The challenges that you will will be exposed to in this first maze are as such (maybe more?):
- Getting Roomba and your computer interacting
- Understanding how to communicate with Roomba via the Processing language, which is actually something like Java
- Developing an algorithm/solution to solve the maze
- Implementing and testing the said algorithm
- Compensating for the error introduced by controlling a physical entity through digital means
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting sitations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come the third and even the second maze, you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.