Team Members (left to right):
Lawrie Gibson (6-3) - lcgibson |
Daniel Wendel (6-3) - djwendel |
Emily Yan (6-2) - kirason
Our Captain: Ed Barnard
Our Mascot: Jessica Chiafair, AKA Chiafari
Our Sponsor: Kathy Hwang
TA Thanks: Dacheng Zhao (our awesome TA), Pavel Gorelik, and Paul Ojanen
More Thanks: To everyone who visited us in lab, whether bringing food or good cheer =)
Division of Labor:
Daniel and Lawrie did hardware and lego both, though in the end Daniel did more
soldering. Emily was the coder and occasional trouble shooter, organizer, and schedule
enforcer ; P
plan 1 - Our original strategy, which was much more boring =) We simply
were going to go up to the top, find a ball of our color, and come back
down to the cup. If time permitted, we would try to sweep the cup clear
of any obstacle sitting in it. Boo, whatever ;)
plan 2 - Ah hah, MUCH more interesting =) Thanks to Nimi and Kathy for
our impromptu brainstorming session in lab that led to the generation of
this original and much more interesting plan! Our robot would now speed
down to the cup, sit on it, extend an arm out to catch any balls rolling
down one side of the board, feed it into our robot for color sorting,
and place the ball of the right color into the cup. Should it be of the
wrong color, it would be discarded (hopefully off the table ;). To make
sure that we got balls fed into our robot, we would have a drone that
circles up to whatever side we're on and around to pull the balls downward
towards the 'bot. Renewed motivation applies!
plan 2 refined - There were a couple things that happened along the way.
First, we realized it was easiest to send our arm out straight and angle
the robot as opposed to trying to angle out the arm, where angling could
be figured out by our light sensors on the front of our robot and using
the line that went along the back of the board. Our feeder also
changed as we realized the fact that we couldn't get a spinning wheel
plus ramp design to work unless we were going to break the size limit.
We also went from a double trapdoor idea to discard the balls to
a single trapdoor that simply had to make sure it opened before the ball
came up from the feeder mechanism, meaning color sorting had to be done
by the feeder, not the trapdoor. This was because the double
trapdoors would have to be powered by one servo, and we couldn't get an
even number of gears to span the back to do that correctly. Overall,
we gave ourselves a very fun, but very mechanically difficult robot to
build. In the end, we couldn't get our robot to spin around the
cup very well. It surprised us all that that was the hardest thing to do!
It was because the center of rotation of the robot was not where the center
of the cup was... doh. In any case, because of our problems spinning, we
did not have time to do the drone. Thus, we had a passive robot. He also
no longer line followed to the cup, but instead just went straight forward
after making a very careful turn in the corner. The arm being on the other
side was a fluke of the design... it just worked better that way.
Sadly, we did not do very well with Mr. Extend-y Arm. During Round 1, our
robot got lost, but even if it had made it to the cup, we were only facing
a robot that attacked us by following the IR beacon. We could never have
gotten any balls. Before the next round, we attempted to perfect our pathing,
which worked on the white side nearly every time. On the green side, we could
get to the cup, but not spin to hit the right angle. In any case, we had no
chance to show off our robot's skills: in Round 2 we got pinned by the other
robot for the entire minute as we didn't drive out of the way in time. However,
we were able to prove that our robot worked by being allowed to demo right
before the final round =)
Physical construction of robot:
- 4 motors, 2 on each wheel.
- An "extend-y arm", constructed of gray pegs, a couple 16s where wheels
were placed on the bottom, and almost all of our 12s. If your robot
relies on long pieces, I don't suggest taking this path ;P Rubber band
powered, and flipped out via the scoop.
- A gear ratio of about 42, if you include the mesh from motor to gear.
- A scoop powered by one servo. The reason why a scoop is because we had
nothing obstructing a ball from rolling freely into the scoop. Any flats
on the bottom would have prevented the ball from doing this.
- A trapdoor powered by one servo.
- A servo for steering. Convenient if you don't want to mess with shaft
encoders, but problematic if you want to be able to make turns without too
much thinking involved.
- 5 driving bump sensors: one for the rear of the robot, and two on each side
for the corners. Note, a common problem with most robots was that they would
get caught on their corner and never activate their side bump sensor. We
fixed that problem with the way we positioned our bump sensors.
- & 2 more bump sensors: One to tell if a ball was actually in the cup, and
another to tell when a ball was in the scoop.
- 6 light sensors: two in the front for angle sensing for rotating around the
cup, and making the turn in the corner. Three were originally used for line
following, but in the end were not used when the line following sensors had
to be moved farther back. They were just used for additional averaging for
callibration =P Finally, one more light sensor to determine the color of the
- We never used the IR beacon sensors to determine where our opponent was.
- Stuff we made but never got to use:
- Drone: Used worm gears, for a teeny ratio and for a very small drone. It
was originally supposed to be catapulted off the main robot in the very
beginning so we didn't have to worry about deploying it.
- Tether: A combination of pieces from the Bionicle, axles, and base plate.
It worked surprisingly well, and was very compact. For the base plate
tether, try to get the holes machine-shopped to punch the pegs through.
It'll make your life a lot easier =) The holes are 3/16"
- Never put a start_press(); in a loop.
- break; breaks you out of the immediate section you're in (i.e. out
of an if statement if you nested it in a while - it does NOT break
you out of the entire while loop. You can break out of an entire
function by using return) Also, never call a variable break.
You'll confuse IC =P
- Always remember to enable_servos();
- IC requires you to initialize ALL values if you comma them. i.e.
int right, middle, left = 255; will only initialize the value "left"
as 255 and leave right and middle as 0.
- Never try to comment code that already has a comment in it. IC will
complain at you.
- The level at which batteries are charged MATTERS. Your robot will behave
or misbehave appropriately.
- If there's a hardware answer for it, that's probably the reason. Really.
You'd be surprised how many times the reason isn't a software bug.
- You won't ever ever keep your first design. Realize this - and plan
- Callibration also takes forever. Try to have everything done before
callibration so you don't have to recallibrate many many times.
- Work with people you're good friends with. It's better morale wise.
- Shield! Even the infrared stuff - you have no idea how important it is.
- The bottom of your handiboard is NOT flat. Do not try to foam tape it onto
legos... you will promptly warp the legos =P