Skip to main content

Protocol Documentation

Version: 1.7

Table of Contents

Top

idl/grpc/service.proto

ActionTypeEffector

ActionTypeEffector is the message that represents coefficients of the action types in the tree to calculate the predicted state evaluation. Each number should start from 0.0. For example, if evaluation of an action-state is 10, the action is direct pass, and value of direct_pass is 0.5, so the final evaluation of the action-state will be 5. example in python grpc:

actions = []
action_type_effector = pb2.ActionTypeEffector(
direct_pass=2.0,
lead_pass=1.5,
through_pass=1.0,
short_dribble=1.0,
long_dribble=1.0,
cross=1.0,
hold=1.0
)
planner_evaluation_effector = pb2.PlannerEvaluationEffector(
# opponent_effector= ...
# teammate_effector= ...
action_type_effector= action_type_effector
)
planner_evaluation = pb2.PlannerEvaluation(
effectors=planner_evaluation_effector,
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
direct_passfloatThe coefficient of the direct pass action.
lead_passfloatThe coefficient of the lead pass action.
through_passfloatThe coefficient of the through pass action.
short_dribblefloatThe coefficient of the short dribble action.
long_dribblefloatThe coefficient of the long dribble action.
crossfloatThe coefficient of the cross action.
holdfloatThe coefficient of the hold action.

AddArc

FieldTypeLabelDescription
levelLoggerLevel
centerRpcVector2D
radiusfloat
start_anglefloat
span_angelfloat
colorstring

AddCircle

FieldTypeLabelDescription
levelLoggerLevel
centerRpcVector2D
radiusfloat
colorstring
fillbool

AddLine

FieldTypeLabelDescription
levelLoggerLevel
startRpcVector2D
endRpcVector2D
colorstring

AddMessage

FieldTypeLabelDescription
levelLoggerLevel
positionRpcVector2D
messagestring
colorstring

AddPoint

FieldTypeLabelDescription
levelLoggerLevel
pointRpcVector2D
colorstring

AddRectangle

FieldTypeLabelDescription
levelLoggerLevel
leftfloat
topfloat
lengthfloat
widthfloat
colorstring
fillbool

AddSector

FieldTypeLabelDescription
levelLoggerLevel
centerRpcVector2D
min_radiusfloat
max_radiusfloat
start_anglefloat
span_angelfloat
colorstring
fillbool

AddText

FieldTypeLabelDescription
levelLoggerLevel
messagestring

AddTriangle

FieldTypeLabelDescription
levelLoggerLevel
point1RpcVector2D
point2RpcVector2D
point3RpcVector2D
colorstring
fillbool

AttentionTo

FieldTypeLabelDescription
sideSide
unumint32

AttentionToOf

Ball

Ball is the message that represents the ball in the soccer simulation.

FieldTypeLabelDescription
positionRpcVector2DThe position of the ball.
relative_positionRpcVector2DThe relative position of the ball to the agent who is sending the message.
seen_positionRpcVector2DThe position of the ball that the agent has seen.
heard_positionRpcVector2DThe position of the ball that the agent has heard.
velocityRpcVector2DThe velocity of the ball.
seen_velocityRpcVector2DThe velocity of the ball that the agent has seen.
heard_velocityRpcVector2DThe velocity of the ball that the agent has heard.
pos_countint32How many cycles ago the agent has seen or heard the ball.
seen_pos_countint32How many cycles ago the agent has seen the ball.
heard_pos_countint32How many cycles ago the agent has heard the ball.
vel_countint32How many cycles ago the agent has seen or heard the velocity of the ball.
seen_vel_countint32How many cycles ago the agent has seen the velocity of the ball.
heard_vel_countint32How many cycles ago the agent has heard the velocity of the ball.
lost_countint32How many cycles ago the agent has lost the ball.
ghost_countint32
dist_from_selffloatThe distance of the ball from the agent who is sending the message.
angle_from_selffloatThe angle of the ball from the agent who is sending the message.

BallGoalieMessage

FieldTypeLabelDescription
ball_positionRpcVector2D
ball_velocityRpcVector2D
goalie_positionRpcVector2D
goalie_body_directionfloat

BallMessage

FieldTypeLabelDescription
ball_positionRpcVector2D
ball_velocityRpcVector2D

BallPlayerMessage

FieldTypeLabelDescription
ball_positionRpcVector2D
ball_velocityRpcVector2D
uniform_numberint32
player_positionRpcVector2D
body_directionfloat

BestPlannerActionRequest

FieldTypeLabelDescription
register_responseRegisterResponse
pairsBestPlannerActionRequest.PairsEntryrepeated
stateState

BestPlannerActionRequest.PairsEntry

FieldTypeLabelDescription
keyint32
valueRpcActionState

BestPlannerActionResponse

FieldTypeLabelDescription
indexint32

Bhv_BeforeKickOff

FieldTypeLabelDescription
pointRpcVector2D

Bhv_BodyNeckToBall

Bhv_BodyNeckToPoint

FieldTypeLabelDescription
pointRpcVector2D

Bhv_Emergency

Bhv_GoToPointLookBall

FieldTypeLabelDescription
target_pointRpcVector2D
distance_thresholdfloat
max_dash_powerfloat

Bhv_NeckBodyToBall

FieldTypeLabelDescription
angle_buffloat

Bhv_NeckBodyToPoint

FieldTypeLabelDescription
pointRpcVector2D
angle_buffloat

Bhv_ScanField

Body_AdvanceBall

Body_ClearBall

Body_Dribble

FieldTypeLabelDescription
target_pointRpcVector2D
distance_thresholdfloat
dash_powerfloat
dash_countint32
dodgebool

Body_GoToPoint

todo more variables

FieldTypeLabelDescription
target_pointRpcVector2D
distance_thresholdfloat
max_dash_powerfloat

Body_GoToPointDodge

FieldTypeLabelDescription
target_pointRpcVector2D
dash_powerfloat

Body_HoldBall

FieldTypeLabelDescription
do_turnbool
turn_target_pointRpcVector2D
kick_target_pointRpcVector2D

Body_Intercept

FieldTypeLabelDescription
save_recoverybool
face_pointRpcVector2D

Body_KickOneStep

FieldTypeLabelDescription
target_pointRpcVector2D
first_speedfloat
force_modebool

Body_SmartKick

todo more variables

FieldTypeLabelDescription
target_pointRpcVector2D
first_speedfloat
first_speed_thresholdfloat
max_stepsint32

Body_StopBall

Body_StopDash

FieldTypeLabelDescription
save_recoverybool

Body_TackleToPoint

FieldTypeLabelDescription
target_pointRpcVector2D
min_probabilityfloat
min_speedfloat

Body_TurnToAngle

FieldTypeLabelDescription
anglefloat

Body_TurnToBall

FieldTypeLabelDescription
cycleint32

Body_TurnToPoint

FieldTypeLabelDescription
target_pointRpcVector2D
cycleint32

Catch

ChangePlayerType

FieldTypeLabelDescription
uniform_numberint32
typeint32

ChangeView

FieldTypeLabelDescription
view_widthViewWidth

CoachAction

FieldTypeLabelDescription
change_player_typesChangePlayerType
do_helios_substituteDoHeliosSubstitute
do_helios_say_player_typesDoHeliosSayPlayerTypes

CoachActions

FieldTypeLabelDescription
actionsCoachActionrepeated

Dash

Dash is the message that represents the dash action in the soccer simulation. By using this action, agent can dash (run or walk) to a direction with a power. The rcssserver, calculates the next position and velocity of the agent based on current position, velocity, power and direction.

FieldTypeLabelDescription
powerfloatThe power of the dash action. The power can be between -100 to 100. If the power is negative, the agent will dash in the backward direction by using two times of the power.
relative_directionfloatThe relative direction of the dash action to the body direction of the agent. The direction can be between -180 to 180.

DebugClient

FieldTypeLabelDescription
messagestring

DefenseLineMessage

FieldTypeLabelDescription
defense_line_xfloat

DoChangeMode

FieldTypeLabelDescription
game_mode_typeGameModeType
sideSidesome of the game mode need to know the side

DoChangePlayerType

FieldTypeLabelDescription
our_sidebool
uniform_numberint32
typeint32

DoHeliosSayPlayerTypes

DoHeliosSubstitute

DoKickOff

DoMoveBall

FieldTypeLabelDescription
positionRpcVector2D
velocityRpcVector2D

DoMovePlayer

FieldTypeLabelDescription
our_sidebool
uniform_numberint32
positionRpcVector2D
body_directionfloat

DoRecover

DribbleMessage

FieldTypeLabelDescription
target_pointRpcVector2D
queue_countint32

Empty

Focus_MoveToPoint

FieldTypeLabelDescription
target_pointRpcVector2D

Focus_Reset

GoalieAndPlayerMessage

FieldTypeLabelDescription
goalie_uniform_numberint32
goalie_positionRpcVector2D
goalie_body_directionfloat
player_uniform_numberint32
player_positionRpcVector2D

GoalieMessage

FieldTypeLabelDescription
goalie_uniform_numberint32
goalie_positionRpcVector2D
goalie_body_directionfloat

HeliosBasicMove

HeliosBasicOffensive

HeliosCommunicaion

HeliosFieldEvaluator

HeliosFieldEvaluator is the message that represents the field evaluator of the proxy agent to evaluate each node (predicted state) in the planner tree. If you dont set the field evaluator, the proxy agent will use the default field evaluator (HeliosFieldEvaluator) to evaluate each node in the planner tree. This field evaluator calculate the value of the predicted state by using this formula: value = x_coefficient * (ball.x + 52.5) + ball_dist_to_goal_coefficient * max(0.0, effective_max_ball_dist_to_goal - ball.dist(opponent goal center)) example in python grpc:

actions = []
helios_field_evaluator = pb2.HeliosFieldEvaluator(
x_coefficient=2.1,
ball_dist_to_goal_coefficient=1.8,
effective_max_ball_dist_to_goal=50.0
)
field_evaluator = pb2.PlannerFieldEvaluator(
helios_field_evaluator=helios_field_evaluator,
# matrix_field_evaluator=...
)
planner_evaluation = pb2.PlannerEvaluation(
field_evaluators=field_evaluator
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
x_coefficientfloatThe coefficient of the x-coordinate of the ball in the predicted state. The default value is 1.
ball_dist_to_goal_coefficientfloatThe coefficient of the distance of the ball to the opponent goal center in the predicted state. The default value is 1.
effective_max_ball_dist_to_goalfloatThe effective maximum distance of the ball to the opponent goal center in the predicted state. The default value is 40.0.

HeliosGoalie

HeliosGoalieKick

HeliosGoalieMove

HeliosOffensivePlanner

HeliosOffensivePlanner is the message that represents the offensive planner of the agent in the soccer simulation. The offensive planner is responsible for making decisions about the offensive actions of the agent by creating a tree of actions, finding the best chain of actions, and executing the first action in the chain, when the agent is ball owner. The best action is an action with best incomming predicted state. The best predicted state is the state that has the best evaluation value by using this formula: value = ball.x + max(0.0, 40.0 - ball.dist(opponent goal center)) Due to the complexity of the not simple actions, the agent can not calculate the best action in the first layer of the tree. So, the agent can use the simple actions in the first layer of the tree. To create the tree, the planner create all possible edges (actions) and create the next state of the agent by using each action. Then the planner starts to create the next layer of the tree by using the next state of the agent. The planner continues to create the tree until the max depth of the tree or number of edges is reached. For more information check this paper: HELIOS Base: An Open Source Package for the RoboCup Soccer 2D Simulation

Creating the tree and find best predicted state and action:

FieldTypeLabelDescription
direct_passboolWhether the agent can make a direct pass or not. The direct pass is a pass action that the agent can pass the ball to the position of a teammate player. This action is just used in the first layer of the tree.
lead_passboolWhether the agent can make a lead pass or not. The lead pass is a pass action that the agent can pass the ball to the position of a teammate player with a lead (very cloase to the teammate). This action is just used in the first layer of the tree.
through_passboolWhether the agent can make a through pass or not. The through pass is a pass action that the agent can pass the ball to the position of a teammate player with a through (close or very far from the teammate, between teammates and opponent goal). This action is just used in the first layer of the tree.
short_dribbleboolWhether the agent can make a short dribble or not. The short dribble is a dribble action that the agent can dribble the ball to a position. This action is just used in the first layer of the tree.
long_dribbleboolWhether the agent can make a long dribble or not. The long dribble is a dribble action that the agent can dribble the ball to a position. This dribble is longer than the short dribble. This action is just used in the first layer of the tree
crossboolWhether the agent can make a cross or not. The cross is a kick action that the agent can kick the ball to the position close to teammate, but it does not care that the teammate can control the ball or not. This action is just used in the first layer of the tree.
simple_passboolWhether the agent can make a simple pass or not. The simple pass is a pass action that the agent can pass the ball to the position of a teammate player. This action is just used in the second or more layers of the tree. This action is not very accurate.
simple_dribbleboolWhether the agent can make a simple dribble or not. The simple dribble is a dribble action that the agent can dribble the ball to a position. This action is just used in the second or more layers of the tree. This action is not very accurate.
simple_shootboolWhether the agent can make a simple shoot or not. The simple shoot is a kick action that the agent can kick the ball to the opponent goal. This action is just used in the second or more layers of the tree. This action is not very accurate.
server_side_decisionboolIf this value is true, the proxy agent, will create the tree and send all of the nodes to the playmaker server to choose the best action. If this value is false, the proxy agent will choose the best action by itself. The default value is false.
max_depthint32The maximum depth of the tree. The agent will create the tree with this depth. To create the first layer of the tree, the agent will use the direct_pass, lead_pass, through_pass, short_dribble, long_dribble, cross actions. The difault value is 4. So, if you do not set this value, the agent will create the tree with 4 depth. Due to the default value of rpc, 0 means the default value.
max_nodesint32The maximum number of nodes in the tree. The agent will create the tree with this number of nodes. The difault value is 500. So, if you do not set this value, the agent will create the tree with 500 nodes. Due to the default value of rpc, 0 means the default value.
evaluationPlannerEvaluationThe evaluation methods to evaluate the actions[predicted states] in the tree.

HeliosPenalty

HeliosSetPlay

HeliosShoot

InitMessage

FieldTypeLabelDescription
register_responseRegisterResponse
debug_modebool

InterceptInfo

InterceptInfo is the message that represents the information about an intercept action.

FieldTypeLabelDescription
action_typeInterceptActionTypeThe type of the intercept action.
turn_stepsint32The number of steps that the agent needs to turn to the ball.
turn_anglefloatThe angle that the agent needs to turn to the ball.
dash_stepsint32The number of steps that the agent needs to dash to the ball.
dash_powerfloatThe power of the dash action.
dash_dirfloatThe direction of the dash action to player's body direction.
final_self_positionRpcVector2DThe final position of the agent after the intercept action.
final_ball_distfloatThe final distance of the ball from the agent after the intercept action.
final_staminafloatThe final stamina of the agent after the intercept action.
valuefloatThe value of the intercept action. TODO less is better or more is better?

InterceptMessage

FieldTypeLabelDescription
ourbool
uniform_numberint32
cycleint32

InterceptTable

InterceptTable is the message that represents the intercept table of the agent.

FieldTypeLabelDescription
self_reach_stepsint32The number of steps that the agent needs to reach the ball.
first_teammate_reach_stepsint32The number of steps that the first teammate needs to reach the ball.
second_teammate_reach_stepsint32The number of steps that the second teammate needs to reach the ball.
first_opponent_reach_stepsint32The number of steps that the first opponent needs to reach the ball.
second_opponent_reach_stepsint32The number of steps that the second opponent needs to reach the ball.
first_teammate_idint32The ID of the first teammate. This ID is unique for each player's object in the each agent proxy. If the ID is 0, it means the agent has no first teammate.
second_teammate_idint32The ID of the second teammate. This ID is unique for each player's object in the each agent proxy. If the ID is 0, it means the agent has no second teammate.
first_opponent_idint32The ID of the first opponent. This ID is unique for each player's object in the each agent proxy. If the ID is 0, it means the agent has no first opponent.
second_opponent_idint32The ID of the second opponent. This ID is unique for each player's object in the each agent proxy. If the ID is 0, it means the agent has no second opponent.
self_intercept_infoInterceptInforepeatedThe intercept information of the agent.

Kick

FieldTypeLabelDescription
powerfloat
relative_directionfloat

Log

FieldTypeLabelDescription
add_textAddText
add_pointAddPoint
add_lineAddLine
add_arcAddArc
add_circleAddCircle
add_triangleAddTriangle
add_rectangleAddRectangle
add_sectorAddSector
add_messageAddMessage

MatrixFieldEvaluator

MatrixFieldEvaluator is the message that represents the matrix field evaluator of the proxy agent to evaluate each node (predicted state) in the planner tree. If you dont set the field evaluator, the proxy agent will use the default field evaluator (HeliosFieldEvaluator) to evaluate each node in the planner tree. This field evaluator calculate the value of the predicted state by using a matrix of float values.

| 10 | 20 | 30 | 40 | | 15 | 25 | 35 | 45 | | 10 | 20 | 30 | 40 |

In this example matrix, the value of each point in the opponent pernaly area is 45. example in python grpc:

actions = []
matrix_field_evaluator = pb2.MatrixFieldEvaluator(
evals=[
pb2.MatrixFieldEvaluatorY(evals=[10, 15, 10]),
pb2.MatrixFieldEvaluatorY(evals=[20, 25, 20]),
pb2.MatrixFieldEvaluatorY(evals=[30, 35, 30]),
pb2.MatrixFieldEvaluatorY(evals=[40, 45, 40]),
]
)
field_evaluator = pb2.PlannerFieldEvaluator(
# helios_field_evaluator=...
matrix_field_evaluator=matrix_field_evaluator
)
planner_evaluation = pb2.PlannerEvaluation(
field_evaluators=field_evaluator
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
evalsMatrixFieldEvaluatorYrepeated

MatrixFieldEvaluatorY

FieldTypeLabelDescription
evalsfloatrepeated

Move

FieldTypeLabelDescription
xfloat
yfloat

Neck_ScanField

Neck_ScanPlayers

todo min/max_angle

Neck_TurnToBall

Neck_TurnToBallAndPlayer

FieldTypeLabelDescription
sideSide
uniform_numberint32
count_thresholdint32

Neck_TurnToBallOrScan

FieldTypeLabelDescription
count_thresholdint32

Neck_TurnToGoalieOrScan

FieldTypeLabelDescription
count_thresholdint32

Neck_TurnToLowConfTeammate

Neck_TurnToPlayerOrScan

FieldTypeLabelDescription
sideSide
uniform_numberint32
count_thresholdint32

Neck_TurnToPoint

FieldTypeLabelDescription
target_pointRpcVector2D

Neck_TurnToRelative

FieldTypeLabelDescription
anglefloat

OffsideLineMessage

FieldTypeLabelDescription
offside_line_xfloat

OnePlayerMessage

FieldTypeLabelDescription
uniform_numberint32
positionRpcVector2D

OpponentEffector

PlannerEvaluation is the message that represents the evaluation methods to evaluate the actions[predicted states] in the tree. Using this method causes the predicted state eval to be decreased based on the distance or reach steps of the opponent players to the position of the ball in the predicted state. Each variable in the message is a list of float values. For example, if you want to decrease the predicted state eval if the distance of the opponent player to the ball is less than 5, You can set the negetive_effect_by_distance variable with the value of [-9.0, -8.5, -7.2, -6.1, -3.8]. It means the predicted state eval will be decreased by 9.0 if the distance is less than 1, 8.5 if the distance is less than 2, 7.2 if the distance is less than 3, 6.1 if the distance is less than 4, 3.8 if the distance is less than 5. Example in python grpc:

actions = []
opponent_effector = pb2.OpponentEffector(
negetive_effect_by_distance=[-50, -45, -40, -30, -20, -15, -10, -5, -2, -1, -0.5, -0.1],
negetive_effect_by_distance_based_on_first_layer=False,
negetive_effect_by_reach_steps=[],
negetive_effect_by_reach_steps_based_on_first_layer=False
)
planner_evaluation_effector = pb2.PlannerEvaluationEffector(
opponent_effector=opponent_effector,
# teammate_effector= ...
# action_type_effector= ...
)
planner_evaluation = pb2.PlannerEvaluation(
effectors=planner_evaluation_effector,
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
negetive_effect_by_distancefloatrepeatedThe list of float values that represents the negetive effect of the distance of the opponent player to the ball in the predicted state. The values of this list should be negetive numbers.
negetive_effect_by_distance_based_on_first_layerboolIf this value is true, the negetive_effect_by_distance will be calculated based on the first action of each action chain. For example, if we have a chain of actions like [direct_pass, simple_pass, simple_dribble], the negetive_effect_by_distance will be calculated based on the direct_pass action for all of the actions.
negetive_effect_by_reach_stepsfloatrepeatedThe list of float values that represents the negetive effect of the reach steps of the opponent player to the ball in the predicted state.
negetive_effect_by_reach_steps_based_on_first_layerboolIf this value is true, the negetive_effect_by_reach_steps will be calculated based on the first action of each action chain. For example, if we have a chain of actions like [direct_pass, simple_pass, simple_dribble], the negetive_effect_by_reach_steps will be calculated based on the direct_pass action for all of the actions.

OpponentMessage

FieldTypeLabelDescription
uniform_numberint32
positionRpcVector2D
body_directionfloat

PassMessage

FieldTypeLabelDescription
receiver_uniform_numberint32
receiver_pointRpcVector2D
ball_positionRpcVector2D
ball_velocityRpcVector2D

PassRequestMessage

FieldTypeLabelDescription
target_pointRpcVector2D

PenaltyKickState

FieldTypeLabelDescription
on_field_sideSide
current_taker_sideSide
our_taker_counterint32
their_taker_counterint32
our_scoreint32
their_scoreint32
is_kick_takerbool

PlannerEvaluation

PlannerEvaluation is the message that represents the evaluation methods to evaluate the actions[predicted states] in the tree. Using this method causes the predicted state eval to be calculated based on field evaluators and effected by effectors.

FieldTypeLabelDescription
effectorsPlannerEvaluationEffector
field_evaluatorsPlannerFieldEvaluator

PlannerEvaluationEffector

PlannerEvaluationEffector is the message that represents the effectors of the planner evaluation methods. The proxy agent will update the predicted state evaluation based on the effectors. example in python grpc:

actions = []
teammate_effector = pb2.TeammateEffector(
coefficients={2: 1.2, 5: 1.6}, # if action target is player 2, multiply by 1.2.
apply_based_on_first_layer=False
)
action_type_effector = pb2.ActionTypeEffector(
direct_pass=2.0,
lead_pass=1.5,
through_pass=1.0,
short_dribble=1.0,
long_dribble=1.0,
cross=1.0,
hold=1.0
)
opponent_effector = pb2.OpponentEffector(
negetive_effect_by_distance=[-50, -45, -40, -30, -20, -15, -10, -5, -2, -1, -0.5, -0.1],
negetive_effect_by_distance_based_on_first_layer=False,
negetive_effect_by_reach_steps=[],
negetive_effect_by_reach_steps_based_on_first_layer=False
)
planner_evaluation_effector = pb2.PlannerEvaluationEffector(
opponent_effector= opponent_effector,
teammate_effector= teammate_effector,
action_type_effector= action_type_effector
)
planner_evaluation = pb2.PlannerEvaluation(
effectors=planner_evaluation_effector,
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
opponent_effectorOpponentEffectorThe effector of the opponent players. You can set the negetive effect of the distance or reach steps of the opponent players to the ball in the predicted state. By using this effector, the proxy agent will decrease the predicted state evaluation based on the distance or reach steps of the opponent players to the ball in the predicted state.
action_type_effectorActionTypeEffectorThe effector of the action types. You can set the coefficients of the action types in the tree to calculate the predicted state evaluation. By using this effector, the proxy agent will update the predicted state evaluation based on the coefficients of the action types in the tree.
teammate_effectorTeammateEffectorThe effector of the teammates. You can set the coefficients of the teammates in the tree to calculate the predicted state evaluation. By using this effector, the proxy agent will update the predicted state evaluation based on the coefficients of the teammates in the tree.

PlannerFieldEvaluator

PlannerFieldEvaluator is the message that represents the field evaluator of the proxy agent to evaluate each node (predicted state) in the planner tree. If you dont set the field evaluator, the proxy agent will use the default field evaluator (HeliosFieldEvaluator) to evaluate each node in the planner tree. This field evaluator calculate the value of the predicted state by using helios_field_evaluator or/and matrix_field_evaluator. Note: if you just use the matrix_field_evaluator, value of all target in each square of the matrix should be the same, so it causes that the player choosing hold ball action instead of dribble in that area. To avoid this issue, you can use the helios_field_evaluator with the matrix_field_evaluator together.

FieldTypeLabelDescription
helios_field_evaluatorHeliosFieldEvaluator
matrix_field_evaluatorMatrixFieldEvaluator

Player

Player is the message that represents a player in the soccer simulation. To get type information of the player, you can use the type_id field and player type information.

FieldTypeLabelDescription
positionRpcVector2DThe position of the player.
seen_positionRpcVector2DThe position of the player that the agent has seen.
heard_positionRpcVector2DThe position of the player that the agent has heard.
velocityRpcVector2DThe velocity of the player.
seen_velocityRpcVector2DThe velocity of the player that the agent has seen.
pos_countint32How many cycles ago the agent has seen or heard the player.
seen_pos_countint32How many cycles ago the agent has seen the player.
heard_pos_countint32How many cycles ago the agent has heard the player.
vel_countint32How many cycles ago the agent has seen or heard the velocity of the player.
seen_vel_countint32How many cycles ago the agent has seen the velocity of the player.
ghost_countint32How many cycles ago the agent has lost the player.
dist_from_selffloatThe distance of the player from the agent who is sending the message.
angle_from_selffloatThe angle of the player from the agent who is sending the message.
idint32The unique identifier of the player.
sideSideThe side of the player. It can be LEFT or RIGHT or UNKNOWN if the side is not known.
uniform_numberint32The uniform number of the player.
uniform_number_countint32How many cycles ago the agent has seen the uniform number of the player.
is_goalieboolWhether the player is a goalie or not.
body_directionfloatThe body direction of the player.
body_direction_countint32How many cycles ago the agent has seen the body direction of the player.
face_directionfloatThe face direction of the player. In soccer simulation 2D, face direction is the direction that the player is looking at.
face_direction_countint32How many cycles ago the agent has seen the face direction of the player.
point_to_directionfloatThe direction that the player is pointing to.
point_to_direction_countint32How many cycles ago the agent has seen the point to direction of the player.
is_kickingboolWhether the player is kicking or not.
dist_from_ballfloatThe distance of the player from the ball.
angle_from_ballfloatThe angle of the player from the ball.
ball_reach_stepsint32How many cycles the player needs to reach the ball.
is_tacklingboolWhether the player is tackling or not.
type_idint32The type identifier of the player.

PlayerAction

FieldTypeLabelDescription
dashDash
turnTurn
kickKick
tackleTackle
catchCatch
moveMove
turn_neckTurnNeck
change_viewChangeView
saySay
point_toPointTo
point_to_ofPointToOf
attention_toAttentionTo
attention_to_ofAttentionToOf
logLog
debug_clientDebugClient
body_go_to_pointBody_GoToPoint
body_smart_kickBody_SmartKick
bhv_before_kick_offBhv_BeforeKickOff
bhv_body_neck_to_ballBhv_BodyNeckToBall
bhv_body_neck_to_pointBhv_BodyNeckToPoint
bhv_emergencyBhv_Emergency
bhv_go_to_point_look_ballBhv_GoToPointLookBall
bhv_neck_body_to_ballBhv_NeckBodyToBall
bhv_neck_body_to_pointBhv_NeckBodyToPoint
bhv_scan_fieldBhv_ScanField
body_advance_ballBody_AdvanceBall
body_clear_ballBody_ClearBall
body_dribbleBody_Dribble
body_go_to_point_dodgeBody_GoToPointDodge
body_hold_ballBody_HoldBall
body_interceptBody_Intercept
body_kick_one_stepBody_KickOneStep
body_stop_ballBody_StopBall
body_stop_dashBody_StopDash
body_tackle_to_pointBody_TackleToPoint
body_turn_to_angleBody_TurnToAngle
body_turn_to_ballBody_TurnToBall
body_turn_to_pointBody_TurnToPoint
focus_move_to_pointFocus_MoveToPoint
focus_resetFocus_Reset
neck_scan_fieldNeck_ScanField
neck_scan_playersNeck_ScanPlayers
neck_turn_to_ball_and_playerNeck_TurnToBallAndPlayer
neck_turn_to_ball_or_scanNeck_TurnToBallOrScan
neck_turn_to_ballNeck_TurnToBall
neck_turn_to_goalie_or_scanNeck_TurnToGoalieOrScan
neck_turn_to_low_conf_teammateNeck_TurnToLowConfTeammate
neck_turn_to_player_or_scanNeck_TurnToPlayerOrScan
neck_turn_to_pointNeck_TurnToPoint
neck_turn_to_relativeNeck_TurnToRelative
view_change_widthView_ChangeWidth
view_normalView_Normal
view_synchView_Synch
view_wideView_Wide
helios_goalieHeliosGoalie
helios_goalie_moveHeliosGoalieMove
helios_goalie_kickHeliosGoalieKick
helios_shootHeliosShoot
helios_offensive_plannerHeliosOffensivePlanner
helios_basic_offensiveHeliosBasicOffensive
helios_basic_moveHeliosBasicMove
helios_set_playHeliosSetPlay
helios_penaltyHeliosPenalty
helios_communicationHeliosCommunicaion
bhv_do_force_kickbhv_doForceKick
bhv_do_heard_pass_recievebhv_doHeardPassRecieve

PlayerActions

FieldTypeLabelDescription
actionsPlayerActionrepeated
ignore_preprocessbool
ignore_doforcekickbool
ignore_doHeardPassRecievebool
ignore_doIntentionbool
ignore_shootInPreprocessbool

PlayerParam

FieldTypeLabelDescription
register_responseRegisterResponse
player_typesint32
subs_maxint32
pt_maxint32
allow_mult_default_typebool
player_speed_max_delta_minfloat
player_speed_max_delta_maxfloat
stamina_inc_max_delta_factorfloat
player_decay_delta_minfloat
player_decay_delta_maxfloat
inertia_moment_delta_factorfloat
dash_power_rate_delta_minfloat
dash_power_rate_delta_maxfloat
player_size_delta_factorfloat
kickable_margin_delta_minfloat
kickable_margin_delta_maxfloat
kick_rand_delta_factorfloat
extra_stamina_delta_minfloat
extra_stamina_delta_maxfloat
effort_max_delta_factorfloat
effort_min_delta_factorfloat
random_seedint32
new_dash_power_rate_delta_minfloat
new_dash_power_rate_delta_maxfloat
new_stamina_inc_max_delta_factorfloat
kick_power_rate_delta_minfloat
kick_power_rate_delta_maxfloat
foul_detect_probability_delta_factorfloat
catchable_area_l_stretch_minfloat
catchable_area_l_stretch_maxfloat

PlayerType

FieldTypeLabelDescription
register_responseRegisterResponse
idint32
stamina_inc_maxfloat
player_decayfloat
inertia_momentfloat
dash_power_ratefloat
player_sizefloat
kickable_marginfloat
kick_randfloat
extra_staminafloat
effort_maxfloat
effort_minfloat
kick_power_ratefloat
foul_detect_probabilityfloat
catchable_area_l_stretchfloat
unum_far_lengthfloat
unum_too_far_lengthfloat
team_far_lengthfloat
team_too_far_lengthfloat
player_max_observation_lengthfloat
ball_vel_far_lengthfloat
ball_vel_too_far_lengthfloat
ball_max_observation_lengthfloat
flag_chg_far_lengthfloat
flag_chg_too_far_lengthfloat
flag_max_observation_lengthfloat
kickable_areafloat
reliable_catchable_distfloat
max_catchable_distfloat
real_speed_maxfloat
player_speed_max2float
real_speed_max2float
cycles_to_reach_max_speedint32
player_speed_maxfloat

PointTo

FieldTypeLabelDescription
xfloat
yfloat

PointToOf

RecoveryMessage

FieldTypeLabelDescription
recoveryfloat

RegisterRequest

RegisterRequest is the message that the client sends to the server to register itself. The client should send this message to the server to register itself. The server will respond with a RegisterResponse message.

FieldTypeLabelDescription
agent_typeAgentTypeThe type of the agent. It can be PlayerT, CoachT, or TrainerT.
team_namestringThe name of the team that the agent belongs to.
uniform_numberint32The uniform number of the agent.
rpc_versionint32The version of the RPC protocol that the client supports.

RegisterResponse

RegisterResponse is the message that the server sends to the client in response to a RegisterRequest message. The server will respond with this message after receiving a RegisterRequest message. The client should use the information in this message to identify itself to the server.

FieldTypeLabelDescription
client_idint32The unique identifier assigned to the client by the server.
agent_typeAgentTypeThe type of the agent. It can be PlayerT, CoachT, or TrainerT.
team_namestringThe name of the team that the agent belongs to.
uniform_numberint32The uniform number of the agent.
rpc_server_language_typeRpcServerLanguageTypeThe language that the server is implemented in.

RpcActionState

FieldTypeLabelDescription
actionRpcCooperativeAction
predict_stateRpcPredictState
evaluationdouble

RpcCooperativeAction

FieldTypeLabelDescription
categoryRpcActionCategory
indexint32
sender_unumint32
target_unumint32
target_pointRpcVector2D
first_ball_speeddouble
first_turn_momentdouble
first_dash_powerdouble
first_dash_angle_relativedouble
duration_stepint32
kick_countint32
turn_countint32
dash_countint32
final_actionbool
descriptionstring
parent_indexint32

RpcPredictState

FieldTypeLabelDescription
spend_timeint32
ball_holder_unumint32
ball_positionRpcVector2D
ball_velocityRpcVector2D
our_defense_line_xdouble
our_offense_line_xdouble

RpcVector2D

RpcVector2D represents a 2D vector with additional properties. If you want to have access to geometric operations, you can use Vector2D class in pyrusgeom package To use this class, you need to install pyrusgeom package, import Vector2D class and create a Vector2D object with x and y values.

FieldTypeLabelDescription
xfloatThe x-coordinate of the vector.
yfloatThe y-coordinate of the vector.
distfloatThe distance magnitude of the vector.
anglefloatThe angle of the vector in degrees. In soccer simulation 2D environment, the 0 degree is opponent's goal, and the angle increases in the counter-clock direction. So, if your team is in left side, -90 degree is up, 0 degree is right (opponent gole), 90 degree is down.

Say

FieldTypeLabelDescription
ball_messageBallMessage
pass_messagePassMessage
intercept_messageInterceptMessage
goalie_messageGoalieMessage
goalie_and_player_messageGoalieAndPlayerMessage
offside_line_messageOffsideLineMessage
defense_line_messageDefenseLineMessage
wait_request_messageWaitRequestMessage
setplay_messageSetplayMessage
pass_request_messagePassRequestMessage
stamina_messageStaminaMessage
recovery_messageRecoveryMessage
stamina_capacity_messageStaminaCapacityMessage
dribble_messageDribbleMessage
ball_goalie_messageBallGoalieMessage
one_player_messageOnePlayerMessage
two_player_messageTwoPlayerMessage
three_player_messageThreePlayerMessage
self_messageSelfMessage
teammate_messageTeammateMessage
opponent_messageOpponentMessage
ball_player_messageBallPlayerMessage

Self

Self is the message that represents the agent itself in the soccer simulation. When an agent send a message to the playmaker server, self is information about the agent itself.

FieldTypeLabelDescription
positionRpcVector2DThe position of the agent.
seen_positionRpcVector2DThe position of the agent that the agent has seen. (By using flags)
heard_positionRpcVector2DThe position of the agent that the agent has heard. (This is not very useful)
velocityRpcVector2DThe velocity of the agent.
seen_velocityRpcVector2DThe velocity of the agent that the agent has seen. (By using flags)
pos_countint32How many cycles ago the agent has seen or heard itself.
seen_pos_countint32How many cycles ago the agent has seen itself.
heard_pos_countint32How many cycles ago the agent has heard itself.
vel_countint32How many cycles ago the agent has seen or heard the velocity of itself.
seen_vel_countint32How many cycles ago the agent has seen the velocity of itself.
ghost_countint32How many cycles ago the agent has lost itself.
idint32The ID number for this object in proxy.
sideSideThe side of the agent. It can be LEFT or RIGHT or UNKNOWN if the side is not known.
uniform_numberint32The uniform number of the agent.
uniform_number_countint32How many cycles ago the agent has seen the uniform number of itself.
is_goalieboolWhether the agent is a goalie or not.
body_directionfloatThe body direction of the agent.
body_direction_countint32How many cycles ago the agent has seen the body direction of itself.
face_directionfloatThe face direction of the agent. In soccer simulation 2D, face direction is the direction that the agent is looking at. This is a global direction.
face_direction_countint32How many cycles ago the agent has seen the face direction of itself.
point_to_directionfloatThe direction that the agent is pointing to. This is a global direction.
point_to_direction_countint32How many cycles ago the agent has seen the point to direction of itself.
is_kickingboolWhether the agent is kicking or not.
dist_from_ballfloatThe distance of the agent from the ball.
angle_from_ballfloatThe angle of the agent from the ball.
ball_reach_stepsint32How many cycles the agent needs to reach the ball.
is_tacklingboolWhether the agent is tackling or not.
relative_neck_directionfloatThe relative neck direction of the agent to the body direction.
staminafloatThe stamina of the agent. This number is between TODO
is_kickableboolWhether the agent is kickable or not. Means the agent can kick the ball.
catch_probabilityfloatThe probability of the agent to catch the ball. This number is important for goalies.
tackle_probabilityfloatThe probability of the agent to tackle the ball.
foul_probabilityfloatThe probability of the agent to foul.
view_widthViewWidthThe view width of the agent. It can be NARROW, NORMAL, or WIDE.
type_idint32The type identifier of the agent. The RcssServer generates 18 different types of agents. The coach is reponsible to give the type information to the agent.
kick_ratefloatThe kick rate of the agent. This number is calculated by this formula: self.playerType().kickRate(wm.ball().distFromSelf(), (wm.ball().angleFromSelf() - self.body()).degree()), So, if the kick rate is more, the agent can kick the ball with more first speed to any angle.
recoveryfloatThe current estimated recovery value. TODO more info
stamina_capacityfloatThe stamina capacity of the agent. This number is between 0 to ~130000 depending on the server param.
cardCardTypeThe card type of the agent. It can be NO_CARD, YELLOW, or RED.
catch_timeint32The time when the last catch command is performed.
effortfloatThe effort of the agent. TODO more info

SelfMessage

FieldTypeLabelDescription
self_positionRpcVector2D
self_body_directionfloat
self_staminafloat

ServerParam

FieldTypeLabelDescription
register_responseRegisterResponse
inertia_momentfloat
player_sizefloat
player_decayfloat
player_randfloat
player_weightfloat
player_speed_maxfloat
player_accel_maxfloat
stamina_maxfloat
stamina_inc_maxfloat
recover_initfloat
recover_dec_thrfloat
recover_minfloat
recover_decfloat
effort_initfloat
effort_dec_thrfloat
effort_minfloat
effort_decfloat
effort_inc_thrfloat
effort_incfloat
kick_randfloat
team_actuator_noisebool
player_rand_factor_lfloat
player_rand_factor_rfloat
kick_rand_factor_lfloat
kick_rand_factor_rfloat
ball_sizefloat
ball_decayfloat
ball_randfloat
ball_weightfloat
ball_speed_maxfloat
ball_accel_maxfloat
dash_power_ratefloat
kick_power_ratefloat
kickable_marginfloat
control_radiusfloat
control_radius_widthfloat
max_powerfloat
min_powerfloat
max_momentfloat
min_momentfloat
max_neck_momentfloat
min_neck_momentfloat
max_neck_anglefloat
min_neck_anglefloat
visible_anglefloat
visible_distancefloat
wind_dirfloat
wind_forcefloat
wind_anglefloat
wind_randfloat
kickable_areafloat
catch_area_lfloat
catch_area_wfloat
catch_probabilityfloat
goalie_max_movesint32
corner_kick_marginfloat
offside_active_area_sizefloat
wind_nonebool
use_wind_randombool
coach_say_count_maxint32
coach_say_msg_sizeint32
clang_win_sizeint32
clang_define_winint32
clang_meta_winint32
clang_advice_winint32
clang_info_winint32
clang_mess_delayint32
clang_mess_per_cycleint32
half_timeint32
simulator_stepint32
send_stepint32
recv_stepint32
sense_body_stepint32
lcm_stepint32
player_say_msg_sizeint32
player_hear_maxint32
player_hear_incint32
player_hear_decayint32
catch_ban_cycleint32
slow_down_factorint32
use_offsidebool
kickoff_offsidebool
offside_kick_marginfloat
audio_cut_distfloat
dist_quantize_stepfloat
landmark_dist_quantize_stepfloat
dir_quantize_stepfloat
dist_quantize_step_lfloat
dist_quantize_step_rfloat
landmark_dist_quantize_step_lfloat
landmark_dist_quantize_step_rfloat
dir_quantize_step_lfloat
dir_quantize_step_rfloat
coach_modebool
coach_with_referee_modebool
use_old_coach_hearbool
slowness_on_top_for_left_teamfloat
slowness_on_top_for_right_teamfloat
start_goal_lint32
start_goal_rint32
fullstate_lbool
fullstate_rbool
drop_ball_timeint32
synch_modebool
synch_offsetint32
synch_micro_sleepint32
point_to_banint32
point_to_durationint32
player_portint32
trainer_portint32
online_coach_portint32
verbose_modebool
coach_send_vi_stepint32
replay_filestring
landmark_filestring
send_commsbool
text_loggingbool
game_loggingbool
game_log_versionint32
text_log_dirstring
game_log_dirstring
text_log_fixed_namestring
game_log_fixed_namestring
use_text_log_fixedbool
use_game_log_fixedbool
use_text_log_datedbool
use_game_log_datedbool
log_date_formatstring
log_timesbool
record_messagebool
text_log_compressionint32
game_log_compressionint32
use_profilebool
tackle_distfloat
tackle_back_distfloat
tackle_widthfloat
tackle_exponentfloat
tackle_cyclesint32
tackle_power_ratefloat
freeform_wait_periodint32
freeform_send_periodint32
free_kick_faultsbool
back_passesbool
proper_goal_kicksbool
stopped_ball_velfloat
max_goal_kicksint32
clang_del_winint32
clang_rule_winint32
auto_modebool
kick_off_waitint32
connect_waitint32
game_over_waitint32
team_l_startstring
team_r_startstring
keepaway_modebool
keepaway_lengthfloat
keepaway_widthfloat
keepaway_loggingbool
keepaway_log_dirstring
keepaway_log_fixed_namestring
keepaway_log_fixedbool
keepaway_log_datedbool
keepaway_startint32
nr_normal_halfsint32
nr_extra_halfsint32
penalty_shoot_outsbool
pen_before_setup_waitint32
pen_setup_waitint32
pen_ready_waitint32
pen_taken_waitint32
pen_nr_kicksint32
pen_max_extra_kicksint32
pen_dist_xfloat
pen_random_winnerbool
pen_allow_mult_kicksbool
pen_max_goalie_dist_xfloat
pen_coach_moves_playersbool
module_dirstring
ball_stuck_areafloat
coach_msg_filestring
max_tackle_powerfloat
max_back_tackle_powerfloat
player_speed_max_minfloat
extra_staminafloat
synch_see_offsetint32
extra_half_timeint32
stamina_capacityfloat
max_dash_anglefloat
min_dash_anglefloat
dash_angle_stepfloat
side_dash_ratefloat
back_dash_ratefloat
max_dash_powerfloat
min_dash_powerfloat
tackle_rand_factorfloat
foul_detect_probabilityfloat
foul_exponentfloat
foul_cyclesint32
golden_goalbool
red_card_probabilityfloat
illegal_defense_durationint32
illegal_defense_numberint32
illegal_defense_dist_xfloat
illegal_defense_widthfloat
fixed_teamname_lstring
fixed_teamname_rstring
max_catch_anglefloat
min_catch_anglefloat
random_seedint32
long_kick_power_factorfloat
long_kick_delayint32
max_monitorsint32
catchable_areafloat
real_speed_maxfloat
pitch_half_lengthfloat
pitch_half_widthfloat
our_penalty_area_line_xfloat
their_penalty_area_line_xfloat
penalty_area_half_widthfloat
penalty_area_lengthfloat
goal_widthfloat
goal_area_widthfloat
goal_area_lengthfloat
center_circle_rfloat
goal_post_radiusfloat

SetplayMessage

FieldTypeLabelDescription
wait_stepint32

StaminaCapacityMessage

FieldTypeLabelDescription
stamina_capacityfloat

StaminaMessage

FieldTypeLabelDescription
staminafloat

State

State is the message that represents the state of the agent in the soccer simulation.

FieldTypeLabelDescription
register_responseRegisterResponseThe response of the agent registration. The agent should use this information to identify itself to the playermaker server.
world_modelWorldModelThe world model of the agent. The agent should use this information to make decisions. If the server is in full state mode, the world model will be full state without noise.
full_world_modelWorldModelThe full world model of the agent. This value will be set only if the server is in full state mode and proxy agent is in debug mode. TODO add more information
need_preprocessboolWhether the agent needs to preprocess the world model or not. If the agent needs to do some preprocessing actions, it means the proxy agent will igonre the playmaker actions, you can ignore preprocessing.

Tackle

FieldTypeLabelDescription
power_or_dirfloat
foulbool

TeammateEffector

TeammateEffector is the message that represents the coefficients of the teammates in the tree to calculate the predicted state evaluation. Each number should start from 0.0. For example, if evaluation of an action-state is 10, the action is direct pass to player 5, and value of player 5 is 0.5, so the final evaluation of the action-state will be 5. example in python grpc:

actions = []
teammate_effector = pb2.TeammateEffector(
coefficients={2: 1.2, 5: 1.6}, # if action target is player 2, multiply by 1.2.
apply_based_on_first_layer=False
)
planner_evaluation_effector = pb2.PlannerEvaluationEffector(
# opponent_effector= ...
teammate_effector= teammate_effector
# action_type_effector= ...
)
planner_evaluation = pb2.PlannerEvaluation(
effectors=planner_evaluation_effector,
)
helios_offensive_planner = pb2.HeliosOffensivePlanner(
lead_pass=True,
direct_pass=False,
through_pass=True,
simple_pass=True,
short_dribble=True,
long_dribble=True,
simple_shoot=True,
simple_dribble=False,
cross=True,
server_side_decision=False,
max_depth=5,
max_nodes=800,
evalution=planner_evaluation
)
actions.append(pb2.PlayerAction(helios_offensive_planner=helios_offensive_planner))
return pb2.PlayerActions(actions=actions)
FieldTypeLabelDescription
coefficientsTeammateEffector.CoefficientsEntryrepeatedThe map of the coefficients of the teammates. The key of the map is the uniform number of the teammate, and the value is the coefficient of the teammate. The value should be started from 0.0.
apply_based_on_first_layerboolIf this value is true, the coefficients will be calculated based on the first action target of each action chain. For example, if we have a chain of actions like [direct_pass to 5, simple_pass to 6, simple_pass to 7], the coefficients will be calculated based on the coeeficient of the player 5 for all of the actions.

TeammateEffector.CoefficientsEntry

FieldTypeLabelDescription
keyint32
valuefloat

TeammateMessage

FieldTypeLabelDescription
uniform_numberint32
positionRpcVector2D
body_directionfloat

ThreePlayerMessage

FieldTypeLabelDescription
first_uniform_numberint32
first_positionRpcVector2D
second_uniform_numberint32
second_positionRpcVector2D
third_uniform_numberint32
third_positionRpcVector2D

TrainerAction

FieldTypeLabelDescription
do_kick_offDoKickOff
do_move_ballDoMoveBall
do_move_playerDoMovePlayer
do_recoverDoRecover
do_change_modeDoChangeMode
do_change_player_typeDoChangePlayerType

TrainerActions

FieldTypeLabelDescription
actionsTrainerActionrepeated

Turn

Turn is the message that represents the turn action in the soccer simulation. By using this action, agent can turn to a direction relative to the current body direction. The rcssserver, calculates the next body direction of the agent based on current body direction, relative direction and velocity of the agent.

FieldTypeLabelDescription
relative_directionfloatThe relative direction of the turn action to the body direction of the agent. The direction can be between -180 to 180.

TurnNeck

FieldTypeLabelDescription
momentfloat

TwoPlayerMessage

FieldTypeLabelDescription
first_uniform_numberint32
first_positionRpcVector2D
second_uniform_numberint32
second_positionRpcVector2D

View_ChangeWidth

FieldTypeLabelDescription
view_widthViewWidth

View_Normal

View_Synch

View_Wide

WaitRequestMessage

WorldModel

WorldModel is the message that represents the world model in the soccer simulation. The WorldModel message contains all the information about the current state of the game.

FieldTypeLabelDescription
intercept_tableInterceptTableThe intercept table of the agent.
our_team_namestringThe name of our team.
their_team_namestringThe name of their team.
our_sideSideThe side of our team. It can be LEFT or RIGHT.
last_set_play_start_timeint32The last set play start time.
selfSelfThe information about the agent itself.
ballBallThe information about the ball.
teammatesPlayerrepeated
opponentsPlayerrepeated
unknownsPlayerrepeated
our_players_dictWorldModel.OurPlayersDictEntryrepeated
their_players_dictWorldModel.TheirPlayersDictEntryrepeated
our_goalie_uniform_numberint32The uniform number of our goalie.
their_goalie_uniform_numberint32The uniform number of their goalie.
offside_line_xfloatThe x-coordinate of the offside line of opponent team.
ofside_line_x_countint32How many cycles ago the agent has seen (calculated) the offside line.
kickable_teammate_idint32The ID of the kickable teammate. To get the information about the kickable teammate, you can find a player in teammates or our_players_dict with this ID.
kickable_opponent_idint32The ID of the kickable opponent. To get the information about the kickable opponent, you can find a player in opponents or their_players_dict with this ID.
last_kick_sideSideThe last side that the ball was kicked.
last_kicker_uniform_numberint32The last uniform number that the ball was kicked.
cycleint32The current cycle of the game.
game_mode_typeGameModeTypeThe current game mode type.
left_team_scoreint32The score of the left team.
right_team_scoreint32The score of the right team.
is_our_set_playboolWhether it is our set play or not.
is_their_set_playboolWhether it is their set play or not.
stoped_cycleint32The number of cycles that the game has stopped. For example, when the cycle is 90, and stoped_cycle is 10, it means the game has stopped at 90th cycle for 10 cycles.
our_team_scoreint32The score of our team.
their_team_scoreint32The score of their team.
is_penalty_kick_modeboolWhether it is penalty kick mode or not.
helios_home_positionsWorldModel.HeliosHomePositionsEntryrepeatedThe home positions of the agents in the helios strategy. Helios base code is using Delanaray triangulation to calculate the home positions.
our_defense_line_xdoubleThe x-coordinate of our defense line. The diffence line is minimum x-coordinate of our players (except goalie) and ball.
their_defense_line_xdoubleThe x-coordinate of their defense line. The diffence line is minimum x-coordinate of their players (except goalie) and ball.
our_defense_player_line_xdoubleThe x-coordinate of our defense player line. The diffence player line is minimum x-coordinate of our players (except goalie).
their_defense_player_line_xdoubleThe x-coordinate of their defense player line. The diffence player line is minimum x-coordinate of their players (except goalie).
kickable_teammate_existanceboolWhether the kickable teammate exists or not.
kickable_opponent_existanceboolWhether the kickable opponent exists or not.
penalty_kick_statePenaltyKickStateThe penalty kick state.
see_timeint32The time that the agent has seen the world model.
time_stoppedint32
set_play_countint32
game_mode_sideSide

WorldModel.HeliosHomePositionsEntry

FieldTypeLabelDescription
keyint32
valueRpcVector2D

WorldModel.OurPlayersDictEntry

FieldTypeLabelDescription
keyint32
valuePlayer

WorldModel.TheirPlayersDictEntry

FieldTypeLabelDescription
keyint32
valuePlayer

bhv_doForceKick

bhv_doHeardPassRecieve

AgentType

AgentType is the enum that represents the different types of agents.

NameNumberDescription
PlayerT0
CoachT1
TrainerT2

CardType

Type of player's card.

NameNumberDescription
NO_CARD0
YELLOW1
RED2

GameModeType

NameNumberDescription
BeforeKickOff0
TimeOver1
PlayOn2
KickOff_3
KickIn_4
FreeKick_5
CornerKick_6
GoalKick_7
AfterGoal_8
OffSide_9
PenaltyKick_10
FirstHalfOver11
Pause12
Human13
FoulCharge_14
FoulPush_15
FoulMultipleAttacker_16
FoulBallOut_17
BackPass_18
FreeKickFault_19
CatchFault_20
IndFreeKick_21
PenaltySetup_22
PenaltyReady_23
PenaltyTaken_24
PenaltyMiss_25
PenaltyScore_26
IllegalDefense_27
PenaltyOnfield_28
PenaltyFoul_29
GoalieCatch_30
ExtendHalf31
MODE_MAX32

InterceptActionType

InterceptActionType is the enum that represents the different types of intercept actions.

NameNumberDescription
UNKNOWN_Intercept_Action_Type0Unknown intercept action type.
OMNI_DASH1Omni dash intercept action type. Means the agent will dash to the ball in any direction.
TURN_FORWARD_DASH2Turn forward dash intercept action type. Means the agent will turn to the ball and dash to the ball.
TURN_BACKWARD_DASH3Turn backward dash intercept action type. Means the agent will turn to the ball and dash to the ball in the backward direction.

LoggerLevel

NameNumberDescription
NoneLevel0
SYSTEM1
SENSOR2
WORLD4
ACTION8
INTERCEPT16
KICK32
HOLD64
DRIBBLE128
PASS256
CROSS512
SHOOT1024
CLEAR2048
BLOCK4096
MARK8192
POSITIONING16384
ROLE32768
TEAM65536
COMMUNICATION131072
ANALYZER262144
ACTION_CHAIN524288
PLAN1048576TRAINING = 0x80000000; LEVEL_ANY = 0xffffffff;

RpcActionCategory

NameNumberDescription
AC_Hold0
AC_Dribble1
AC_Pass2
AC_Shoot3
AC_Clear4
AC_Move5
AC_NoAction6

RpcServerLanguageType

NameNumberDescription
UNKNOWN_LANGUAGE0
PYThON1
JAVA2
CPP3
CSHARP4
RUBY5
JAVE_SCRIPT6
GO7

Side

NameNumberDescription
UNKNOWN0
LEFT1
RIGHT2

ViewWidth

Enum representing the different view widths available in the soccer simulation. For more information, see the documentation at link.

NameNumberDescription
NARROW0Narrow view width (60 degrees).
NORMAL1Normal view width (90 degrees).
WIDE2Wide view width (180 degrees).

Game

The Game service provides various RPC methods for interacting with a soccer simulation.

Method NameRequest TypeResponse TypeDescription
GetPlayerActionsStatePlayerActions
GetCoachActionsStateCoachActions
GetTrainerActionsStateTrainerActions
SendInitMessageInitMessageEmpty
SendServerParamsServerParamEmpty
SendPlayerParamsPlayerParamEmpty
SendPlayerTypePlayerTypeEmpty
RegisterRegisterRequestRegisterResponse
SendByeCommandRegisterResponseEmpty
GetBestPlannerActionBestPlannerActionRequestBestPlannerActionResponse

Scalar Value Types

.proto TypeNotesC++JavaPythonGoC#PHPRuby
doubledoubledoublefloatfloat64doublefloatFloat
floatfloatfloatfloatfloat32floatfloatFloat
int32Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.int32intintint32intintegerBignum or Fixnum (as required)
int64Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.int64longint/longint64longinteger/stringBignum
uint32Uses variable-length encoding.uint32intint/longuint32uintintegerBignum or Fixnum (as required)
uint64Uses variable-length encoding.uint64longint/longuint64ulonginteger/stringBignum or Fixnum (as required)
sint32Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.int32intintint32intintegerBignum or Fixnum (as required)
sint64Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.int64longint/longint64longinteger/stringBignum
fixed32Always four bytes. More efficient than uint32 if values are often greater than 2^28.uint32intintuint32uintintegerBignum or Fixnum (as required)
fixed64Always eight bytes. More efficient than uint64 if values are often greater than 2^56.uint64longint/longuint64ulonginteger/stringBignum
sfixed32Always four bytes.int32intintint32intintegerBignum or Fixnum (as required)
sfixed64Always eight bytes.int64longint/longint64longinteger/stringBignum
boolboolbooleanbooleanboolboolbooleanTrueClass/FalseClass
stringA string must always contain UTF-8 encoded or 7-bit ASCII text.stringStringstr/unicodestringstringstringString (UTF-8)
bytesMay contain any arbitrary sequence of bytes.stringByteStringstr[]byteByteStringstringString (ASCII-8BIT)