3#include "proto/parameters.pb.h"
4#include "shared/constants.h"
5#include "software/ai/evaluation/calc_best_shot.h"
6#include "software/ai/hl/stp/tactic/chip/chip_fsm.h"
7#include "software/ai/hl/stp/tactic/pivot_kick/pivot_kick_fsm.h"
8#include "software/ai/hl/stp/tactic/tactic.h"
9#include "software/geom/algorithms/calculate_block_cone.h"
10#include "software/geom/algorithms/closest_point.h"
11#include "software/geom/algorithms/contains.h"
12#include "software/geom/algorithms/convex_angle.h"
13#include "software/geom/algorithms/intersection.h"
14#include "software/geom/line.h"
21 class PositionToBlock;
26 bool should_move_to_goal_line;
29 DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
33 static constexpr double YEET_CHIP_DISTANCE_METERS = 2.0;
42 TbotsProto::GoalieTacticConfig goalie_tactic_config,
43 TbotsProto::RobotNavigationObstacleConfig robot_navigation_obstacle_config,
44 TbotsProto::MaxAllowedSpeedMode max_allowed_speed_mode)
45 : goalie_tactic_config(goalie_tactic_config),
46 robot_navigation_obstacle_config(robot_navigation_obstacle_config),
47 max_allowed_speed_mode(max_allowed_speed_mode),
48 robot_radius_expansion_amount(
49 ROBOT_MAX_RADIUS_METERS *
50 robot_navigation_obstacle_config.robot_obstacle_inflation_factor())
65 TbotsProto::GoalieTacticConfig goalie_tactic_config);
94 const World &world,
const TbotsProto::GoalieTacticConfig &goalie_tactic_config);
116 bool shouldMoveToGoalLine(
const Update &event);
145 void panic(
const Update &event);
162 boost::sml::back::process<DribbleFSM::Update> processEvent);
178 boost::sml::back::process<PivotKickFSM::Update> processEvent);
197 using namespace boost::sml;
199 DEFINE_SML_STATE(Panic)
201 DEFINE_SML_STATE(PositionToBlock)
202 DEFINE_SML_STATE(MoveToGoalLine)
205 DEFINE_SML_EVENT(Update)
212 DEFINE_SML_GUARD(shouldMoveToGoalLine)
215 DEFINE_SML_ACTION(
panic)
221 return make_transition_table(
223 *PositionToBlock_S + Update_E[shouldMoveToGoalLine_G] / moveToGoalLine_A =
226 Update_E[shouldEvacuateCrease_G] / retrieveFromDeadZone_A = DribbleFSM_S,
227 PositionToBlock_S + Update_E[shouldPanic_G] / panic_A = Panic_S,
228 PositionToBlock_S + Update_E[shouldPivotChip_G] / updatePivotKick_A =
230 PositionToBlock_S + Update_E / positionToBlock_A,
231 DribbleFSM_S + Update_E[retrieveDone_G] / updatePivotKick_A = PivotKickFSM_S,
232 DribbleFSM_S + Update_E[shouldMoveToGoalLine_G] / moveToGoalLine_A =
234 DribbleFSM_S + Update_E[ballInInflatedDefenseArea_G] / retrieveFromDeadZone_A,
235 DribbleFSM_S + Update_E[!ballInInflatedDefenseArea_G] / positionToBlock_A =
237 Panic_S + Update_E[shouldMoveToGoalLine_G] / moveToGoalLine_A =
239 Panic_S + Update_E[shouldPivotChip_G] / updatePivotKick_A = PivotKickFSM_S,
240 Panic_S + Update_E[panicDone_G] / positionToBlock_A = PositionToBlock_S,
241 Panic_S + Update_E / panic_A,
242 PivotKickFSM_S + Update_E[shouldMoveToGoalLine_G] / moveToGoalLine_A =
244 PivotKickFSM_S + Update_E[ballInInflatedDefenseArea_G] / updatePivotKick_A,
245 PivotKickFSM_S + Update_E[!ballInInflatedDefenseArea_G] / positionToBlock_A =
247 MoveToGoalLine_S + Update_E[shouldMoveToGoalLine_G] / moveToGoalLine_A =
249 MoveToGoalLine_S + Update_E[!shouldMoveToGoalLine_G] / positionToBlock_A =
255 static constexpr double BALL_RETRIEVED_THRESHOLD = 0.2;
257 TbotsProto::GoalieTacticConfig goalie_tactic_config;
259 TbotsProto::RobotNavigationObstacleConfig robot_navigation_obstacle_config;
261 TbotsProto::MaxAllowedSpeedMode max_allowed_speed_mode;
263 double robot_radius_expansion_amount;
Definition rectangle.h:10
Definition dribble_fsm.h:14
Definition goalie_fsm.h:25
Definition goalie_fsm.h:18
static Rectangle getNoChipRectangle(const Field &field)
Definition goalie_fsm.cpp:80
bool panicDone(const Update &event)
Definition goalie_fsm.cpp:162
static std::vector< Point > getIntersectionsBetweenBallVelocityAndFullGoalSegment(const Ball &ball, const Field &field)
Definition goalie_fsm.cpp:63
void retrieveFromDeadZone(const Update &event, boost::sml::back::process< DribbleFSM::Update > processEvent)
Definition goalie_fsm.cpp:265
bool ballInInflatedDefenseArea(const Update &event)
Definition goalie_fsm.cpp:233
bool shouldEvacuateCrease(const Update &event)
Definition goalie_fsm.cpp:114
static Point findGoodChipTarget(const World &world, const TbotsProto::GoalieTacticConfig &goalie_tactic_config)
Definition goalie_fsm.cpp:87
void panic(const Update &event)
Definition goalie_fsm.cpp:173
bool shouldPivotChip(const Update &event)
Definition goalie_fsm.cpp:154
static Point getGoaliePositionToBlock(const Ball &ball, const Field &field, TbotsProto::GoalieTacticConfig goalie_tactic_config)
Definition goalie_fsm.cpp:7
void moveToGoalLine(const Update &event)
Definition goalie_fsm.cpp:247
GoalieFSM(TbotsProto::GoalieTacticConfig goalie_tactic_config, TbotsProto::RobotNavigationObstacleConfig robot_navigation_obstacle_config, TbotsProto::MaxAllowedSpeedMode max_allowed_speed_mode)
Definition goalie_fsm.h:41
void positionToBlock(const Update &event)
Definition goalie_fsm.cpp:218
bool shouldPanic(const Update &event)
Definition goalie_fsm.cpp:144
bool retrieveDone(const Update &event)
Definition goalie_fsm.cpp:257
void updatePivotKick(const Update &event, boost::sml::back::process< PivotKickFSM::Update > processEvent)
Definition goalie_fsm.cpp:192
Definition pivot_kick_fsm.h:9