Fool Options
Team Members: Paisarn Sonthikorn, Sataporn
Pornpromlikit, and Gap Thirathon
Link to the main page: http://web.mit.edu/6.270/www
Initial Strategy:
Our initial strategy is to have our robot move repetitively in a U-shaped path
along the wall in the opponent's side, and on its way, sweep all the balls
into our own side. However, the force and speed of the robot have been critical factors
in this strategy. The faster the robot can move, the more rounds it can turn back
to collect the rest of the balls left out in the opponent's side, while the sufficiently
strong force is needed to be able to drive at least two or more balls along the way.
After some trials, it appeared that the robot might not be fast enough to make the second round
of the routine if it would have to drive three balls along.
Finalized Strategy:
Since we realized that the robot might not be able to make the second turn using
the initial strategy, we decided to break our strategy into two main steps:
1) Quickly move the nearest ball on the opponent's side into our side.
2) Come back to sweep the balls left out on the opponent's side, including the balls that might fall from the center of the table.
In additional, our robot also uses the beacon to detect where the opponent might be on the table in order to
reduce the possibility of bumping into it and to choose a reasonable choice of channel it should
move through once the balls have been collected.
Physical Features:
Wheels |
Double small wheels on each rear side (left
& right) , and one small wheel in the middle front. |
Arms |
Two arms. One on the front left, and the other
on the front right. Both arms are initially kept vertical by the upper front servo,
and will be released once the robot has moved
sufficiently far from the start point. Each arm
has major lego parts with a connection that can bend for certain
angles. |
Body |
The body, from the upper view, is in a square
shape with arms connected from the upper right and the upper left
corner. |
Electronic uses:
Upper front servo |
This servo is connected to the arms by using
rubber bands. After the robot makes turns to the opponent side and
move forward a bit, this servo will spin and release the arms, which at
first are positioned vertically relative to the robot's main body. |
Bottom front servo |
This servo is used to make the front wheel turn
in a specific angle. Front distance sensor: This sensor is
intended to detect the opponent. After reading how far the opponent is
from the front side of our robot, the program will command the robot to
move forward in a pre-specified distance. |
Front distance sensor |
This sensor is intended to detect the opponent.
After reading how far the opponent is from the front side of our robot,
the program will command the robot to move forward in a pre-specified
distance. |
Right distance sensor |
This sensor is used to the measure the distance
from the right side of the robot to the wall. The sensor is
particularly helpful when used with the line following strategy. |
LEDs and photo resistors |
There are four pairs of LEDs and photo
resistors. They was attached a lego plate, which was adhered to the
bottom of the robot's main body. We call those pairs of LEDs and
photo resistors as follows: Left, Middle, Right and Back. Middle pair is
used to detect the start light. Left, Right, and Back pairs will detect
the colors of the platform area right underneath the robot. There
outputs will help the robot detect whether it has to make a turn and how
big the angle is (in this case, it can be 0, 90, 180 or 270
degrees.) |
Beacon |
A beacon is put on small lego plate that was
glued at the end of a pole. It is located around 17 inches high from
the bottom of the contest platform. |
Shaft Encoders |
There are two shaft encoders used in our
robot. One is in the left, and the other is in the right of the
robot. Both are located just on the gearboxes. |
Button switches |
There are two at the end of the arm on each
side. This switches are intended to give a signal to the robot
whether it move to the right/left too much. |
Roller switches |
The are two at the rear left and rear right
corner of the robot. They detect whether the rear side of the robot
hits the wall or an obstacle or not. |
Drive Mechanism:
Our design use the Differential Driving Mechanism which allows
the robot to make a right-angle turn. It will be composed
of two driving wheels responsible for driving the robot and making
a right-left turn, and a turnable supporting wheel attached to a
survo in the front.
Wall-following Mechanism:
This mechanism utilizes two bumper sensors attached at the end of the left and
right hands of the robot. The robot will turn away from the wall whenever either of the
two bumper sensors bumps to the wall.
Line-following Mechanism:
This Line-Following mechanism, also based on the feedback system,
utilizes three Light Sensors attached at the bottom of the robot and a distance center
on the right side of the robot. The same set of Light Sensors are also used to determine
the orientation of the robot.
Code Features:
The program that control the robot is written in Interactive C (IC). Below
are the link to the actual codes and description about what each file does.
- main.c
This
file is the main program file. It defines all of the constants and contains
scripts of what to do.
- followWall.c
Our
major navigation technique is to follow the wall. To follow the wall, the
front wheel is biased so that the robot will tend to go into the wall. When
button switch on robot's arm is touched, and thus the robot touches the wall,
the robot will back up a little bit, turn away for some distance, and the
continue going. The function exits when the distance read by the shaft
encoders goes beyond limit. We also have function followWallAgressive, which
will try to ram when the robot get stuck.
- followLine.c
This
is another navigation tool. The function followLine reads values from light
sensors and determine whether the robot is on the line, a little bit to the
left, a little bit to the right, or totally lost. It then adjusts the front
wheel accordingly to maintain the robot on the line. In the case the the robot
cannot find the line at all, the left distance sensor is used to determine
whether the robot is too far or too close to the wall. Then, the function
adjusts front wheel accordingly.
- backOff.c
At
first, this function performs basic running back routine. The robot will run
backward until the distance read from shaft encoders goes beyond limit.
However, we later used this function to go forward. This was done easily by
giving the function negative speed.
- detectLine.c
This
function stop the robot when the light sensors indicate that there is a line
underneath.
- releaseArm.c
This
function is called in a separate thread to release the arm while the robot is
running.
- detectOrientation.c
At
the beginning of the round, this function determine the direction that the
robot is facing.
- turnToOpponent.c
Then,
this function turn the robot to the appropriate direction.
- turn.c
We have
many kinds of turning functions. One of them, turnCareful, tries to get out if
the robot is stuck. In order to turn to a certain degree, the empirical values
of sum of the distances that both wheels must turn were recorded and put as
arguments to the function.
- util.c
This
file contains miscellaneous functions including turning wheels, reading color
from light sensors, aligning the robot with the wall, and detecting the
opponent using IR beacon.
How it was fared in the contest:
Although we have quite an early exit in Round 3 of the competition, our robot performed
reasonably well in overall given the fact that we won the second place in the Mock Contest.
With some luck and better draws, we could have gone so far in the competition. In fact,
we got the worst draws we could possibly have in both Round 2 and Round 3, and not even had
a chance to score a point. It was the final round of the Mock Contest when our weaknesses were clearly
exposed. First, the robot arms were initially designed to only sweep the balls along the wall, and thus, they
are not the best choice for the first step of our strategy where the robot has to turn 180 degrees with
the ball away from the wall. To be able to contain the ball properly, we have to make a series of small turns
which takes some time and is not truely reliable.
Secondly, against the fast active robots, there is a high probability that our robot could be blocked at
the early stage and stop moving.
Last Modified: Feb 13, 2001