6.270 - IAP 2000 6.270 - IAP 2000
here's the contest site
design report
main page

team 4
members: Chris Avrich / Albert Leija / Nick White

Project Log:

1/4/00: We obtained the lab kit and began to play around with the Lego pieces. Albert created a dragster, with a gear box and a differentiator. Chris and Nick made other random constructions that we thought might be useful, like a steering system for one wheel using a turntable.

1/5/00: Our original plan called for a sort of forklift or hook-like structure in the front that would, upon collision with another robot, attempt to slide under the opponent and raise upward, tipping them over. Chris worked on this construction, although we later scrapped the idea. Nick and Albert worked on other dragster-like constructions, trying to work out how the gear ratios would work and how the structure would be completed.

1/6/00: This was the first day that we really built any Lego components with a clear goal in mind. Our goal is to have two bars angled in the front of our robot to direct blocks into a conveyor ("Sucker") that would bring them upward. Blocks would then fall into a chamber where they would be scanned to determine their type, and then pushed by a rotating beam ("Whacker") into one of two bins depending on whether they are professors/students or hackers. They could then be released at will with a latch ("Excretor"). We built the Whacker, attaching it to the bins and allowing for a servo to be attached later, and we built the Sucker as well, using tires on either side to lift up the blocks.

1/7/00-1/9/00: Took the weekend off (we're lazy, but at least we're honest)

1/10/00: Today we worked on attaching the parts of the robot together. We attached the Sucker to the Whacker/Bins assembly, and made gates for the Excretor. We also began planning how the main drive wheels would attach under the body, and how we would need to cut the big base plate. We had some difficulty, since some of our constructs protruded and blocked us from attaching the components. For example, I had to temporarily remove the gear assembly on the Sucker to attach it to the body. In addition to Lego building, we also worked out the basics of our algorithm for running within the contest (i.e. did the problem set).

1/11/00-1/17/00: These control boards sure are taking a while to come in...

1/18/00: We finished the wheels and gearbox, and installed the drive motors. We use a 1:27 gear ratio, with two drive motors per wheel (there are two drive wheels). The gear assembly is entirely below the main baseplate of the robot.

1/19/00: We geared down the Sucker to 3:125 (about 1:42) to give it more power in lifting blocks. We also mounted the servo on top of the Whacker to turn it back and forth.

1/20/00: We finally got our board today. We decided to use the RoboSkiff instead of the HandyBoard, since we need the extra motor ports (four bidirectional drive motors, two unidirectional Sucker drivers, and two bidirectional Excretor gate motors). Nick wrote some simple code to make the robot drive forward and suck up some blocks, but we weren't wired up to test it out yet. Also today, Albert wired up our Hawker battery charger and our IR Beacon. Chris and Albert also built the first version of our Collector, an attachment to the front of the robot that acts like a plow to direct blocks right into the Sucker. The problem with this was that we were already very close to our 12 inch limit in that direction, and so we had to rig something up that would mount upwards and flip down upon the start of a match. The two arms of the Collector are only locked into place at one point, and are held together with two sets of rubber bands on either side of the rigid connector bar. This allows the Collector arms to flex if they hit something. (We did this because by now we were running out of Lego pieces due to the massive size of our robot, and we couldn't afford to make the Collector more structurally sturdy.)

1/21/00: Today we wired the bidirectional motors and mounted either an 8-toothed gear (drive motors, Sucker motors) or a rubber-band-holding nub (Excretor controls) onto them. We also made our battery packs once we decided that we would indeed keep our batteries in a row when we mounted them to the robot. Finally, we modified our Collector to drop down properly from the top of the robot to the front, using spacer blocks to make it land in the correct orientation onto a part of the Sucker.

1/22/00: We mounted sensors today: line following and block scanning (both LEDs and phototransistors), and start light detection (photoresistor). The line following and start light detectors are on the bottom of the robot in between the gear trains, and are mounted with cardboard. The block scanner is attached to the top of the Whacker, also with cardboard. Also, today we began to code our high-level strategy: we attempted to implement line following and driving straight. There was a problem with our left wheel going too slow, however, and so we installed shaft encoders on the two drive trains. Since the provided Differential Drive code was buggy, we began working on adapting it to our purposes.

1/23/00: Today we got our outside collision detectors (touch sensors), and we soldered the wires for them. We resoldered our battery charger because one of the wires broke off. We mounted our control board vertically to the back of the servo construct with foam tape, and began to tape the wires down that were sticking out of the back (to help us fit in the space limit, as that dimension is very short on space). We began mounting our four orientation-detecting photoresistors on cardboard, to eventually be mounted on the dowel for the IR Beacon. Also, we finished a latch for our flap-down Collector, using a rack (as in rack-and-pinion) so that we can turn the servo to deploy the Collector. In terms of coding, we tinkered a bit more with navigation and line following, but didn't see much progress on that front.

