22 #include <boost/msm/front/state_machine_def.hpp>
25 #include <boost/msm/front/functor_row.hpp>
34 #include <glog/logging.h>
43 #include <aerial_autonomy/pick_place_events.h>
47 namespace msmf = boost::msm::front;
48 namespace vse = visual_servoing_events;
49 namespace pe = pick_place_events;
50 namespace be = uav_basic_events;
72 :
public msmf::state_machine_def<PickPlaceStateMachineFrontEnd>,
81 template <
class Event,
class FSM>
void on_entry(Event
const &evt, FSM &fsm) {
82 VLOG(1) <<
"entering: PickPlace system";
83 int dummy_source_state = 0, dummy_target_state = 0;
92 template <
class Event,
class FSM>
void on_exit(Event
const &evt, FSM &fsm) {
93 VLOG(1) <<
"leaving: PickPlace system";
94 int dummy_source_state = 0, dummy_target_state = 0;
115 : boost::mpl::vector<
118 msmf::Row<psa::Landed, be::Takeoff, psa::ArmPreTakeoffFolding,
119 psa::ArmPowerOnFold, msmf::none>,
121 msmf::Row<psa::Landed, ManualControlEvent,
122 psa::ManualControlArmState, msmf::none, msmf::none>,
124 msmf::Row<psa::ArmPreTakeoffFolding, Completed, psa::TakingOff,
125 psa::TakeoffAction, psa::TakeoffGuard>,
127 msmf::Row<psa::ArmPreTakeoffFolding, be::Abort, psa::Landed,
128 psa::ArmPowerOff, msmf::none>,
130 msmf::Row<psa::TakingOff, Completed, psa::Hovering,
131 psa::ArmRightFold, msmf::none>,
133 msmf::Row<psa::Hovering, PositionYaw, psa::ReachingGoal,
134 psa::ReachingGoalSet, psa::ReachingGoalGuard>,
136 msmf::Row<psa::Hovering, pe::Pick, psa::PrePickState,
137 psa::PrePickTransitionAction, psa::PickTransitionGuard>,
139 msmf::Row<psa::PrePickState, Completed, psa::PickState,
140 psa::PickTransitionAction, msmf::none>,
142 msmf::Row<psa::Hovering, vse::GoHome, psa::ReachingGoal,
143 psa::GoHomeTransitionAction, psa::GoHomeTransitionGuard>,
145 msmf::Row<psa::Hovering, be::Land, psa::ArmPreLandingFolding,
146 psa::ArmFold, msmf::none>,
148 msmf::Row<psa::ArmPreLandingFolding, Completed, psa::Landing,
149 psa::LandingAction, msmf::none>,
151 msmf::Row<psa::ArmPreLandingFolding, be::Abort, psa::Landing,
152 psa::LandingAction, msmf::none>,
154 msmf::Row<psa::Hovering, ManualControlEvent,
155 psa::ManualControlArmState, msmf::none, msmf::none>,
157 msmf::Row<psa::ReachingGoal, be::Abort, psa::Hovering,
158 psa::AbortUAVControllerArmRightFold, msmf::none>,
160 msmf::Row<psa::ReachingGoal, be::Land, psa::ArmPreLandingFolding,
161 psa::ArmFold, msmf::none>,
163 msmf::Row<psa::PrePickState, be::Abort, psa::Hovering,
164 psa::AbortUAVArmController, msmf::none>,
166 msmf::Row<psa::PrePickState, be::Land, psa::ArmPreLandingFolding,
167 psa::AbortUAVControllerArmFold, msmf::none>,
169 msmf::Row<psa::PickState, be::Abort, psa::Hovering,
170 psa::AbortUAVArmController, msmf::none>,
172 msmf::Row<psa::PickState, be::Land, psa::ArmPreLandingFolding,
173 psa::AbortUAVControllerArmFold, msmf::none>,
175 msmf::Row<psa::Landing, Completed, psa::Landed, psa::ArmPowerOff,
178 msmf::Row<psa::ReachingGoal, Completed, psa::Hovering,
179 psa::AbortUAVControllerArmRightFold, msmf::none>,
181 msmf::Row<psa::PickState, Completed, psa::Hovering,
182 psa::AbortUAVArmController, psa::PickGuard>,
184 msmf::Row<psa::ManualControlArmState, be::Takeoff, psa::Hovering,
185 psa::ManualControlSwitchAction,
186 psa::ManualControlSwitchGuard>,
188 msmf::Row<psa::ManualControlArmState, be::Land, psa::Landed,
189 psa::ManualControlSwitchAction,
190 psa::ManualControlSwitchGuard>> {};
200 static constexpr std::array<const char *, 10> state_names = {
201 "Landed",
"ArmPreTakeoffFolding",
"Takingoff",
"Hovering",
202 "PrePickState",
"ArmPreLandingFolding",
"ReachingGoal",
"PickState",
203 "Landing",
"ManualControlArmState"};
212 return state_names.at(p.current_state()[0]);
UAV vision system with an arm.
Definition: uav_arm_system.h:12
PickPlaceStateMachineFrontEnd(UAVArmSystem &uav_system)
Constructor with arguments to store robot system.
Definition: pick_place_state_machine.h:104
Thread safe state machine class that extends boost::msm::back::state_machine class.
Definition: thread_safe_state_machine.h:28
ArmPoweroffTransitionActionFunctor_< LogicStateMachineT > ArmPowerOff
Action to poweroff arm.
Definition: pick_place_states_actions.h:70
front-end: define the FSM structure
Definition: pick_place_state_machine.h:71
void on_exit(Event const &evt, FSM &fsm)
Action to take on leaving state machine.
Definition: pick_place_state_machine.h:92
void on_entry(Event const &evt, FSM &fsm)
Action to take on entering state machine.
Definition: pick_place_state_machine.h:81
const char * pstate(PickPlaceStateMachine const &p)
Get current state name.
Definition: pick_place_state_machine.h:211
Class to provide typedefs for all basic uav states and actions.
Definition: pick_place_states_actions.h:17
State that checks arm status along with regular manual control state.
Definition: pick_place_states_actions.h:137
Transition table for State Machine.
Definition: pick_place_state_machine.h:114
Base state machine.
Definition: base_state_machine.h:18
ArmPoweronTransitionActionFunctor_< LogicStateMachineT > ArmPowerOn
Action to poweroff arm.
Definition: pick_place_states_actions.h:66