About Our 6.270 Robot
We wanted to employ a simple strategy that would be conducive to both
reliable board movements and clean code. We therefore employed no learning
algorithms, but decided to hard code a path that the robot would follow
each round, regardless of external factors on the board and in the contest.
At the end, one movement is chosen based on the vote tally.
Our movements were planned as pictured on this map of the board. The
blue arrows represent the movements if starting on the white side of
the board, and the purple arrows represent the movements if starting
on the black side of the board. First, our robot rotates to face the
center wall. It then moves backwards, taking two red and two green balls
with it, until it hits the back wall. Having two balls of each color
gives us two points regardless of the vote tally. It then moves forward
until it reaches the spot where the black lines cross, and turns to the
right. It moves forwards once again, picking up the four balls in its
path, until it hits the wall. It then backs up slightly, turns to the
left, and backs into the corner square of the board, the other team's
scoring area. It waits there until close to the end of the round, where
it makes a judgement based on the vote whetherto stay in the opponent's
square or drive forwards across the board into our own scoring area,
picking up some extra balls along the way.
If there is no opponent on the board interfering with our placed balls
or changing the vote right at the end, we can predict the point outcome.
If the vote is such that we do not drive across the board, we create
a score of two for us and a score of negative four for the other team.
If the vote is such that we do drive across the board, we create a score
of twenty-six for us and a score of zero for the other team.
back to top
Design
The main guide that we kept in mind when designing our robot was simplicity
and symmetry. From previous competition experience, we knew that a simply designed robot
that was reliable and repeatable was superior to a complex robot that only works sporadically.
The reason we kept symmetry was to evenly distribute the weight of the robot on the four
wheels evenly to assure even traction.
Our robot was powered by differential drive with gearboxes having a
ratio of 208:1. This high gear ratio was used to ensure that we could
run our motors at full speed while not having our robot move as quickly
but with greater torque. The back of our robot had two arms used to guide
balls to the back wall and into the center scoring region. The front
of the robot had a one way gate that would let balls in and trap them
under the robot while still being able to drive around. To move, we used
two-wheel, rear-wheel differential drive with two caster wheels in the
front. This allowed our robot to pivot perfectly around the center of
the rear axle. We used a gyroscope mounted on the controller board to
maintain the accuracy of the angles of the turns. Our robot also had
4 built in sections where we could mount infrared sensors. These places
were well shielded from any ambient light allowing us to read the color
of the board below those spots very accurately and repeatably.
back to top
Code
For our own peace of mind, we attempted to keep our code as simple and
elegant as possible. We split the code into two files, main.c and gyro.c,
loading the two files with robot_files.lis. The gyro.c file contains
utility functions for the gyroscope we used. This includes functions
to interpret the gyroscope's output into usable data, as well as functions
to drive perfectly straight using the gyroscope to measure and cancel
turns, to turn to an exact angle, and keep an accurate measurement of
the current angle. The main.c file includes functions to manipulate the
motor in each wheel, as well as functions to manage the RF transmissions
for each round and the routine to guide the robot along the path we designed.
back to top
Results
After seeing the designs of all the other robots, our robot was definitely
the most simply built. Although it did not have as many features as other
robots, ours performed much more reliably than other robots. Having our
robot weigh less also helped in allowing our motors to use more power
when driving up against other robots since excess power was not used
in moving ourselves. We did quite well if the first four of five rounds
against robots that did not score many points. The fact that ours scored
at least two points right at the beginning of each round gave us an advantage
over most teams. It was a double elimination tournament, and both of
our losses were to the team that ended up winning the entire competition,
so we considered our robot to be quite successful.
back to top
Team
Phil Hum '06 is a Course 2 Mechanical Engineering Major.
Steph Yeh '06 is a Course 6 Computer Science Major.
Mike Fitzgerald '07 is a Course 6 Computer Science Major.
back to top