For the entirety of my first year at UBC, I have been heavily involved in one of our engineering teams, Thunderbots. We compete in an annual competition of around 35 teams worldwide called Robocup SSL. The rules: Two teams of fully autonomous custom-designed and built robots compete in a 6 on 6 game of soccer. That means no physical controllers, only brief and limited timeouts to tweak your strategy and some very smart and very fast robots.
Since the ball used is a golf ball, the field fairly small though recently increased to a dimension of 6 by 9 meters, the robots incredibly speedy and well-engineered, the game is highly dynamic and incredibly fast, more akin to ice hockey than soccer.
I was part of the software team who had to face the challenge of creating programs that make split second decisions and direct highly accurate maneuvers as well as facilitate intelligent coordination between robots. This is how our AI generally functions: The general framework that has swept through and dominated the competition relies on a hierarchy of tasks and assignments. That is skills tactics and plays. Tactics are a combination of skills and plays are combinations of plays. A skill might be shoot the ball there or move to the middle of the field. A tactic would be: make a shot at the goal or try to harass the enemy passer. A play dictates team wide strategies: make a frantic defense, go for a goal, and go on the offense.
Most of our decisions on where exactly to go have been done geometrically with some evaluation functions. This year I was involved in a small project to evaluate more quickly and accurately, specifically writing better functions to evaluate passing.
Some major changes to the way we navigate around objects had caused quite a fair amount of issues for us to work on. We knew we were heading in with some technical difficulties and uncertainty, but we were determined to solve them and had been making increasing progress leading up to the competition.
After a lengthy flight and train ride, we were in Hefei China. There was little time to enjoy the city. We were making as much use of 2 days of setting up as possible. Between friendly games and abundant amounts of testing we were reading through swaths of code, brooding over decisions and doing lots of debugging.
Shaky but hopeful, we walked into our first game on the third day of competition after two days of coding, drilling and soldering. Quickly we realized something was wrong our robots were misbehaving, violating rules and constantly performing the same tactics. Something was wrong and we had to fix it fast. Surprisingly the sporadic actions of our robot did a good job to confuse the enemy. We rushed around with spinning robots. Just as we had ironed out some bugs in our firmware, a narrow gap opened in our defense and we were scored on. We quickly worked but not before another stupid mistake on the part of our robots. Half time, we flashed the robots with the new code and they behaved normally. Our defense seemed impeccable, however we quickly realized we couldn’t shoot. The game ended 2:0.
The following day, things began looking brighter for us.
After a definitive victory over RFC Cambridge we had some promising friendlies. Had we fought the Japanese team in this state, it would’ve gone very differently.
A very tough match against a German team from Mannheim put us in a difficult position. We ultimately got knocked out by the returning champions and home team Zjunlict.
It was a very rewarding experience for me and I am quite excited for next year’s competition in Leipzig, Germany.