Thunderbots Project
Loading...
Searching...
No Matches
pivot_kick_fsm.h
1#pragma once
2
3#include "software/ai/hl/stp/tactic/dribble/dribble_fsm.h"
4#include "software/ai/hl/stp/tactic/move/move_fsm.h"
5#include "software/ai/hl/stp/tactic/tactic.h"
6#include "software/logger/logger.h"
7
9{
10 class KickState;
11 class StartState;
12
14 {
15 // The location where the kick will be taken from
16 Point kick_origin;
17 // The direction the Robot will kick in
18 Angle kick_direction;
19 // How the robot will chip or kick the ball
20 AutoChipOrKick auto_chip_or_kick;
21 };
22
23 // this struct defines the only event that the PivotKickFSM responds to
24 DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
25
33 const Update& event, boost::sml::back::process<DribbleFSM::Update> processEvent);
34
40 void kickBall(const Update& event);
41
49 bool ballKicked(const Update& event);
50
51 auto operator()()
52 {
53 using namespace boost::sml;
54
55 DEFINE_SML_STATE(StartState)
56 DEFINE_SML_STATE(KickState)
57 DEFINE_SML_STATE(DribbleFSM)
58 DEFINE_SML_EVENT(Update)
59
60 DEFINE_SML_GUARD(ballKicked)
61 DEFINE_SML_SUB_FSM_UPDATE_ACTION(getPossessionAndPivot, DribbleFSM)
62 DEFINE_SML_ACTION(kickBall)
63
64 return make_transition_table(
65 // src_state + event [guard] / action = dest_state
66 *StartState_S + Update_E / getPossessionAndPivot_A = DribbleFSM_S,
67 DribbleFSM_S + Update_E / getPossessionAndPivot_A, DribbleFSM_S = KickState_S,
68 KickState_S + Update_E[!ballKicked_G] / kickBall_A,
69 KickState_S + Update_E[ballKicked_G] / SET_STOP_PRIMITIVE_ACTION = X,
70 X + Update_E / SET_STOP_PRIMITIVE_ACTION = X);
71 }
72};
Definition angle.h:15
Definition point.h:14
Definition primitive_types.h:9
Definition dribble_fsm.h:14
Definition pivot_kick_fsm.h:14
Definition pivot_kick_fsm.h:9
bool ballKicked(const Update &event)
Definition pivot_kick_fsm.cpp:27
DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS void getPossessionAndPivot(const Update &event, boost::sml::back::process< DribbleFSM::Update > processEvent)
Definition pivot_kick_fsm.cpp:6
void kickBall(const Update &event)
Definition pivot_kick_fsm.cpp:17