Skip to content

WIP: Resolve "Implement a PID Controller"

Closes #144 (closed)

Current status: a simple PID controller that publishes a control output (on topic control_output) at a regular period (sampletime).

Run with: $ ros2 run pid_controller pid_controller_node_exe

  • add subscribers for setpoint and plantstate
  • add an example plant node to drive the controller
  • Sample Time – The PID algorithm functions best if it is evaluated at a regular interval. If the algorithm is aware of this interval, we can also simplify some of the internal math.
  • Derivative Kick – Not the biggest deal, but easy to get rid of, so we’re going to do just that.
  • On-The-Fly Tuning Changes – A good PID algorithm is one where tuning parameters can be changed without jolting the internal workings.
  • Reset Windup Mitigation –We’ll go into what Reset Windup is, and implement a solution with side benefits
  • On/Off (Auto/Manual) – In most applications, there is a desire to sometimes turn off the PID controller and adjust the output by hand, without the controller interfering
  • Initialization – When the controller first turns on, we want a “bumpless transfer.” That is, we don’t want the output to suddenly jerk to some new value
  • Controller Direction – This last one isn’t a change in the name of robustness per se. it’s designed to ensure that the user enters tuning parameters with the correct sign.
  • Proportional on Measurement – Adding this feature makes it easier to control certain types of processes
  • improve the design and usage documentation
Edited by Joshua Whitley

Merge request reports