6.270
Team 37
Doppelgänger
Alex Artola
Toliver Jue
Rajay Kumar
Facts
about Doppelgänger
Physical Features
Our
robot had a very simple design. Its main feature was a roller
with a gear ratio of 15:1 which was a long rod with wheels on
it which spun and knocked balls off the table. Our robot used
a differential drive with ratios of 45:1 for each side which
came in hand when line-following which we did with help from
bottom-mounted light sensors. Each side had two motors.
Size
11.8
inches by 10.4 inches
Electronics Used
We
used the Handy Board, six LED/phototransistor pairs, five motors,
an IR beacon, and four bump sensors.
Drive Used
We
used the differential drive.
Code Features
Our
code had functions for line-following. We did this by using
some of the bottom mounted sensors. We also had code to react
to objects hitting a front bumper. If an object hit the left
bumper, the robot would make a right turn and if an object hit
the right bumper, the robot would make a left turn.
Here
are the files we used for our robot:
behavior.c |
Behaviors
exhibited by our robot such as moving forward with the roller
engaged. |
button.c |
Code
which controls extra buttons added to our robot. |
defines.c |
Special
definitions such as ports for sensors determined by a #define
command. |
init.c |
Code
which must be run when the robot is started. |
linefollow.c |
Code
for following lines. |
main.c |
Obligatory
main file which ties everything together. |
menu.c |
A
special menu put on our robot to make it easier to test
multiple programs. |
motor.c |
Code
controlling motors, like code which sets their speed. |
orient.c |
Code
used to orient the robot. |
sensor.c |
Code
to read directly from sensors. |
temp.c |
Temporary
file for testing code. |
timeout.c |
Code
for handling timeouts such as when the robot gets stuck. |
Competition
Competition Results
Doppelgänger
made it to the fifth round. We suffered a loss in the first
round, had three double-wins and then lost in the fifth round.
Assessment of Performance
Part
of the reason it did so well is that it could knock off two
balls reliably. It probably would not have gotten farther than
it did since it did not return to the line after performing
a 180 degree turn after hitting a side of the wall.
Expectations
Our
robot did better than we expected. Judging by our first round
loss, where we did not score any points, it seemed unlikely
we would make it to round three, let alone round five.
Strategy and Development
Our
strategy was to basically sweep back and forth on the opponent's
side, knocking balls off the table. Here's the breakdown of
our strategy:
1) Orient and face in the direction of the opponent's side.
2) Go straight for the ball directly in front of the robot.
3) Push that ball over the small wall behind it.
4) Back up and perform a 90 degree left turn to detect the line.
5) Follow the line until the ball had been thrown over the wall
and both front sensors touched the wall.
6) Backup for a short distance, perform a 180 degree turn.
7) Goto step 5 and repeat until time runs out and then shutdown.
It
took us a long time to develop this strategy. We went through
many, many ideas and robot designs until finally settling on
this one. We chose this strategy because it did not require
us to make a trip back to our side again and it could do well
against many strategies, except for ones which exhibited a cage.
Tasteful Pics of our Robot