#include <sr_plain_pid.hpp>
A basic pid class.
This class implements a generic structure that can be used to create a wide range of pid controllers. It can function independently or be subclassed to provide more specific controls based on a particular control loop.
In particular, this class implements the standard pid equation:

where:
given:
. | p | Proportional gain |
| d | Derivative gain |
| i | Integral gain |
| i_clamp | Min/max bounds for the integral windup, the clamp is applied to the ![]() |
| publish_state | Enable publishing internal controller state on the state topic. May break real-time guarantees due to clock_gettime system call. |
To use the Pid class, you should first call some version of init() (in non-realtime) and then call updatePid() at every update step. For example:
control_toolbox::Pid pid;
pid.initPid(6.0, 1.0, 2.0, 0.3, -0.3);
double position_desi_ = 0.5;
...
ros::Time last_time = ros::Time::now();
while (true) {
ros::Time time = ros::Time::now();
double effort = pid.updatePid(currentPosition() - position_desi_, time - last_time);
last_time = time;
}