Get desktop application:
View/edit binary Protocol Buffers messages
the current advantage choice of the team the choice is valid until another choice is received if the team disconnects, the choice is reset to its default (STOP) teams may either send their current choice continuously or only on change
Used in:
stop the game
keep the game running
The config for an auto referee
Used in:
The game event behaviors for this auto referee
Behaviors for the game events reported by this auto referee
Used in:
Not set or unknown
Accept the game event
Log the game event
Silently ignore the game event
AutoRefRegistration is the first message that a client must send to the controller to identify itself
identifier is a unique name of the client
signature can optionally be specified to enable secure communication
AutoRefToController is the wrapper message for all subsequent messages from the autoRef to the controller
signature can optionally be specified to enable secure communication
game_event is an optional event that the autoRef detected during the game
The ball state
Used in:
ball position [m]
ball velocity [m/s]
BotId is the combination of a team and a robot id
Used in: , , , ,
the robot number
the team that the robot belongs to
Capabilities that a source implementation can have
Used in:
A certain change
Used in: , ,
An identifier of the origin that triggered the change
Is this change revertible?
Accept a proposal group (that contain one or more proposals of the same type)
Used in:
The id of the group
An identifier of the acceptor
Add a new game event
Used in:
The game event
Add a new passive game event (that is only logged, but does not automatically trigger anything)
Used in:
The game event
Add a new proposal (i.e. from an auto referee for majority voting)
Used in:
The proposal
Add a new red card
Used in:
The team that the card is for
The game event that caused the card
Add a new yellow card
Used in:
The team that the card is for
The game event that caused the card
Switch to a new stage
Used in:
The new stage
New referee command
Used in:
The command
Change the current game state
Used in:
The new game state
Revert a certain change
Used in:
The id of the change
Set the ball placement pos
Used in:
The position in [m]
Used in:
The new status message
Switch the team colors
Used in:
(message has no fields)
Update some configuration
Used in:
The division to play with
the team that does/did the first kick off
The match type
The number of robots per team
Update the current state of a team (all fields that should be updated are set)
Used in:
The team
Change the name of the team
Change the number of goals that the teams has at the moment
The id of the goal keeper
The number of timeouts that the team has left
The timeout time that the team has left
Does the team play on the positive or the negative half (in ssl-vision coordinates)?
The number of ball placement failures
Can the team place the ball, or is ball placement for this team disabled and should be skipped?
The number of challenge flags that the team has left
The number of bot substitutions left by the team in this halftime
Does the team want to substitute a robot in the next possible situation?
Does the team want to take a timeout in the next possible situation?
Does the team want to challenge a recent decision of the referee?
Does the team want to request an emergency stop?
Update a certain yellow card of the team
Update a certain red card of the team
Update a certain foul of the team
Remove the yellow card with this id
Remove the red card with this id
Remove the foul with this id
The color of the hull
Trigger when a yellow card timed out
Used in:
The team that the card was for
The input format to the GC
New unix timestamp in [ns] for the GC
New tracker packet with ball and robot data
(UI) API input
Update geometry
The output format of the GC response
Latest referee message
Used in: ,
Used in:
The engine config
Used in: ,
The behavior for each game event
The config for each auto referee
The selected tracker source
The list of available teams
Enable or disable auto continuation
Behaviors for each game event
Used in:
Not set or unknown
Always accept the game event
Accept the game event if was reported by a majority
Only propose the game event (can be accepted in the UI by a human)
Only log the game event to the protocol
Silently ignore the game event
Used in: ,
type of action that will be performed next
for which team (if team specific)
list of issues that hinders the game from continuing
timestamp at which the action will be ready (to give some preparation time)
state of the action
Used in:
Used in:
Used in:
a reply that is sent by the controller for each request from teams or autoRefs
Used in: ,
status_code is an optional code that indicates the result of the last request
reason is an optional explanation of the status code
next_token must be send with the next request, if secure communication is used the token is used to avoid replay attacks the token is always present in the very first message before the registration starts the token is not present, if secure communication is not used
verification indicates if the last request could be verified (secure communication)
Used in:
Used in:
ControllerToAutoRef is the wrapper message for all messages from controller to autoRef
a reply from the controller
wrapper for all messages from controller to a team's computer
a reply from the controller
Division denotes the current division, which influences some rules
Used in: ,
Used in: ,
GameEvent contains exactly one game event Each game event has optional and required fields. The required fields are mandatory to process the event. Some optional fields are only used for visualization, others are required to determine the ball placement position. If fields are missing that are required for the ball placement position, no ball placement command will be issued. Fields are marked optional to make testing and extending of the protocol easier. An autoRef should ideally set all fields, except if there are good reasons to not do so. IMPORTANT: If any field is added here, also update the reflection when displaying the event (currently in refereestatuswidget)
Used in: , , , , , , , , , , , , ,
A globally unique id of the game event.
The type of the game event.
The origins of this game event. Empty, if it originates from game controller. Contains autoRef name(s), if it originates from one or more autoRefs. Ignored if sent by autoRef to game controller.
Unix timestamp in microseconds when the event was created.
the event that occurred
replaced by ready_to_continue flag
obsolete
replaced by the meta-information in the possible_goal event
obsolete
rule removed
obsolete
obsolete
can not be used as long as autoRefs do not judge pushing
rule removed
the referee msg already indicates this
the ball left the field via goal line and a team committed an aimless kick
Used in:
the team that last touched the ball
the bot that last touched the ball
the location where the ball left the field [m]
the location where the ball was last touched [m]
an attacker touched the ball multiple times when it was not allowed to
Used in:
the team that found guilty
the bot that touched the ball twice
the location of the ball when it was first touched [m]
an attacker was located too near to the opponent defense area during stop or free kick
Used in:
the team that found guilty
the bot that is too close to the defense area
the location of the bot [m]
the distance [m] of the bot to the penalty area
the location of the ball at the moment when this foul occurred [m]
an attacker touched the ball inside the opponent defense area
Used in:
the team that found guilty
the bot that is inside the penalty area
the location of the bot [m]
the distance [m] that the bot is inside the penalty area
an attacker touched the opponent robot inside defense area
Used in:
the team that found guilty
the bot that touched the opponent robot
the bot of the opposite team that was touched
the location of the contact point between both bots [m]
the ball left the field normally
Used in:
the team that last touched the ball
the bot that last touched the ball
the location where the ball left the field [m]
two robots crashed into each other with similar speeds
Used in:
the bot of the yellow team
the bot of the blue team
the location of the crash (center between both bots) [m]
the calculated crash speed [m/s] of the two bots
the difference [m/s] of the velocity of the two bots
the angle [rad] in the range [0, π] of the bot velocity vectors an angle of 0 rad ( 0°) means, the bots barely touched each other an angle of π rad (180°) means, the bots crashed frontal into each other
two robots crashed into each other and one team was found guilty to due significant speed difference
Used in:
the team that caused the crash
the bot that caused the crash
the bot of the opposite team that was involved in the crash
the location of the crash (center between both bots) [m]
the calculated crash speed vector [m/s] of the two bots
the difference [m/s] of the velocity of the two bots
the angle [rad] in the range [0, π] of the bot velocity vectors an angle of 0 rad ( 0°) means, the bots barely touched each other an angle of π rad (180°) means, the bots crashed frontal into each other
a bot dribbled to ball too far
Used in:
the team that found guilty
the bot that dribbled too far
the location where the dribbling started [m]
the location where the maximum dribbling distance was reached [m]
a bot dropped parts
Used in:
the team that found guilty
the bot that dropped the parts
the location where the parts were dropped [m]
the location of the ball at the moment when this foul occurred [m]
a bot held the ball for too long
Used in:
the team that found guilty
the bot that holds the ball
the location of the ball [m]
the duration [s] that the bot hold the ball
a bot interfered the ball placement of the other team
Used in:
the team that found guilty
the bot that interfered the placement
the location of the bot [m]
a bot kicked the ball too fast
Used in:
the team that found guilty
the bot that kicked too fast
the location of the ball at the time of the highest speed [m]
the absolute initial ball speed (kick speed) [m/s]
was the ball chipped?
a bot pushed another bot over a significant distance
Used in:
the team that pushed the other team
the bot that pushed the other bot
the bot of the opposite team that was pushed
the location of the push (center between both bots) [m]
the pushed distance [m]
bots are being substituted by a team
Used in:
the team that substitutes robots
a bot tipped over
Used in:
the team that found guilty
the bot that tipped over
the location of the bot [m]
the location of the ball at the moment when this foul occurred [m]
a bot moved too fast while the game was stopped
Used in:
the team that found guilty
the bot that was too fast
the location of the bot [m]
the bot speed [m/s]
a robot chipped the ball over the field boundary out of the playing surface
Used in:
the team that has too many robots
the location of the ball [m]
A challenge flag, requested by a team previously, is flagged
Used in:
the team that requested the challenge flag
A challenge, flagged recently, has been handled by the referee
Used in:
the team that requested the challenge flag
the challenge was accepted by the referee
the ball entered the goal, but was initially chipped
Used in:
the team that tried to shoot the goal
the bot that kicked the ball
the location where the ball entered the goal [m]
the location where the ball was kicked [m]
the maximum height [m] of the ball, before it entered the goal and since the last kick [m]
a defender other than the keeper was fully located inside its own defense and touched the ball
Used in:
the team that found guilty
the bot that is inside the penalty area
the location of the bot [m]
the distance [m] from bot case to the nearest point outside the defense area
a defender other than the keeper was partially located inside its own defense area and touched the ball
Used in:
the team that found guilty
the bot that is partially inside the penalty area
the location of the bot
the distance [m] that the bot is inside the penalty area
the location of the ball at the moment when this foul occurred [m]
a bot of the defending team got too close to the kick point during a free kick
Used in:
the team that was found guilty
the bot that violates the distance to the kick point
the location of the bot [m]
the distance [m] from bot to the kick point (including the minimum radius)
An emergency stop, requested by team previously, occurred
Used in:
the team that substitutes robots
A foul for excessive bot substitutions
Used in:
the team that substitutes robots
a team shot a goal
Used in:
the team that scored the goal
the team that shot the goal (different from by_team for own goals)
the bot that shot the goal
the location where the ball entered the goal [m]
the location where the ball was kicked (for deciding if this was a valid goal) [m]
the maximum height the ball reached during the goal kick (for deciding if this was a valid goal) [m]
number of robots of scoring team when the ball entered the goal (for deciding if this was a valid goal)
The UNIX timestamp [μs] when the scoring team last touched the ball
An additional message with e.g. a reason for invalid goals
the ball entered the goal directly during an indirect free kick
Used in:
the team that tried to shoot the goal
the bot that kicked the ball - at least the team must be set
the location where the ball entered the goal [m]
the location where the ball was kicked [m]
a keeper held the ball in its defense area for too long
Used in:
the team that found guilty
the location of the ball [m]
the duration [s] that the keeper hold the ball
timeout waiting for the attacking team to perform the free kick
Used in:
the team that that should have kicked
the location of the ball [m]
the time [s] that was waited
a team collected multiple yellow cards
Used in:
the team that received multiple yellow cards
a team collected multiple fouls, which results in a yellow card
Used in:
the team that collected multiple fouls
the list of game events that caused the multiple fouls Sadly, this recursion seems to cause a memory leak in our Protobuf version repeated GameEvent caused_game_events = 2;
a team failed to place the ball multiple times in a row
Used in:
the team that failed multiple times
game was stuck
Used in:
the location of the ball
the time [s] that was waited
the penalty kick failed (by time or by keeper)
Used in:
the team that last touched the ball
the location of the ball at the moment of this event [m]
an explanation of the failure
ball placement failed
Used in:
the team that failed
the remaining distance [m] from ball to placement position
the distance [m] of the nearest own robot to the ball
a team successfully placed the ball
Used in:
the team that did the placement
the time [s] taken for placing the ball
the distance [m] between placement location and actual ball position
the distance [m] between the initial ball location and the placement position
both teams are prepared - all conditions are met to continue (with kickoff or penalty kick)
Used in:
the time [s] taken for preparing
a team has too many robots on the field
Used in:
the team that has too many robots
number of robots allowed at the moment
number of robots currently on the field
the location of the ball at the moment when this foul occurred [m]
Used in:
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by GC
triggered by autoRef
triggered by human ref
triggered by human ref
triggered by human ref
triggered by human ref
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by autoRef
triggered by GC
triggered by autoRef
triggered by GC
triggered by GC
triggered by autoRef
triggered by autoRef
triggered by GC and autoRef
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by GC
triggered by human ref
triggered by human ref
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
deprecated = true
a team was found guilty for major unsporting behavior
Used in:
the team that found guilty
an explanation of the situation and decision
a team was found guilty for minor unsporting behavior
Used in:
the team that found guilty
an explanation of the situation and decision
Used in: ,
Used in:
The GC state contains settings and state independent of the match state
Used in:
the state of each team
the states of the auto referees
the attached trackers (uuid -> source_name)
the next actions that can be executed when continuing
the next actions that can be executed when continuing
The GC state of an auto referee
Used in:
true: The autoRef connected via TLS with a verified certificate
The GC state for a single team
Used in:
true: The team is connected
true: The team connected via TLS with a verified certificate
true: The remote control for the team is connected
true: The remote control for the team connected via TLS with a verified certificate
the advantage choice of the team
GC state of a tracker
Name of the source
UUID of the source
Current ball
Current robots
Message format that can be send from the client to the GC
Used in:
A change to be enqueued into the GC engine
Reset the match
An updated config delta
Continue with action
A ball kicked by a robot, including predictions when the ball will come to a stop
Used in:
The initial position [m] from which the ball was kicked
The initial velocity [m/s] with which the ball was kicked
The unix timestamp [s] when the kick was performed
The predicted unix timestamp [s] when the ball comes to a stop
The predicted position [m] at which the ball will come to a stop
The robot that kicked the ball
Message format that is pushed from the GC to the client
The current match state
The current GC state
The protocol
The engine config
Used in: ,
The timestamp when the game event proposal occurred
The proposed game event.
Used in:
Unique ID of this group
The proposals in this group
Whether the proposal group was accepted
The game protocol
Used in:
Is this a delta only? Entries that were already sent are not sent again, because the protocol is immutable anyway. But if the game is reset, the whole protocol must be replaced. That's what this flag is for.
The (delta) list of entries
A protocol entry of a change
Used in:
Id of the entry
The change that was made
The match time elapsed when this change was made
The stage time elapsed when this change was made
Used in: ,
The robot state
Used in:
robot id and team
robot position [m]
Used in:
Signature can be added to a request to let it be verfied by the controller
Used in: , , ,
the token that was received with the last controller reply
the PKCS1v15 signature of this message
Used in: ,
The maximum number of bots per team (overwrites the division config)
A state change
A unique increasing id
The previous state
The state after the change was applied
The change itself
The timestamp when the change was triggered
Team is either blue or yellow
Used in: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
team not set
yellow team
blue team
The choice from a team regarding the advantage rule
Used in:
the choice of the team
possible advantage choices
Used in:
stop the game
keep the match running
Used in:
a registration that must be send by teams to the controller as the very first message
the exact team name as published by the game-controller
signature can optionally be specified to enable secure communication
the team (relevant only if a team plays against itself)
wrapper for all messages from a team's computer to the controller
signature can optionally be specified to enable secure communication
request a new desired keeper id
response to an advantage choice request
request to substitute a robot at the next possibility
send a ping to the GC to test if the connection is still open. the value is ignored and a reply is sent back
A single tracked ball
Used in:
The position (x, y, height) [m] in the ssl-vision coordinate system
The velocity [m/s] in the ssl-vision coordinate system
The visibility of the ball A value between 0 (not visible) and 1 (visible) The exact implementation depends on the source software
A frame that contains all currently tracked objects on the field on all cameras
Used in:
A monotonous increasing frame counter
The unix timestamp in [s] of the data If timestamp is larger than timestamp_captured, the source has applied a prediction already
The list of detected balls The first ball is the primary one Sources may add additional balls based on their capabilities
The list of detected robots of both teams
Information about a kicked ball, if the ball was kicked by a robot and is still moving Note: This field is optional. Some source implementations might not set this at any time
List of capabilities of the source implementation
A single tracked robot
Used in:
The position [m] in the ssl-vision coordinate system
The orientation [rad] in the ssl-vision coordinate system
The velocity [m/s] in the ssl-vision coordinate system
The angular velocity [rad/s] in the ssl-vision coordinate system
The visibility of the robot A value between 0 (not visible) and 1 (visible) The exact implementation depends on the source software
A wrapper packet containing meta data of the source Also serves for the possibility to extend the protocol later
Used in:
A random UUID of the source that is kept constant at the source while running If multiple sources are broadcasting to the same network, this id can be used to identify individual sources
The name of the source software that is producing this messages.
The tracked frame
A vector with two dimensions
Used in: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
A vector with three dimensions
Used in: , ,
Used in: ,