MVSim
Lightweight simulator for 2.5D vehicles and robots
PID_Controller.h
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2026 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 #pragma once
10 
11 namespace mvsim
12 {
21 {
22  PID_Controller() = default;
23 
24  double KP = 1.0, KI = 0, KD = 0;
25 
29  double N = 0;
30 
31  double max_out = 0;
32 
33  bool enable_antiwindup = false;
34 
38 
40  double reference_filter_tau = 0.1;
41 
44 
51  double compute(double err, double dt, double feedforward = 0);
52 
58  double filterReference(double setpoint, double dt);
59 
62  void reset();
63 
64  private:
65  double lastOutput_ = 0;
66  double i_state_ = 0;
67  double d_state_ = 0;
68  double e_prev_ = 0;
69  double refFilter_y1_ = 0;
70  double refFilter_y2_ = 0;
71  bool firstCall_ = true;
72 };
73 } // namespace mvsim
Definition: PID_Controller.h:21
int reference_filter_order
Definition: PID_Controller.h:43
double reference_filter_tau
Definition: PID_Controller.h:40
bool enable_reference_filter
Definition: PID_Controller.h:37
double max_out
For clamping (0=no clamp)
Definition: PID_Controller.h:31
double filterReference(double setpoint, double dt)
double compute(double err, double dt, double feedforward=0)
double N
Definition: PID_Controller.h:29