20 #include <boost/msm/front/state_machine_def.hpp>
23 #include <boost/msm/front/functor_row.hpp>
32 #include <glog/logging.h>
41 #include <aerial_autonomy/visual_servoing_events.h>
45 namespace msmf = boost::msm::front;
46 namespace vse = visual_servoing_events;
47 namespace be = uav_basic_events;
69 :
public msmf::state_machine_def<VisualServoingStateMachineFrontEnd>,
78 template <
class Event,
class FSM>
void on_entry(Event
const &, FSM &) {
79 VLOG(1) <<
"entering: VisualServoing system";
87 template <
class Event,
class FSM>
void on_exit(Event
const &, FSM &) {
88 VLOG(1) <<
"leaving: VisualServoing system";
108 : boost::mpl::vector<
111 msmf::Row<vsa::Landed, be::Takeoff, vsa::TakingOff,
112 vsa::TakeoffAction, vsa::TakeoffGuard>,
114 msmf::Row<vsa::Landed, ManualControlEvent, vsa::ManualControlState,
115 msmf::none, msmf::none>,
117 msmf::Row<vsa::TakingOff, Completed, vsa::Hovering, msmf::none,
120 msmf::Row<vsa::Hovering, PositionYaw, vsa::ReachingGoal,
121 vsa::ReachingGoalSet, vsa::ReachingGoalGuard>,
123 msmf::Row<vsa::Hovering, vse::TrackROI, vsa::VisualServoing,
124 vsa::VisualServoingTransitionAction,
125 vsa::VisualServoingTransitionGuard>,
127 msmf::Row<vsa::Hovering, vse::GoHome, vsa::ReachingGoal,
128 vsa::GoHomeTransitionAction, vsa::GoHomeTransitionGuard>,
130 msmf::Row<vsa::Hovering, be::Land, vsa::Landing, vsa::LandingAction,
133 msmf::Row<vsa::Hovering, ManualControlEvent,
134 vsa::ManualControlState, msmf::none, msmf::none>,
136 msmf::Row<vsa::ReachingGoal, be::Abort, vsa::Hovering,
137 vsa::UAVControllerAbort, msmf::none>,
139 msmf::Row<vsa::ReachingGoal, be::Land, vsa::Landing,
140 vsa::ReachingGoalLand, msmf::none>,
142 msmf::Row<vsa::VisualServoing, be::Abort, vsa::Hovering,
143 vsa::UAVControllerAbort, msmf::none>,
145 msmf::Row<vsa::VisualServoing, be::Land, vsa::Landing,
146 vsa::ReachingGoalLand, msmf::none>,
148 msmf::Row<vsa::Landing, Completed, vsa::Landed, msmf::none,
151 msmf::Row<vsa::ReachingGoal, Completed, vsa::Hovering,
152 vsa::UAVControllerAbort, msmf::none>,
154 msmf::Row<vsa::VisualServoing, Completed, vsa::Hovering,
155 vsa::UAVControllerAbort, msmf::none>,
157 msmf::Row<vsa::ManualControlState, be::Takeoff, vsa::Hovering,
158 vsa::ManualControlSwitchAction,
159 vsa::ManualControlSwitchGuard>,
161 msmf::Row<vsa::ManualControlState, be::Land, vsa::Landed,
162 vsa::ManualControlSwitchAction,
163 vsa::ManualControlSwitchGuard>> {};
173 static constexpr std::array<const char *, 7> state_names = {
174 "Landed",
"TakingOff",
"Hovering",
"ReachingGoal",
175 "VisualServoing",
"Landing",
"ManualControlState"};
184 return state_names.at(p.current_state()[0]);
ManualControlState_< LogicStateMachineT > ManualControlState
Manual control state.
Definition: uav_states_actions.h:39
front-end: define the FSM structure
Definition: visual_servoing_state_machine.h:68
Base state for all states in logic state machine.
Definition: base_state.h:24
const char * pstate(VisualServoingStateMachine const &p)
Get current state name.
Definition: visual_servoing_state_machine.h:183
Thread safe state machine class that extends boost::msm::back::state_machine class.
Definition: thread_safe_state_machine.h:28
void on_exit(Event const &, FSM &)
Action to take on leaving state machine.
Definition: visual_servoing_state_machine.h:87
Transition table for State Machine.
Definition: visual_servoing_state_machine.h:107
void on_entry(Event const &, FSM &)
Action to take on entering state machine.
Definition: visual_servoing_state_machine.h:78
Class to provide typedefs for all basic uav states and actions.
Definition: visual_servoing_states_actions.h:12
UAV system with a camera and visual sevoing capabilities.
Definition: uav_vision_system.h:14
Base state machine.
Definition: base_state_machine.h:18
VisualServoingStateMachineFrontEnd(UAVVisionSystem &uav_system)
Constructor with arguments to store robot system.
Definition: visual_servoing_state_machine.h:97