PID Controller
PID Controller implementation that uses PidROS implementation from control_toolbox package. The controller can be used directly by sending references through a topic or in a chain having preceding or following controllers. It also enables to use the first derivative of the reference and its feedback to have second-order PID control.
Depending on the reference/state and command interface of the hardware a different parameter setup of PidROS should be used as for example:
reference/state POSITION; command VELOCITY –> PI CONTROLLER
reference/state VELOCITY; command ACCELERATION –> PI CONTROLLER
reference/state VELOCITY; command POSITION –> PD CONTROLLER
reference/state ACCELERATION; command VELOCITY –> PD CONTROLLER
reference/state POSITION; command POSITION –> PID CONTROLLER
reference/state VELOCITY; command VELOCITY –> PID CONTROLLER
reference/state ACCELERATION; command ACCELERATION –> PID CONTROLLER
reference/state EFFORT; command EFFORT –> PID CONTROLLER
Note
Theoretically one can misuse Joint Trajectory Controller (JTC) for the same purpose by sending only one reference point into it.
Nevertheless, this is not recommended. JTC should be used if you need to interpolate between trajectory points using linear, cubic or quintic interpolation. PID Controller doesn’t do that.
PID term of JTC has different purpose - it enables commanding only velocity
or effort
interfaces to hardware.
Execution logic of the controller
The controller can be also used in “feed-forward” mode where feed-forward gain is used to increase controllers dynamics.
If one type of the reference and state interfaces is used, only immediate error is used. If there are two, then the second interface type is considered to be the first derivative of the first type.
For example a valid combination would be position
and velocity
interface types.
Using the controller
Pluginlib-Library: pid_controller Plugin name: pid_controller/PidController
Description of controller’s interfaces
References (from a preceding controller)
<reference_and_state_dof_names[i]>/<reference_and_state_interfaces[j]> [double] NOTE:
reference_and_state_dof_names[i]
can be fromreference_and_state_dof_names
parameter, or if it is empty thendof_names
.
Commands
<dof_names[i]>/<command_interface> [double]
States
<reference_and_state_dof_names[i]>/<reference_and_state_interfaces[j]> [double] NOTE:
reference_and_state_dof_names[i]
can be fromreference_and_state_dof_names
parameter, or if it is empty thendof_names
.
Subscribers
If controller is not in chained mode (in_chained_mode == false
):
<controller_name>/reference [control_msgs/msg/MultiDOFCommand]
If controller parameter use_external_measured_states
is true:
<controller_name>/measured_state [control_msgs/msg/MultiDOFCommand]
Services
<controller_name>/set_feedforward_control [std_srvs/srv/SetBool]
Publishers
<controller_name>/controller_state [control_msgs/msg/MultiDOFStateStamped]
Parameters
The PID controller uses the generate_parameter_library to handle its parameters.
List of parameters
An example parameter file
An example parameter file for this controller can be found in the test folder (standalone):
or as preceding controller: