ASCO Aerial Autonomy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
hovering_functors.h
Go to the documentation of this file.
1 #pragma once
7 #include <aerial_autonomy/uav_basic_events.h>
8 #include <glog/logging.h>
9 #include <parsernode/common.h>
10 
11 namespace be = uav_basic_events;
12 
20 template <class LogicStateMachineT, class AbortEventT = ManualControlEvent>
22  : InternalActionFunctor<UAVSystem, LogicStateMachineT> {
29  bool run(UAVSystem &robot_system, LogicStateMachineT &logic_state_machine) {
30  parsernode::common::quaddata data = robot_system.getUAVData();
31  // If hardware is not allowing us to control UAV
32  if (!data.rc_sdk_control_switch) {
33  VLOG(1) << "Switching to Manual UAV state";
34  logic_state_machine.process_event(AbortEventT());
35  return false;
36  } else if (data.batterypercent <
37  robot_system.getConfiguration().minimum_battery_percent()) {
38  LOG(WARNING) << "Battery too low! " << data.batterypercent
39  << "\% Landing!";
40  logic_state_machine.process_event(be::Land());
41  return false;
42  }
43  return true;
44  }
45 };
46 
55 template <class LogicStateMachineT, class ControllerConnector,
56  bool check_completed = true>
58  : InternalActionFunctor<UAVSystem, LogicStateMachineT> {
66  bool run(UAVSystem &robot_system, LogicStateMachineT &logic_state_machine) {
67  // Check status of controller
68  ControllerStatus status = robot_system.getStatus<ControllerConnector>();
69  if (status == ControllerStatus::Completed && check_completed) {
70  VLOG(1) << "Reached goal for " << typeid(ControllerConnector).name();
71  logic_state_machine.process_event(Completed());
72  return false;
73  } else if (status == ControllerStatus::Critical) {
74  LOG(WARNING) << "Controller critical for "
75  << typeid(ControllerConnector).name();
76  logic_state_machine.process_event(be::Abort());
77  return false;
78  }
79  return true;
80  }
81 };
82 
89 template <class LogicStateMachineT>
97 template <class LogicStateMachineT>
98 using Hovering_ = BaseState<UAVSystem, LogicStateMachineT,
Logic to abort if controller status is critical.
Definition: hovering_functors.h:57
bool run(UAVSystem &robot_system, LogicStateMachineT &logic_state_machine)
check if controller status is critical and abort; similarly if controller status is completed raise c...
Definition: hovering_functors.h:66
Base state for all states in logic state machine.
Definition: base_state.h:24
Completed Event for transition from for example Landing to Landed etc.
Definition: completed_event.h:6
Internal action that returns whether it processed an event.
Definition: base_functors.h:208
Status of the controller.
Definition: controller_status.h:10
Owns, initializes, and facilitates communication between different hardware/software components...
Definition: uav_system.h:21
parsernode::common::quaddata getUAVData() const
Get sensor data from UAV.
Definition: uav_system.h:109
ControllerStatus getStatus() const
Get the status of a controller.
Definition: base_robot_system.h:95
bool run(UAVSystem &robot_system, LogicStateMachineT &logic_state_machine)
Checks for enough battery voltage and land if battery critical.
Definition: hovering_functors.h:29
Internal action when hovering.
Definition: hovering_functors.h:21
UAVSystemConfig getConfiguration()
Get system configuration.
Definition: uav_system.h:192
Controller completed.
Definition: controller_status.h:17
Controller is critical and unable to continue.
Definition: controller_status.h:18