In late October of 2005, with the original deadline for 6.270 applications passed, the three of us got together and thought: wow this would be great fun. Lucky for us, the deadline was extended to accomodate more teams. We decided to go for it, and barely slipped in as team #48, the final team to register. After finishing most of the assignments at the very last minute, placing dead last in the seeding rounds, and submitting our final robot with plenty of brand new code that had never been tested - our countless hours in lab, hard work, attention to detail, and extreme luck finally paid off as everything came together in the end. Bal (pronounced like ball) performed beyond all expectation in the final competition taking first prize and winning the Intempco design award. A simple and agressive strategy allowed Bal to take most matches in the first few seconds of the game, leaving enemy robots at best pinned in the corner, and at worst flipped over or dismembered.
The objective of Broom Club was
simple: move the majority of balls to the other side of board. With the highly
unlikely option of "shooting the moon" (bringing all balls over to our own
territory), we thought that speed and game predictability would be the biggest
deciding factors - taking inspiration from the 1999 winner Hermes. Almost a
joke, we suggested early on a strategy of running across the board to score the
high-value middle balls and pin the enemy robot before he was able to move out
of his starting position. But this strategy had a certain ring to it, and with
encouragement by our TA's we decided to make it happen.
We divided our strategy into three sections: beginning strategy, main strategy, and backup strategy. The beginning strategy involved running across the board to score the middle balls and make an attempt at pinning the other robot. The main strategy was to take advantage of our early lead and try to intercept and prevent the enemy robot from scoring. The backup strategy - in the case that we can't find the enemy or are losing near the end of the game - was to go after any balls that haven't been moved from their initial positions. We were lucky that our beginning strategy ended up being so effective, since most of the other plans were never realized (successfully).
|
Bal is a tank robot. For speed he has six motors driving five wheels
with a 25:1 gear ratio. Turning is accomplished by driving both sides
independently while keeping the middle wheel fixed by use of a
differential. The robot features foot-long wings on each side which
can be opened and closed by a servo. Finally shaft encoders on each
side allow precise measurement of the motion of the wheels (within
1/30th of a rotation). Total hardware used (minus LEGOs) is:
|
| The shaft encoders turned out to be extremely powerful. They were used for fast and precise turns using pre-calibrated values (with interpolation). They also allow the robot to move very straight for a fixed distance and detect any stalls within a fraction of a second. This allowed us to avoid using bump sensors - focusing instead on a strong frame which could handle the inevitable collisions. Although Bal was a tank, it was still necessary to be efficient in the construction to avoid making a robot which was too heavy - and thus slow given the low gear ratio. The driven 5th wheel in the middle did a lot to keep the frame from warping without sacrificing traction. Conventional and unconventional bracing was used to secure critical areas and keep everything held together tightly. The primary function of the wings was to provide the necessary coverage to sweep the middle balls during the initial run. They didn't need to be particularly strong - which allowed us to drive them with a single servo and crown gears. | ![]() |
One of the first things written was a menu system. As we learned while doing the initial assignments, it was relatively time consuming to have to continually reload different code on to the board to test different parts. The hierarchical menu system allowed an arbitrary number of items per menu and allowed menu selection through the buttons and the use of the frob knob to scroll through the menus. The menu system probably saved much time later in not having to reload code and allowed us to have all our debugging code (about a sixth of our code) loaded as backup for the final competition. This also allowed us to optionally re-calibrate our light sensors if we found it to be necessary on the day of the competition.
The most critical part of Bal's strategy was to be fast at the beginning. The start location was determined as quickly as possible by reading from the 4 light sensors positioned under Bal. Even though we were given suggestions for making multiple readings and sleeping between readings for more accurate readings, we simply read each sensor once in rapid succession. Once we knew our starting location, we turned at most approximately 45 degrees so that Bal would be facing the center. An important part of our speed was that the robot and our code was designed such that there was no "front" or "back." Therefore, it made the initial turn to the center fast no matter which random orientation we started from. Instead of using feedback from the gyro for this turn (a technique that was just too slow), we used the shaft encoders and pre-calibrated the amount needed to turn accurately to the center.
Once facing the center, Bal zoomed straight forward, again using the shaft encoders to maintain the heading. The wings would open shortly after start which would usually allow Bal to get all 5 balls in the center of the board. After another fixed distance, the wings would close. With the proper orientation, Bal would sometimes amusingly catch the other robot in its corner with the wings, as if it were hugging it.
Luckily, this code was sufficient to win our matches most of the
time, within the first couple seconds. The code for our main strategy
of intercepting the other robot and basically being a nuisance by
getting in its way had never been tested by the time of the start of
the competition. Not surprisingly, it didn't always perform as we
expected. In a couple games, Bal would move unexpectedly, and in some
cases, score points for the other team. Therefore, it would probably
have been better if we hadn't loaded this untested code and simply
shut Bal off after the beginning move.
Results
Going into the final competition we were tied in last place with some number of other robots who had managed to score zero points in the seeding rounds. Our first round was against the high ranking Team 2 which we promptly won - raising our hopes for the rest of the competition. We played a total of 12 rounds and lost only 1 against the impressive Team 40 robot, "Quimble," AKA "Inspector Gadget". Unfortunately Quimble had a weakness against robots which could intercept their projectile arm before it was completely deployed and they didn't make it to the final rounds for a rematch. After the loss to Quimble, we had one more near loss when we again scored 6 points on ourselves at the very end of the match.
Rounds we played, the known scores, and number of teams remaining at each round:
Not only did Bal cause damage to
opponents, one of our Bal's eyes was also broken in its impacts with
other robots. We also dropped our robot sometime during the middle of
the competition, creating a big scare when it turned out that one of
our I.R. sensors was no longer working reliably. After some messing
around, we were able to resuscitate it and were very very careful
handling the robot afterwards.
We made it to
the finals against "Cookie Monster," also a very fast robot - but too
light to be rushing the center like it did! The final was a best out
of 3, and we won in 2 matches. Click on the picture to the left to see
a short video clip of us demolishing our final opponent within the
first couple seconds.
Starting this year, the organizers presented to the winners a
perpetual large LEGO block. This LEGO award was named after Ross
Glashan, one of the organizers who designed the board behind the
simple brains of our bot and who had helped us tremendously during the
month.
Pictures