TEAM 15 GSC – 6.270 Competition
We began talking about strategy soon after the start of the competition. We envisioned our robot running around the table, scooping up balls, then holding our balls inside itself and spitting the other balls back out on to or out of the table. It would end the round with a pass through the scoring areas and clear them of any unfriendly balls. Although we would only take one territory, the final pass through the scoring areas would leave our opponent with one territory at most, and this only if their robot physically blocked us from removing their balls in that one territory. We figured that our four to six balls would be enough to at least tie our opponent if we both went for the same territory in the end, so we thought that we could double-win most rounds.
At first, we felt that an active ball sorter would be the best way to implement this strategy. We would take in all of the balls we ran into, scan them for color, and then spit only our opponents balls back out onto the table. We quickly realized that it would be very hard to make our robot do this reliably due to the limitations of the sensors we had, and we did not feel that such a complicated design would have any real benefit over much simpler designs, so we scrapped that idea and moved on to another one.
Our next idea was an evolution of our first. Rather than actively sorting the balls we picked up and stored in our robot as we traveled around the table, we would simply go for our group of four balls, pick those up, and then spit out any other ball we encountered. This removed most of the complexity and uncertainty from our design, although it did mean we could only really score with four of our balls rather than all six. We felt that the relative simplicity of this design far outweighed its decreased scoring potential, so we built our robot with this strategy in mind.
We went with a robot close to the maximum size allowed length and width wise so that it would have the best chance of encountering the balls on the table. We gave it a 125:1 gear ratio so that it could move with some speed but also would be able to graze walls without grinding to a halt. The center eight inches of the robot was consisted of a one-way gate that led to a lifter (a platform that the balls could roll on and that we could move up and down to allow other balls to pass underneath) and, after that, a ball spitting component that would send the balls out the back of our robot with a fair amount of speed. We built and tinkered around with our robot for a week or two and finally had it down to what we wanted with a good amount of time left in IAP.
A little after we had our robot built we learned that they were going with different balls than we had originally thought. Rather than using balls that differed only in color, they were using balls that were quite different in size. This posed a problem for our pitching-machine-like ball shooter, since it had to be calibrated for balls of a certain size. Our existing design worked very well for the larger balls that we had been given with our kit, but did not even touch the new, smaller balls. We rebuilt the mechanism, only to find that now it would somewhat weakly spit out the smaller balls and nearly jam on the larger balls. We thought that we would have to scrap that component of our machine, which was sad because up until then it had been our favorite part of the machine. After a bit of thought and experimentation, we found that if we replaced the Lego o-ring “tires” that we were using on our pitching machine wheels with rubber bands, we could gain enough flexibility to spit out both the large and small balls with a halfway decent amount of force. They probably would not fly off the table, but they would be moved out of the way well enough.
For the seeding tournament, we didn’t have the time to fine tune everything so we planned to have our robot start, turn toward our group of four balls, collect at least two of those and push them into the scoring zone. We used distance sensors to determine our starting location (e.g. if the front sensor saw a wall right next to it and the left sensor saw nothing, then we would know that the left sensor was facing the other side of the table and the front one was facing a wall and so could plan our turns accordingly) and used a gyro to let us make nice, reliable turns. Unfortunately, or so we thought at the time, we had gotten confused as to which corners were the scoring zones and which were the starting zones, so all of the turns that we had planned would send us toward our group of two balls instead of our group of four balls. When we saw the other teams begin to go and start in the corners opposite from the ones that we had used for our tuning (maybe that’s why those corners were always open), we thought we were in trouble. It was too late to change anything now, though, so we just sat and awaited our turn.
When our turn came and the GO button was pressed, our robot performed perfectly, turning toward the balls and pushing them into the scoring zone. However, the other robot had gone for their group of four balls and had grabbed them all, pushing them toward the same scoring zone we had just taken. We were sunk, and we would have been even if we had calibrated our robot correctly, since we would have needed two passes to grab all four balls and had only programmed one pass in. We could only hope that we would do better in the final tournament the next day, but a poor seed would definitely not help our cause.
Then, we discovered an unexpected benefit to our “plan.” The other robot approached the scoring zone and just started to push their balls in. Then, it hit our robot and stopped! Our robot didn’t move an inch, and with it sitting there the other one couldn’t get in. We were pretty happy seeing a sure loss turned into a win because of our mistake, and were even more so when we won the next round. Then, we faced a robot that was simply quicker than ours at getting into the scoring zone, so we lost in the third round. We ended up being seeded 11th, which was pretty good considering that our robot would only push a ball or two toward one scoring zone and stop. With those kinds of results, we figured that if we just got the ball shooter running and made a couple more scoring passes, we’d be in good shape for the next day.
For the final tournament, we made a few small changes to our robot’s strategy. We had the robot turn and head toward the group of two balls, just as it had the night before. The robot would then enter the scoring zone, turn, and leave, dropping off any balls it had been pushing. Then, as it was rolling away from the zone, it would turn the ball shooter on, spitting any balls that it had collected beneath the disabled lifter back into the scoring zone. It would then head back to the starting zone, turn toward our group of four balls, push these balls into the other corner scoring area, and stop, just as it did with great success during the seeding tournament. We thought that we’d be able to score at least one ball in two scoring zones, and would probably be able to take at least one of them. The other team would have to take the center zone to beat us as well as one of the other zones, so we felt confident that, in forcing the other team to do this to beat us, we’d be able to place respectably high in the standings.
Unfortunately, even the best laid plans oft go awry, and ours wasn’t exactly the best laid plan. In our first round, we got beaten by a placebot when the ridge to get into the scoring zone knocked the only ball we had been able to collect off the ball shooter and it was then pushed out of the scoring zone when our robot tried to turn but jammed up against a wall. In the second round, our robot managed to do fairly well, but the ball shooter didn’t shoot the collected balls with enough force to get them back into the scoring zone when the robot began to drive away, and our robot’s turns out of the first scoring zones and then toward the group of four balls weren’t the 180* and 90*, respectively, that we told it to turn, so when it began to travel down that side of the board its front sensor was turned toward the side wall, thought this wall was the wall at the other end of the board, and so stopped and ended its round having not scored. So, our day was quickly over. The somewhat amusing part is that, had we left our robot with its original, seeding-round programming, we would have won both rounds and been off to the finals. We definitely wouldn’t have had a chance to win or even place well, though, so we have no regrets with trying a better (in theory, at least) but less reliable program during the tournament.