6#include "math/controls/pidff.h"
7#include "math/geometry/rotation2d.h"
8#include "math/math_util.h"
9#include "math/trajectories/trapezoid_profile.h"
31 PID::pid_config_t pid;
32 Feedforward::feedforward_config_t ff;
43 pidff_(config.pid.kP, config.pid.kI, config.pid.kD,
44 config.ff.kS, config.ff.kV, config.ff.kA, config.ff.kG,
45 config.pid.tolerance, config.pid.dt),
46 current_position_(0.0),
47 target_position_(0.0),
48 profile_complete_(true),
49 profile_start_time_(0.0),
52 pidff_.set_i_zone(config.pid.i_zone);
53 pidff_.set_i_limits(config.pid.i_min, config.pid.i_max);
54 pidff_.set_output_limits(config.pid.minimum_output, config.pid.maximum_output);
56 if (config.pid.continuous) {
57 pidff_.enable_continuous(config.pid.minimum_input, config.pid.maximum_input);
71 profile_start_time_ = current_time;
72 profile_complete_ =
false;
78 config_.profile.v_max,
79 config_.profile.accel,
94 current_time_ = current_time;
96 if (profile_complete_) {
101 double profile_time = current_time - profile_start_time_;
103 motion_t target_state = profile_->calculate(profile_time);
106 if (profile_time >= profile_->total_time()) {
107 profile_complete_ =
true;
111 return pidff_.calculate_with_ff(
126 return profile_complete_;
135 return profile_complete_ && pidff_.at_setpoint();
144 return target_position_;
153 return current_position_;
171 config_.profile = config;
175 motion_controller_config_t config_;
177 std::unique_ptr<TrapezoidProfile> profile_;
179 double current_position_;
180 double target_position_;
181 bool profile_complete_;
182 double profile_start_time_;
183 double current_time_;
Definition rotation2d.h:25
Definition core/utils/controls/trapezoid_profile.h:25
PIDFF & get_pidff()
Definition math/controls/motion_controller.h:161
MotionController(motion_controller_config_t config)
Definition math/controls/motion_controller.h:41
double target_position() const
Definition math/controls/motion_controller.h:143
double calculate(double current_position, double current_time, Rotation2d angle=Rotation2d())
Definition math/controls/motion_controller.h:92
void set_target(double target_position, double current_position, double current_time)
Definition math/controls/motion_controller.h:68
void set_profile_config(trapezoid_profile_config_t config)
Definition math/controls/motion_controller.h:170
bool is_profile_complete() const
Definition math/controls/motion_controller.h:125
double current_position() const
Definition math/controls/motion_controller.h:152
bool at_target() const
Definition math/controls/motion_controller.h:134
Definition math/controls/pidff.h:26
Definition math/controls/motion_controller.h:30
Definition math/trajectories/trapezoid_profile.h:15