77namespace voss ::controller {
88
99class PIDController : public AbstractController {
10+ public:
11+ enum class ThruBehavior { // affects calculation of lin_speed on thru movements
12+ MIN_VEL, // use linear PID, but enforce a minimum velocity
13+ FULL_SPEED // no PID, go full speed
14+ };
15+ enum class CosineScaling {
16+ MIN_ERR, // only do cosine scaling within the minimum err
17+ ALL_THE_TIME // do cosine scaling all the time
18+ };
19+ enum class MinErrBehavior {
20+ NO_ANG_PID, // no angular PID, set ang_speed to 0
21+ SCALE_ANG_PID, // scale output of angular pid so it reaches 0 at half of min_err
22+ MAINTAIN_HEADING // maintain heading of when it entered min_err
23+ };
1024 protected:
1125 std::shared_ptr<PIDController> p;
1226
1327 utils::PID linear_pid, angular_pid;
1428 double min_error;
1529 bool can_reverse;
30+ double min_err_heading;
1631
1732 double min_vel;
1833 bool turn_overshoot;
1934
35+ ThruBehavior thru_behavior = ThruBehavior::FULL_SPEED;
36+ CosineScaling cosine_scaling = CosineScaling::MIN_ERR;
37+ MinErrBehavior min_err_behavior = MinErrBehavior::MAINTAIN_HEADING;
38+ bool enable_overturn = false ;
39+
2040 public:
2141 PIDController (std::shared_ptr<localizer::AbstractLocalizer> l);
2242
@@ -36,6 +56,11 @@ class PIDController : public AbstractController {
3656 modify_angular_constants (double kP , double kI , double kD );
3757 std::shared_ptr<PIDController> modify_min_error (double min_error);
3858
59+ void set_thru_behavior (ThruBehavior thru_behavior);
60+ void set_cosine_scaling (CosineScaling cosine_scaling);
61+ void set_min_err_behavior (MinErrBehavior min_err_behavior);
62+ void set_overturn (bool overturn);
63+
3964 friend class PIDControllerBuilder ;
4065 friend class BoomerangControllerBuilder ;
4166};
0 commit comments