Outline

The goal of our project this semester was to design a recycling robot that would pick up an empty soda can and drop it off at the receptacle at the center of a 12x12 tile course, designated by a light. It would also roam the course picking up randomly placed blue and orange golf balls. We were given starting code, and a robot without any mechanism for picking up the can or the golf balls. Our strategy was a simple design that would do the required tasks consistently, but not necessarily in the shortest amount of time.

The course:

Programming

From a programming standpoint, each task was separated into multiple steps, resulting in embedded switch statements. The overall process was for the robot first to find the can, then reach the first light, locate and reach the correct refill station, find the last light and correctly place the can, and finally exit the course to distribute the balls. Also, during the appropriate sections when the robot was not searching for a can or light, the robot broke from its normal state and entered a ball catching state whenever it could see an orange or blue blob on the camera. Knowing the placement of the balls, the robot could easily find all orange balls on the way in and out of the course. However blue balls proved to be more difficult, so greater emphasis was placed on making sure all orange balls were collected and delivered to correct location.

In order to combat the increasing inaccuracy of the dead reckoning positioning using the optical encoders and the gyro sensor, code was implemented to update known orientations at various points throughout the course. This was especially critical for delivering the balls to their final location. We found that while the robot was following the wall, we could update either the x or y location on the course as well as the orientation with the help of the compass data. This proved to be very useful as the robot was exiting the course, as the robot was able to reach the final orange ball drop-off successfully and consistently.

Blue balls, while initially were very easy to spot from relatively far distances, ended up being missed by the camera unless the ball was stationary and right in front of it. This was surprising, as early tests showed that blue could be found both while wall-following and scanning with relative ease even when the balls were on the periphery of the robot's vision. Unfortunately, the deteriorating performance of our initial thresholds threw off our entire scheme for solving the course, and it was determined that orange should be given priority.

Mechanical

The gripper went through three iterative designs, the first one being a rough prototype of the ones to follow. We implemented two servo motors, one to lift and lower the gripper, and the other to open and close it. The first design was not very flexible in terms of positioning and adjustability, so the second iteration was designed with this in mind. Unfortunately it was top-heavy due to C-brackets near the tips of the gripper arms, so it was redesigned yet again, without the brackets. The second and third design used rubber bands to hold the can firmly in place, which helped out with the abrupt movements of the servo motors.

Our golf ball trap design seemed to be a class favorite when in action. The principle was simple, a hinged door-of-sorts, under which the balls would sweep, and a stopper lowered by a servo motor to trap the door shut. This design required the robot to "attack" the balls in order for the door to sweep over them and close, which made it resemble a predator catching its prey. The design did not incorporate two slots to hold the orange and blue balls separately, because the code called for two seperate trips. Unfortunately the vision processing of the blue balls was not implemented due to the thresholding issues mentioned in the programming section above.