ASCO Aerial Autonomy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
builtin_controller.h
Go to the documentation of this file.
1 #pragma once
5 #include "position_controller_config.pb.h"
6 #include "velocity_controller_config.pb.h"
7 
11 template <class GoalType>
12 class BuiltInController : public Controller<GoalType, GoalType, GoalType> {
13 public:
17  virtual ~BuiltInController() {}
18 
19 protected:
27  virtual bool runImplementation(GoalType, GoalType goal, GoalType &control) {
28  control = goal;
29  return true;
30  }
31 };
32 
36 class BuiltInPositionController : public BuiltInController<PositionYaw> {
37 public:
43  BuiltInPositionController(PositionControllerConfig config)
44  : config_(config) {}
45 
50  : BuiltInPositionController(PositionControllerConfig()) {}
51 
52 protected:
62  virtual ControllerStatus
63  isConvergedImplementation(PositionYaw current_position_yaw,
64  PositionYaw goal) {
65  PositionYaw position_yaw_diff = current_position_yaw - goal;
67  status << "PositionYawDiff: " << position_yaw_diff.x << position_yaw_diff.y
68  << position_yaw_diff.z << position_yaw_diff.yaw;
69  const config::Position &tolerance_pos = config_.goal_position_tolerance();
70  const double &tolerance_yaw = config_.goal_yaw_tolerance();
71  // Compare
72  if (std::abs(position_yaw_diff.x) < tolerance_pos.x() &&
73  std::abs(position_yaw_diff.y) < tolerance_pos.y() &&
74  std::abs(position_yaw_diff.z) < tolerance_pos.z() &&
75  std::abs(position_yaw_diff.yaw) < tolerance_yaw) {
76  VLOG_EVERY_N(1, 50) << "Reached goal";
77  status.setStatus(ControllerStatus::Completed, "Reached goal");
78  }
79  return status;
80  }
81 
82 private:
86  PositionControllerConfig config_;
87 };
88 
92 class BuiltInVelocityController : public BuiltInController<VelocityYaw> {
93 public:
99  BuiltInVelocityController(VelocityControllerConfig config)
100  : config_(config) {}
101 
106  : BuiltInVelocityController(VelocityControllerConfig()) {}
107 
108 protected:
118  virtual ControllerStatus
120  VelocityYaw goal) {
121  VelocityYaw velocity_yaw_diff = current_velocity_yaw - goal;
122  // Add optional description:
124  status << "Error Velocity, Yaw: " << velocity_yaw_diff.x
125  << velocity_yaw_diff.y << velocity_yaw_diff.z
126  << velocity_yaw_diff.yaw;
127  const config::Velocity &tolerance_vel = config_.goal_velocity_tolerance();
128  const double &tolerance_yaw = config_.goal_yaw_tolerance();
129  // Compare
130  if (std::abs(velocity_yaw_diff.x) < tolerance_vel.vx() &&
131  std::abs(velocity_yaw_diff.y) < tolerance_vel.vy() &&
132  std::abs(velocity_yaw_diff.z) < tolerance_vel.vz() &&
133  std::abs(velocity_yaw_diff.yaw) < tolerance_yaw) {
134  VLOG_EVERY_N(1, 50) << "Reached goal";
135  status.setStatus(ControllerStatus::Completed, "Reached Goal");
136  }
137  return status;
138  }
139 
140 private:
144  VelocityControllerConfig config_;
145 };
double yaw
Orientation around global z axis.
Definition: velocity_yaw.h:33
Builtin velocity controller.
Definition: builtin_controller.h:92
Base Controller class.
Definition: base_controller.h:18
double y
y component in m
Definition: position.h:23
double z
z component in m/s
Definition: velocity.h:21
double x
x component in m
Definition: position.h:22
Stores Position, yaw. PositionYaw is used as the goal for UAV systems.
Definition: position_yaw.h:10
Status of the controller.
Definition: controller_status.h:10
double x
x component in m/s
Definition: velocity.h:19
Store velocity and yaw Used as goal for builtin velocity and yaw controller for UAV system...
Definition: velocity_yaw.h:10
A controller that simply outputs the set goal.
Definition: builtin_controller.h:12
BuiltInVelocityController(VelocityControllerConfig config)
Constructor to store velocity controller configuration.
Definition: builtin_controller.h:99
double y
y component in m/s
Definition: velocity.h:20
BuiltInVelocityController()
Constructor with default configuration.
Definition: builtin_controller.h:105
BuiltInPositionController(PositionControllerConfig config)
Constructor that store position controller configuration.
Definition: builtin_controller.h:43
virtual ControllerStatus isConvergedImplementation(VelocityYaw current_velocity_yaw, VelocityYaw goal)
Check if current velocity yaw is close to Goal velocity yaw Uses velocity controller config...
Definition: builtin_controller.h:119
virtual ControllerStatus isConvergedImplementation(PositionYaw current_position_yaw, PositionYaw goal)
Check if current position yaw is close to Goal position yaw Uses position controller config...
Definition: builtin_controller.h:63
double yaw
Orientation about body axis rad.
Definition: position_yaw.h:51
double z
z component in m
Definition: position.h:24
void setStatus(ControllerStatus::Status status, std::string status_description="")
Set the internal status of controller status.
Definition: controller_status.h:106
Controller active.
Definition: controller_status.h:16
Controller completed.
Definition: controller_status.h:17
virtual bool runImplementation(GoalType, GoalType goal, GoalType &control)
Run the control loop. Simply returns the goal.
Definition: builtin_controller.h:27
Builtin position controller.
Definition: builtin_controller.h:36
BuiltInPositionController()
Constructor that uses default constructor.
Definition: builtin_controller.h:49
virtual ~BuiltInController()
Destructor.
Definition: builtin_controller.h:17