web-developer, serious schemer
My last project at U of T was with Jonathan Doda, Daniel Lister and Philip Patchin. In 3 months we were given the task of making a reasonable soccer client (in fact an entire team of clients) for the Robocup Simulation League. Most clients in the league are developed by MSc/Phd students and are ready for competition within 2 years. The course was setup to get some ground work done and allow future students to fork our work.
Our first task was actually interfacing with the soccer server. The server would send data to the clients concerning what the client could see (field markers, relative positions of other players) and our clients physical state (neck angle, fatigue, speed). Our client was responsible for sending command like kick, turn head x-degrees, run x-speed. After about of week of work we were really pleased to see our client move a single pixel across the screen. Once we had a communication interface working we started converting our relative distance to fixed field markers into absolute field positions. Luckily, with the help of spinning our heads around, 90% of the time we could see enough of the field markers to actually determine our position aswell as other players positions on the field.
We eventually setup actions to kick the ball towards the net, communicate with other players on our team, pass the ball to the others and chase the ball. Once we had all the key actions down, we created defensive, offense and goalie behaviors. Every week we competed against other groups in the class. Unfortunately half of the students decided to fork existing robocup clients who already completed a lot of the leg (and advanced) work done. Generally we failed completely to defeat these teams but by the last week of development we managed to steal the ball and even saved the ball against their offense.
Below find a video of our completed client playing against itself. I spend up the video to make the length of a game a little more bearable and to hide the odd time when our client would do something dumb :P.
- - The coloured half of the player is the front half of their body
- - The green outlined semi-circle is the field of view/neck angle of the client.