3#include "proto/parameters.pb.h"
4#include "shared/constants.h"
5#include "software/ai/evaluation/time_to_travel.h"
6#include "software/ai/hl/stp/tactic/move/move_fsm.h"
7#include "software/ai/hl/stp/tactic/tactic.h"
8#include "software/ai/hl/stp/tactic/transition_conditions.h"
9#include "software/geom/algorithms/contains.h"
10#include "software/geom/algorithms/convex_angle.h"
11#include "software/geom/algorithms/distance.h"
25 explicit DribbleFSM(TbotsProto::DribbleTacticConfig dribble_tactic_config)
26 : dribble_tactic_config(dribble_tactic_config)
33 std::optional<Point> dribble_destination;
35 std::optional<Angle> final_dribble_orientation;
37 bool allow_excessive_dribbling;
40 DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
54 const Angle &face_ball_angle,
55 double additional_offset = 0.0);
78 std::optional<Point> dribble_destination);
88 const Point &ball_position,
const Point &robot_position,
89 std::optional<Angle> final_dribble_orientation);
103 std::optional<Point> dribble_destination_opt,
104 std::optional<Angle> final_dribble_orientation_opt);
124 void dribble(
const Update &event);
174 using namespace boost::sml;
176 DEFINE_SML_STATE(GetPossession)
177 DEFINE_SML_STATE(Dribble)
178 DEFINE_SML_STATE(LoseBall)
179 DEFINE_SML_EVENT(Update)
188 return make_transition_table(
190 *GetPossession_S + Update_E[havePossession_G] / dribble_A = Dribble_S,
191 GetPossession_S + Update_E[!havePossession_G] / getPossession_A,
192 Dribble_S + Update_E[shouldLoseBall_G] / loseBall_A = LoseBall_S,
193 Dribble_S + Update_E[lostPossession_G] / getPossession_A = GetPossession_S,
194 Dribble_S + Update_E[!dribblingDone_G] / dribble_A,
195 Dribble_S + Update_E[dribblingDone_G] / dribble_A = X,
196 LoseBall_S + Update_E[shouldLoseBall_G] / loseBall_A,
197 LoseBall_S + Update_E[!shouldLoseBall_G] / getPossession_A = GetPossession_S,
198 X + Update_E[lostPossession_G] / getPossession_A = GetPossession_S,
199 X + Update_E[!dribblingDone_G] / dribble_A = Dribble_S,
200 X + Update_E / dribble_A = X);
205 TbotsProto::DribbleTacticConfig dribble_tactic_config;
Definition dribble_fsm.h:31
Definition dribble_fsm.h:14
bool havePossession(const Update &event)
Definition dribble_fsm.cpp:174
static std::tuple< Point, Angle > calculateNextDribbleDestinationAndOrientation(const Ball &ball, const Robot &robot, std::optional< Point > dribble_destination_opt, std::optional< Angle > final_dribble_orientation_opt)
Definition dribble_fsm.cpp:104
bool lostPossession(const Update &event)
Definition dribble_fsm.cpp:179
static Point getDribbleBallDestination(const Point &ball_position, std::optional< Point > dribble_destination)
Definition dribble_fsm.cpp:79
void getPossession(const Update &event)
Definition dribble_fsm.cpp:121
static DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS Point robotPositionToFaceBall(const Point &ball_position, const Angle &face_ball_angle, double additional_offset=0.0)
Definition dribble_fsm.cpp:6
DribbleFSM(TbotsProto::DribbleTacticConfig dribble_tactic_config)
Definition dribble_fsm.h:25
void dribble(const Update &event)
Definition dribble_fsm.cpp:139
bool dribblingDone(const Update &event)
Definition dribble_fsm.cpp:187
Point findInterceptionPoint(const Robot &robot, const Ball &ball, const Field &field)
Definition dribble_fsm.cpp:15
void loseBall(const Update &event)
Definition dribble_fsm.cpp:155
bool shouldLoseBall(const Update &event)
Definition dribble_fsm.cpp:206
static Angle getFinalDribbleOrientation(const Point &ball_position, const Point &robot_position, std::optional< Angle > final_dribble_orientation)
Definition dribble_fsm.cpp:91