Overview

Feelin' Crabby is the robot we built for the MIT 6.270 competition in January 2001. With a basic goal of getting balls from our oponent's side to our side, our robot managed fairly well and was able to return two balls very reliably - except for contest night which was when it mattered.

Initial Strategy: Our initial strategy was to bring the two opponent balls (balls at locations 3 and 4 assuming we start at 1) back to the baseline on our side. After bringing the balls back to our side, we would use the remaining time to seek out the other robot using the infrared beacon and disrupt its activities by ramming it with the back of our robot.

Final Strategy: After much testing, it turned out that getting ball 3 was very unreliable. After viewing other robots, we noticed a lot of them went for one ball only and quickly went back to their own side. This also disrupted ball 3 causing us even more problems. To counter this we decided to go for ball 3 first. In the process. we would stay in the area between 2 and 3 for a few seconds to block any robots trying to bring balls back to their own side. Getting ball 3 was now easy since we could wall follow and know exactly when to close our arms. After going back to the other side to get ball 4, we would simply return home.

The Team
Robert Chang '02 - Strategy, construction, and testing
Philippe Cheng '02 - Strategy, construction, and coding
Tina Wang '01, G - Coding and testing

Strategy

By the time of the mock contest, we still couldn't reliably grab the second ball and get back to our side. The way our robot is designed requires a lot of precision in the driving and turning in order to successfully retrieve the two balls while avoiding accidents like collisions with the center platform or missing the balls when we grab them. We had a lot of problems with our robot veering off to one side when it's holding a ball, since the ball acts sort of like a brake for our robot and slows down one side of the robot as it drives with the ball in one of its arms.

A design problem was the way the elbows of the arms stick out. They rub against the wall and cause our robot to drive the back corner into the wall as we drive backward along the wall. This was the cause of our robot not returning to our side during the second match in the mock contest. Our opponent knocked the center ball back to their side and this ball moved our first target ball from its initial location and we weren't able to grab it. We successfully grabbed on to the second ball but wasn't able to make it back to our side since the single ball caused our robot to swerve against the wall and the robot was stuck in the on their side.

After the mock contest, we reevaluated our strategy and decided to change it based on the strategies of the robots that did well. Since a lot of robots tend to grab their opponents' balls and bring the balls back to their own side through their starting area, we decided that it might be better to get the robot to the opposite wall first and retrieve the farther opponent ball before getting the ball closer to us. This was in response to those robots that grab the ball closest to them in the beginning and bring that back to their own side before retrieving the other ball. Our robot is positioned such that it would be able to get in the way of the faster robots that can make it back to their side within 10 seconds and prevent the ball they're holding from reaching their side. With this new strategy, our robot should be able to get both balls back to our side after we finish tweaking, unless our way back is blocked off by some robot or something goes terribly wrong and our robot isn't able to recover from the situation.

Our new strategy seemed to run fairly well. The robot was able to grab the two balls most of the time. However, we were still plagued by the problem of backing up to our side due to our protruding elbow rubbing against the wall. We attempted to fix the problem by attaching four touch sensors to detect the wall collisions that can potentially stall the robot. While attaching extra pulley wheels could have helped greatly, we were limited by size constraints and thus couldn't add them without changing our robot design.

We also added code to ram with the back side of our robot in case some robot happens to get in its way while it attempts to return to its own side with opponent balls.

Design
Our robot uses differential drive since it is simple and makes it easier to orient the robot quickly. However, the downside to the differential drive is that it's geared more towards driving straight and then turning in place; it's very difficult to determine how the robot will travel if it turns and moves simultaneously. We doubled up the big thin wheels on both sides in order to increase the traction, while decreasing the torque exerted on each tire, so that the rubber won't slip off the wheel. Each pair of wheels is driven by three motors, for a total of six motors. Three servos were used: one to rotate the steering wheel, and two to control the arms of the robot. Our final design had five LED/photo-resistor pairs for orientation and color identification, four touch sensors to detect when we bump into walls or other robots, and a distance sensor to help determine whether the robot is near the center platform or at the ends of the table. Since we built our robot with stability and ramming in mind, the final area was just short of the allowed limit. The height was well within the limit.
Results

With our new strategy and additions, our robot did fairly well during the practice runs we did in lab. It was able to grab the two opponent balls (or one of the two, as the timing and positioning isn't always perfect) and return to its own side most of the time. We didn't do as well in the actual competition as we wanted, due to some bad luck. Before round one, we decided to put in an extra ten seconds of waiting when our robot is positioned to grab the first ball. This was in response to the strategies of robots that grab one ball and return to its own side (robots using that strategy went on to the final round of the competition). With our robot's back toward the opponent, we were hoping to screw up the other robot and withstand some ramming before retrieving the first ball. This implementation would have worked against most of the robots, except we went against team #3, whose robot went back to their own side through our starting position, something totally unexpected, and had code to drive towards our robot. With the ten-second sleep, our robot was helpless as it was pinned to the wall from the side. We were unable to free ourselves and retrieve any ball.

Round 2
Before impounding, we just got rid of the ten-second wait and fine-tuned the robot. We barely survived in round two, when we faced the Microsoft placebo. It didn't orient properly and went after its own balls, and so collided with us. Since we didn't think any robot would disorient itself like that, we didn't have error-correction code for colliding with other robots during that phase of the robot's routine. Our robot was "lost" due to the collision and wasn't able to score. We would have won on technicality, as the placebo wasn't supposed to disrupt the other robot. Our robot also helped the Microsoft placebo to tip over, and that disqualified them since their IR beacon dropped below the legal height range. We won round 2 with their disqualification.

Final Round
Our robot just wasn't destined to score during the actual competition. In round 3, we went scoreless again, for our second loss. The robot we went against didn't really do anything, so we should have won easily; but Lego pieces we added, to prevent the front wheel from rolling on to the ball and causing the robot to jerk and become disoriented, came off when our robot was retrieving the second ball. As a result, our robot jerked a few times and became too disoriented to correct itself and make it back to its own side within the time limit. When we went to pick up our robot after the round, we noticed that part of the robot was already in the neutral zone, and that one of the balls was just two or three inches away from the neutral zone. A few more seconds and we would have won 2-1. Tough loss for our unlucky robot. The moral of the story is: luck is everything.