Team 25: The Soup Dragons

Background:

The Soup Dragon is a Lego robot created for the Massachusetts Institute of Technology 6.270 2008 robotics competition. It was built, programmed, and tested over the span of only a few weeks in January, and it placed in the top eight at the final tournament.

 

About Our Robot:

The Soup Dragon was built and programmed primarily to be as reliable as possible. It uses a basic wall-following system to navigate the board and detect holes, and attempts to achieve the optimum score possible with the number of bins available to it. A large part of its strategy deals with problems presented by the other robot; it has intelligent obstacle-avoidance code, as well as the ability to push its opponent out of the way when they block its bins.

The robot is named after a character from 70s BBC show "The Clangers" who dispenses soup to hungry woolen pigs in Roman armor. It's relevant, we swear.

 

Team Soup Dragon: (left to right) Robin Deits,

Grace Kane, TungShen Chew

Mechanical Features:

Motors/Gear Train:

Six motors power the Soup Dragon while in motion, three on each side of the robot. The motors drive the wheels with 45:1 gear ratio. This powerful drivetrain allows the robot to move quickly when navigating the board and to move other robots out of the way when necessary.

Ball Dispensing Mechanism:

Our robot uses a pair of servo motors to dispense balls one at a time from a vertical stack and release them to the left or right. One servo moves a pair of lego beams alternately back and forth, first loading a single ball into a chamber and then releasing it. The other spins an axle with small lego arms attached to the left or right in order to send the balls out of the robot in the correct direction towards the hole.

Sensors:

The Soup Dragon has four infrared LED/phototransistor pairs, one at each of its four corners, which allow it to detect the pattern of white and black on its starting square and determine its initial orientation. When in motion, it uses five bump sensors, two on each side to detect walls and holes and one in front to detect collisions.

 

Programming:

Orientation:

The four infrared sensors on the robot's underside are positioned such that when the round begins they will be at the corners of the starting square. The robot first uses the sensor information to work out the majority color of the square, determining which side of the board it is on, then finds which of the sensors is above the minority color, determining the direction the robot is facing. Each orientation is linked to a separate motor function that turns the robot to face towards its own 2-point bin.

Hole Detection:

The two lateral bump sensors are positioned almost directly on top of each other, one close to the ground, the other just above the height of the bin openings. When normally wall-following, both of the sensors are pushed closed, but in the case that the robot has arrived at a hole, only the top sensor is pushed. The robot then executes the function to dispense the correct number of balls.

The robot keeps a count of all the bins it passes, which it uses to determine which ones it should score into. Originally it took into account all the bins on the board, but after testing some changes were made. For example, the robot consistently missed passing the enemy's 1-point bin, so it was not taken into account. Also, the robot was made to correct for miscounts in the case that an enemy robot was blocking one of the holes, as explained below.

 

Dealing with other robot:

Responding to opponents was one of the main parts of our robot's strategy. An initial problem that we discovered was the inadequacy of our wall-following technique for avoiding other robots - it would get us around the other robot, but driving directly alongside it might make the bump sensors wrongly detect a 'hole'. Another issue was the possibility that our opponents might use bin-blocking tactics. To counteract this, we developed a complete strategy for dealing with obstacles.

When the robot detects an obstacle with its front bump sensor, it first checks the number of holes which it has passed so far. If the robot has not passed any bins yet, it checks if it has turned at all since it began moving: if it has, it assumes that the obstacle is a robot, but if it has not turned yet, it assumes that the obstacle is a wall and turns to continue its path. If it has passed exactly three bins, the robot assumes that it is at the end of one of the long walls of the board, so it turns in order to continue its clockwise or counterclockwise path around the board. If, on the other hand, the robot detects an obstacle when it has passed one, two, four, or five bins, it knows that it has likely run into an opposing robot which is blocking its way, intentionally or otherwise.

If the Soup Dragon encounters a robot in its way, its first strategy is to turn up the power on all of its motors in an attempt to push the other robot out of the way. While it is doing this, shaft encoders monitor the actual wheel speeds to determine whether the robot is actually moving forward or is simply stuck. If the robot is still able to move, it continues forward until it finds a hole to dispense balls into or until it can no longer move forward. If the encoders report that the wheels are not turning, however, the robot assumes that it must have encountered a robot which it cannot push out of the way. It then takes a path around the obstacle in order to continue around the board. Since this detour will likely cause the robot to miss the bin which its opponent is guarding, it automatically increments the number of bins which it has passed by one.

This robot-avoidance strategy also allows the Soup Dragon to correct for mistakes and unanticipated situations. Should the robot accidentally miss one of the first three holes, for example, it will eventually run into the end of the long wall of the board. Since it will not have counted three holes passed, it will assume the wall at the end to be an opposing robot and attempt to move it out of the way. When this fails, it will increment its number of bins passed, thus allowing it to correctly assume that it is at the end of the long wall and continue around the board to its two-point bin, having fully recovered from the error.

As an additional backup, should the Soup Dragon not be able to dispense balls into its four-point bin, it will instead place all of its balls into the two-point bin. This allows the robot to at least pull off a draw against an opponent which simply places all of its balls in the two-point bin and then blocks the four point bin in such a manner that our robot cannot move it out of the way.

 

Homestretch:

Since the Soup Dragon does not have the ability to capture or control the skunk ball, its final function serves to defend its own home square from an opponent's attempt to place the skunk there. After the robot has made an entire circuit of the board and passed all of its bins, it returns to its starting square and then begins to spin rapidly in an attempt to clear out the skunk ball if it is present.

Development History:

Our plans for Soup Dragon really only underwent one major upheaval. Our original strategy was to have a ball-shooting device that could send balls all the way across the board, allowing us to score quickly from only one wall. This approach ran into several problems - one was that we couldn't get the distance sensors we were using within a close enough range of the other wall such that they could reliably detect if another a robot was blocking the hole. In any case, we could not reliably score from the other side of the board with our ball-shooting mechanism without seriously altering the structure of our robot.

Considering this, we decided it would be more reliable to carry out a simple, wall-following plan, where we could minimize the chance of missing goals. Once we had settled on this idea, our overall plan did not change significantly throughout the rest of the construction and programming process.

 

Competition Results:

Though the Soup Dragon was eventually beaten and taken out of the final competition, it still performed very well, and it displayed its ability to overcome errors very well. In one particular game against Team Awesome, it was able to push the opposing robot out of its way, recognize that the other robot had caused it to miss its own four hole, navigate all the way around the board to its own two-point hole, and drop all its balls in to pull out a last-minute tie in one of the most exciting matches of the tournament.