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

Our Strategy:

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 ball.
  • 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"

Coding tips:

  • 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.

Other tips:

  • 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 ahead time-wise.
  • 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