This class was structured around a final project. Our task was to design a robot to complete a complicated task without any human intervention. The task changed from year to year, but remained focused on the goal of collecting items and sorting and distributing them appropriately.
Overview:
The robot would be placed in a square arena measuring about 2 meters on each side. In one corner of the arena, a ping pong ball distribution chute would drop randomized black and white ping pong balls when a laser trip was triggered. Every time we wanted a ping pong ball, we would need to trip the laser. The robot must collect these balls and only hold four at any given time. In each of the remaining three corners of the arena were collection nets. At any given time throughout the task, one of these corners would be "active". This is indicated by a visible LED light on the top of the corner and an IR LED light inside the arena. The robot was tasked with sensing the color of each ball it had collected and delivering the black balls to the "active" corner, and the white balls to any "inactive" corner. Points were associated with correctly delivering balls and point losses were associated with incorrectly delivered balls. A time limit was established and the total number of correct deliveries factored into the final score of the robot. Black lines were included on the bottom of the arena to help provide navigational aid to the robot. A part from the initial start button, no human intervention was allowed. The robot was required to perform the task alone.
To be successful, our robot needed to be able to perform line following navigation using IR QRD sensors. These allowed the robot to recognize where the lines were and follow the path leading to and away from the distribution corner. Our robot needed to trigger the laser trip to distribute balls. A "tail" was wagged to hit the laser beam every time we wanted a ball. This needed to be precisely controlled so that we knew exactly how many balls we had at any given time. Then, the robot needed to catch the balls as they were distributed and make sure that they were directed to where they needed to go in the robot. A simple funnel led into an "s-bend" shape to store 4 balls without getting them stuck. The balls were gravity fed down to a servo arm which fed each ball into our firing mechanism. Then with balls in hand, the robot would need to navigate to the center of the arena, sense the color of the first ball, and fire it from the center into the net at the correct corner. In order to detect the "active" corner, IR sensors would be used to ensure it knew where it was pointing and where it needed to point to successfully deliver the ball. The ball firing mechanism needed to be reliable and accurate enough to consistently deliver the ball without losing too much time. A spinning flywheel would shoot the balls with a consistent velocity and angle every time.
This project pushed us to our limits. Each task was sequentially designed, implemented, and tested. We build up the capability of the robot one step at a time. Then, when we had several steps working properly, we would integrate them and test together. Inevitably, things would break down and what would work before no longer was successful. This forced us to be systematic in our troubleshooting and testing. We tried our best to rule out sources of error as quickly as possible as our deadline loomed closer. Late nights and early mornings in the lab contributed to the difficulty of the project. We found that extensive shielding to our signal wires was required to avoid interference from our motor and power wires. After lots of testing, we were starting to see success.
We had two attempts to complete our task. Our first attempt was unsuccessful due to a firing issue. We were down to our last shot. The final performance of our robot was worth all the effort as we saw a flawless completion of the task and one of the highest scores in the class.