1/24/00: We mounted our proximity sensors for the back and front of the robot. On either side of the back, we have a large touch sensor with its bar bent around the corner so that we can detect both side and rear impacts. Pieces of the Lego base plate are used to make the touch area larger. For the front impact sensors, we mounted two toward the rear of the Collector arms, to be triggered if an arm was flexed inward, and two closer to the tips, to be triggered if arms were flexed outward. We had to move the latter pair from their original positions on top of the arms, however, because they were too high to be triggered by walls. So, we mounted them to the bottoms of the arms instead. In addition, we finished taping down wires from the controller board's ports. We mounted the IR Beacon to the dowel and to the robot. We added shrunken shrink tubing to shield the photoresistors. The gears attached to the Sucker's motors degraded and popped off, so we glued them back on. We added an additional piece in the junction between the Sucker and the rest of the body, holding it further away. This was because the tires on the main body were grinding on part of the Sucker, and it caused our robot to slow down noticeably while driving. We coated our small, unpowered back wheels with masking tape to make them slide easier (for turns). We added a small piece of white paper beneath the Whacker to try to better calibrate the block sensor there. Finally, we wrote code that orients the robot and uses the start light correctly.

1/25/00: We decreased the size of the paper on the block sensor (under the Whacker) to reduce friction on the sliding blocks. We stabilized the Sucker slightly more by replacing the side guidance wheels (above the traction wheels) with flat beams that worked just as well to keep the block oriented. Today, we qualified for Round 2, but with a loss. In Round 1, we started and oriented correctly, and drove down the table plowing blocks. Unfortunately, we basically plowed Professors and Innocent Students onto the opponent's side, and we also sucked in an Innocent, so we got negative points, but still demonstrated the ability to score. We didn't have the ability to sort the blocks properly by this time, and the sucker didn't work as well as it could have. Right before the qualifying round, we had punted line-following because it was too clunky to code and unreliable, and we replaced it with wall-following sensors on the sides near the wheels (touch sensors with pieces of Lego base plate glued to them). The new coded strategy for turning was to back into the wall with our robot's rear sensors, and this would cause us to go straight when we went forward again. Today we also finally added heat sinks, and had the solder-fix done to our Skiff.

1/26/00: Impounding was at 10:30 PM today, and so we worked quite a bit. One big job was to fit in the 12 inch cube, since our robot is pretty large. To help in this, we remounted the rear sensors to make them smaller, and rewired our battery packs to make the wires fit better, and so that the connector wouldn't stick out the back too much. Also, we strapped down the wires connected to the Skiff very firmly with cable ties. Finally, we removed a few pieces from the arms of the Collector so that it would be sure to fit vertically in the box. We tried to glue the side and rear sensors to their bases to stabilize them, but they just came off again (you could still click them when they were glued). We put more shrink tubing around the edge of the start-detection construct to shield it more (it also looked cool). We modified the Sucker in several ways: we moved the attachment with the wheels upward by one to avoid the gears grinding on blocks on the table; we used smaller front gears (attached by chains to the gear train) to help us fit inside the box (this brought the gear ratio for the Sucker to 2:75 or about 1:37); we flipped over the middle tire on each side because it was grinding on the base; and we added a flat 8x2 Lego plate (with holes) to the top gears of the Sucker to stabilize the gear chains. We installed a keypad to debug better; there were options to start in any of the four orientations without going through calibration, and there was an option to just start the Sucker and Whacker functionality, so that we could test only that when we wanted to. Finally, the biggest issue of our whole project, I suppose, was getting the Whacker to sense blocks correctly (and one at a time). First, we punted the bottom piece of paper and installed a vertical one that the LED/phototransistor would scan when there was no block, but that would be pushed back if a block entered. We found this to be unreliable, because the phototransistor would often scan "darkness" (and read that as a black Hacker block) even when the paper appeared to be in position. We tried taking the sensor mountings off so that instead of being mounted on the Whacker itself (the moving part, which sometimes caused friction due to the sensor wiring), they would be mounted on the stable structure above. The sensors would also point more towards the back instead of downward, so they would strike the shielding paper more regularly, but this didn't work very well. We added cardboard to the sides of the Whacker so that when it moved, it would block more students from entering and perhaps going into the wrong bin. We tried changing the scan from continuous to only when centered, to avoid a problem of the Whacker moving spasmodically at random times, but this didn't really help much either. We eventually ran out of time, took the Whacker out entirely except for the original gears, and decided to suck up blocks indiscriminately and just deposit them all on our campus at 55 seconds. (This was the best we could do, since we would be sucking up more Innocents/Professors than Hackers by probability). Unfortunately, our driving wasn't the most reliable thing in the world by the time of impounding - our robot would turn too much or too little, and wouldn't always be able to reorient itself by just backing into the wall. By the time we removed the Whacker, the practice tables were packed with contestants, and we had little chance to test our final strategy.