You missed the Kick-Off or want to start at luhbots. Come to the team meeting: Soccer Mi 6:30 pm, @Work: Mo 6:30 pm [Approach]

Software

The Brains of the operation

lasse

Sebastian Knackstedt

Firmware and Software Leader
IMG_3219

Fabrice Zeug

Navigation
final_version

Larissa Seegemann

Strategy
IMG_9036-2

Max Westermann

Strategy and AI
lasse

Tobias Pahl

Graphics
lasse

Robert Hart

Visualization
IMG_9050-2

Tim Füchsel

Tooling
Leon

Leon Koch

Interface
lasse

Oktay Heizmann

Analyzing

Overview

The software is the third main part of our team besides the electronics and hardware department. The overall goal of the software is simple: Gather all information about the current game state and send the right commands to the robot to score a goal. But how can a computer program achieve this functionality? To do this our software is divided into separate modules, each with distinct input and outputs.

Before getting to the modules some information about the software language and build tools: Currently we’re using C++20 without any major framework to implement our modules. We build our software using CMake and Conan as dependency management. For the graphics we’re using a custom OpenGL render with ImGui as the GUI-Backend. Besides some external dependencies (like protobuf or asio) we try to write everything from scratch.

To communicate with the outer world (the robots and cameras) we have the “ssl_interface” and “robot_interface” modules. The “ssl_interface” module listens to data from the provided cameras and translates the vision into our custom format. Also, it reads the game state and message from the referees. The “robot_interface” on the other hand translates software commands into a format which is readable by our RF-basestation. This is necessary to write and read data directly to the robots.

All the information which come from different places needs to be gathered into a single place. This is the “game_data_provider”. It contains methods for filtering the incoming data (e.g., smoothing the changes) and other functionality to make it easier for the next modules to work with the data. For analyzing the data, it also provides the “Observer” which is an analyzer tool to get information about the current state of the game (ball possession, risk factor, target probability).

To calculate what each robot should do next, we use A.I. which is training using reinforcement learning. This happens in the “task_manager” module. The model gets all information about the game as input parameters and tries to find the best task for each robot to get the highest reward (which would be to win the game). The trained model is converted to a deployable format and used in the final software in a tensor runtime.

The results of the A.I. are tasks which are then executed. The main problem here is the movement since the robots should no collide with each other. This is implemented in the “localplanner” model, which controls the movements and behaviors of the robot.

These final commands are sent back to the robot again and the basic structure is complete. Of course debugging such an application would be very hard, so at the same time we’re writing our own visualization tool called “luhviz” which can show every possible information about each module and decisions of the software.

Software Modules

Strategy

The strategy is the 'intelligent' part of the network and it decides what to do next. For the strategy to decide what is best, it needs a lot of data which has to be filtered or calculated from all the inputs we receive. We use the concept of a threat level evaluator which indicates how likely it is for the enemy to score a goal and to win the game. If the enemy is leading, the threat level is always a bit higher and if we are in the lead it is always lower. Dependent on this threat level, we decide whether to be more aggressive or defensive.

Navigation

The navigation includes the localization of the robots and the ball on the field. We do this by displaying them as individual coordinate systems in a global coordinate system. This makes it easier to calculate the rotation and position of two robots to each other. This data is used by the strategy and the navigation modules equally. The main goal of the navigation system is the planning of the best route for the robot to reach the desired destination.

Connection

The connection module handles the communication with everything outside our own Network. It receives data and formats it to our network internal messaging format for further use. It also converts data from the internal messaging format to the format used by the external device. Lastly establishing and maintaining connection to the external devices is a task of the connection module.