Finding Simple Solutions For Complex Problems (Robot Soccer)

Posted in Simulation

Mark

MarkGeiger@posteo.de

Introduction

This article is a bit different as the others. It does not focus on a single technology or a single aspect. I rather try to show how complex problems can be solved structurally, shown at a example of the AI-development of the robot soccer team TIGERs Mannheim (https://tigers-mannheim.de/).

Robot Soccer

RoboCup (aka the robot soccer world championship) was established in 1997. As of 2018, in the league we are playing at (the SSL league) are 8 vs. 8 robots playing against each other in a soccer game, similiar to real soccer. The current field dimensions are 12m x 9m. The field size was roughly doubled compared to the previous years. The robots use omnidirectional wheels, they are very agile and use a central AI to control them. The ultimate goal of the RoboCup initiative is stated as follows:"By the middle of the 21st century, a team of fully autonomous humanoid robot soccer players shall win a soccer game, complying with the official rules of FIFA, against the winner of the most recent World Cup." A video and more information about the project can be found in my about-page

Sfmea vs fta

CAD model of the TIGERs Mannheim soccer robot (2019 version)

The Problem

In this article I want to focus on a very specific, but still very complex Problem of the robot soccer AI developed by the TIGERs Mannheim team. To give you an idea about the complexity and pace of the game take a look at the following video. The video shows two consecutive passes, followed by a goal shot from the yellow team. The blue robots try to disrupt the offensive yellow robots and to defend the goal.

The problem that I want to talk about is the "selection of the offensive robots". The software has to continuously determine the "offensive robots", this are the robots that are supposed to move towards the ball to interact with it. While this sounds like a very simple task, it actually is not.

Past Attempts

To find a good approach for this problem it is always helpful to consider past approaches and the advantages and disadvantages of those post attempts.

The first approach, distance to the ball:

This was a very simple approach and also the first one we implemented. Choose the offensive robot by finding the robot with the min distance to the ball. This is very easy to implement and also very robust. There is no toggling or other strange effects. However, it will often not choose the robot that can reach the ball in the shortest time. Especially when the ball is moving or the robots have a high current velocity.

(+) good (-) bad
simple to implement bad results when the ball is moving
robust ignores actual time to get to the ball
ignores velocities
ignores ball movement

Improved approach, fastest robot to reach the ball:

The first improved version of the first approach was it to not consider distances to the ball, but to consider the times that the robots need to reach the ball position. However, this approach already requires a full physical movement model of the robots to calculate the time that a robot needs to reach a certain position (x,y,w) to another position (x,y,w). The calculate the robot trajectories the current state of the robot is taken into account, which also includes the current velocity and acceleration of the robot. While this approach has obivously some advantages it also comes with some drawbacks. Since the algorithm strongly relies on the velocity information of the robot this approach is a lot more unstable than the previous one. Velocities are difficult to measure and thus very noisy. This leads to toggling between the robot selections and thus requires high thresholds to avoid rapid toggling between two robots with similar "ball reaching times"

(+) good (-) bad
still simple to implement bad results when the ball is moving
more likely to find "the best robot" ignores ball movement
unstable

(The next part of the article will be published soon)

Comments

Blog - Newsletter

{{ formitem.title }}

{{ message | trans }}
{{ error | trans }}
{{{ thankyou }}}