RIT VEXU Core API
Loading...
Searching...
No Matches
pid.h
1#pragma once
2
3#include "../core/include/utils/controls/feedback_base.h"
4#include "vex.h"
5#include <cmath>
6
7using namespace vex;
8
23class PID : public Feedback {
24public:
30 LINEAR,
31 ANGULAR // assumes degrees
32 };
43 struct pid_config_t {
44 double p;
45 double i;
46 double d;
47 double deadband;
52 };
53
59
72 void init(double start_pt, double set_pt) override;
73
81 double update(double sensor_val) override;
82
92 double update(double sensor_val, double v_setpt);
93
98 double get_sensor_val() const;
99
105 double get() override;
106
115 void set_limits(double lower, double upper) override;
116
121 bool is_on_target() override;
122
126 void reset();
127
133 double get_error();
134
139 double get_target() const;
140
145 void set_target(double target);
146
149
150private:
151 double last_error = 0;
152 double accum_error = 0;
153
154 double last_time = 0;
155 double on_target_last_time = 0;
156
157 double lower_limit = 0;
158 double upper_limit = 0;
159
160 double target = 0;
162 double target_vel = 0;
164 double sensor_val = 0;
166 double out = 0;
169
170 bool is_checking_on_target = false;
171
172 timer pid_timer;
175};
Definition feedback_base.h:10
Definition pid.h:23
ERROR_TYPE
Definition pid.h:29
void set_target(double target)
Definition pid.cpp:109
PID(pid_config_t &config)
Definition pid.cpp:7
double update(double sensor_val) override
Definition pid.cpp:23
pid_config_t & config
Definition pid.h:147
double get() override
Definition pid.cpp:92
void set_limits(double lower, double upper) override
Definition pid.cpp:115
double get_sensor_val() const
gets the sensor value that we were last updated with
Definition pid.cpp:73
bool is_on_target() override
Definition pid.cpp:124
void init(double start_pt, double set_pt) override
Definition pid.cpp:9
double get_error()
Definition pid.cpp:97
double get_target() const
Definition pid.cpp:104
void reset()
Definition pid.cpp:78
Definition pid.h:43
double on_target_time
Definition pid.h:48
double d
derivitave coeffecient d * derivative(error)
Definition pid.h:46
double p
proportional coeffecient p * error()
Definition pid.h:44
double i
integral coeffecient i * integral(error)
Definition pid.h:45
double deadband
at what threshold are we close enough to be finished
Definition pid.h:47
ERROR_TYPE error_method
Definition pid.h:50