Package edu.wpi.first.math.controller
Class ProfiledPIDController
java.lang.Object
edu.wpi.first.math.controller.ProfiledPIDController
- All Implemented Interfaces:
Sendable
public class ProfiledPIDController extends Object implements Sendable
Implements a PID control loop whose setpoint is constrained by a trapezoid profile. Users should
call reset() when they first start running the controller to avoid unwanted behavior.
-
Constructor Summary
Constructors Constructor Description ProfiledPIDController(double Kp, double Ki, double Kd, TrapezoidProfile.Constraints constraints)
Allocates a ProfiledPIDController with the given constants for Kp, Ki, and Kd.ProfiledPIDController(double Kp, double Ki, double Kd, TrapezoidProfile.Constraints constraints, double period)
Allocates a ProfiledPIDController with the given constants for Kp, Ki, and Kd. -
Method Summary
Modifier and Type Method Description boolean
atGoal()
Returns true if the error is within the tolerance of the error.boolean
atSetpoint()
Returns true if the error is within the tolerance of the error.double
calculate(double measurement)
Returns the next output of the PID controller.double
calculate(double measurement, double goal)
Returns the next output of the PIDController.double
calculate(double measurement, TrapezoidProfile.State goal)
Returns the next output of the PID controller.double
calculate(double measurement, TrapezoidProfile.State goal, TrapezoidProfile.Constraints constraints)
Returns the next output of the PID controller.void
disableContinuousInput()
Disables continuous input.void
enableContinuousInput(double minimumInput, double maximumInput)
Enables continuous input.TrapezoidProfile.Constraints
getConstraints()
Get the velocity and acceleration constraints for this controller.double
getD()
Gets the differential coefficient.TrapezoidProfile.State
getGoal()
Gets the goal for the ProfiledPIDController.double
getI()
Gets the integral coefficient.double
getIZone()
Get the IZone range.double
getP()
Gets the proportional coefficient.double
getPeriod()
Gets the period of this controller.double
getPositionError()
Returns the difference between the setpoint and the measurement.double
getPositionTolerance()
Returns the position tolerance of this controller.TrapezoidProfile.State
getSetpoint()
Returns the current setpoint of the ProfiledPIDController.double
getVelocityError()
Returns the change in error per second.double
getVelocityTolerance()
Returns the velocity tolerance of this controller.void
initSendable(SendableBuilder builder)
Initializes thisSendable
object.void
reset(double measuredPosition)
Reset the previous error and the integral term.void
reset(double measuredPosition, double measuredVelocity)
Reset the previous error and the integral term.void
reset(TrapezoidProfile.State measurement)
Reset the previous error and the integral term.void
setConstraints(TrapezoidProfile.Constraints constraints)
Set velocity and acceleration constraints for goal.void
setD(double Kd)
Sets the differential coefficient of the PID controller gain.void
setGoal(double goal)
Sets the goal for the ProfiledPIDController.void
setGoal(TrapezoidProfile.State goal)
Sets the goal for the ProfiledPIDController.void
setI(double Ki)
Sets the integral coefficient of the PID controller gain.void
setIntegratorRange(double minimumIntegral, double maximumIntegral)
Sets the minimum and maximum values for the integrator.void
setIZone(double iZone)
Sets the IZone range.void
setP(double Kp)
Sets the proportional coefficient of the PID controller gain.void
setPID(double Kp, double Ki, double Kd)
Sets the PID Controller gain parameters.void
setTolerance(double positionTolerance)
Sets the error which is considered tolerable for use with atSetpoint().void
setTolerance(double positionTolerance, double velocityTolerance)
Sets the error which is considered tolerable for use with atSetpoint().
-
Constructor Details
-
ProfiledPIDController
public ProfiledPIDController(double Kp, double Ki, double Kd, TrapezoidProfile.Constraints constraints)Allocates a ProfiledPIDController with the given constants for Kp, Ki, and Kd.- Parameters:
Kp
- The proportional coefficient.Ki
- The integral coefficient.Kd
- The derivative coefficient.constraints
- Velocity and acceleration constraints for goal.- Throws:
IllegalArgumentException
- if kp < 0IllegalArgumentException
- if ki < 0IllegalArgumentException
- if kd < 0
-
ProfiledPIDController
public ProfiledPIDController(double Kp, double Ki, double Kd, TrapezoidProfile.Constraints constraints, double period)Allocates a ProfiledPIDController with the given constants for Kp, Ki, and Kd.- Parameters:
Kp
- The proportional coefficient.Ki
- The integral coefficient.Kd
- The derivative coefficient.constraints
- Velocity and acceleration constraints for goal.period
- The period between controller updates in seconds. The default is 0.02 seconds.- Throws:
IllegalArgumentException
- if kp < 0IllegalArgumentException
- if ki < 0IllegalArgumentException
- if kd < 0IllegalArgumentException
- if period <= 0
-
-
Method Details
-
setPID
Sets the PID Controller gain parameters.Sets the proportional, integral, and differential coefficients.
- Parameters:
Kp
- The proportional coefficient. Must be >= 0.Ki
- The integral coefficient. Must be >= 0.Kd
- The differential coefficient. Must be >= 0.
-
setP
Sets the proportional coefficient of the PID controller gain.- Parameters:
Kp
- The proportional coefficient. Must be >= 0.
-
setI
Sets the integral coefficient of the PID controller gain.- Parameters:
Ki
- The integral coefficient. Must be >= 0.
-
setD
Sets the differential coefficient of the PID controller gain.- Parameters:
Kd
- The differential coefficient. Must be >= 0.
-
setIZone
Sets the IZone range. When the absolute value of the position error is greater than IZone, the total accumulated error will reset to zero, disabling integral gain until the absolute value of the position error is less than IZone. This is used to prevent integral windup. Must be non-negative. Passing a value of zero will effectively disable integral gain. Passing a value ofDouble.POSITIVE_INFINITY
disables IZone functionality.- Parameters:
iZone
- Maximum magnitude of error to allow integral control.- Throws:
IllegalArgumentException
- if iZone <= 0
-
getP
Gets the proportional coefficient.- Returns:
- proportional coefficient
-
getI
Gets the integral coefficient.- Returns:
- integral coefficient
-
getD
Gets the differential coefficient.- Returns:
- differential coefficient
-
getIZone
Get the IZone range.- Returns:
- Maximum magnitude of error to allow integral control.
-
getPeriod
Gets the period of this controller.- Returns:
- The period of the controller.
-
getPositionTolerance
Returns the position tolerance of this controller.- Returns:
- the position tolerance of the controller.
-
getVelocityTolerance
Returns the velocity tolerance of this controller.- Returns:
- the velocity tolerance of the controller.
-
setGoal
Sets the goal for the ProfiledPIDController.- Parameters:
goal
- The desired goal state.
-
setGoal
Sets the goal for the ProfiledPIDController.- Parameters:
goal
- The desired goal position.
-
getGoal
Gets the goal for the ProfiledPIDController.- Returns:
- The goal.
-
atGoal
Returns true if the error is within the tolerance of the error.This will return false until at least one input value has been computed.
- Returns:
- True if the error is within the tolerance of the error.
-
setConstraints
Set velocity and acceleration constraints for goal.- Parameters:
constraints
- Velocity and acceleration constraints for goal.
-
getConstraints
Get the velocity and acceleration constraints for this controller.- Returns:
- Velocity and acceleration constraints.
-
getSetpoint
Returns the current setpoint of the ProfiledPIDController.- Returns:
- The current setpoint.
-
atSetpoint
Returns true if the error is within the tolerance of the error.This will return false until at least one input value has been computed.
- Returns:
- True if the error is within the tolerance of the error.
-
enableContinuousInput
Enables continuous input.Rather then using the max and min input range as constraints, it considers them to be the same point and automatically calculates the shortest route to the setpoint.
- Parameters:
minimumInput
- The minimum value expected from the input.maximumInput
- The maximum value expected from the input.
-
disableContinuousInput
Disables continuous input. -
setIntegratorRange
Sets the minimum and maximum values for the integrator.When the cap is reached, the integrator value is added to the controller output rather than the integrator value times the integral gain.
- Parameters:
minimumIntegral
- The minimum value of the integrator.maximumIntegral
- The maximum value of the integrator.
-
setTolerance
Sets the error which is considered tolerable for use with atSetpoint().- Parameters:
positionTolerance
- Position error which is tolerable.
-
setTolerance
Sets the error which is considered tolerable for use with atSetpoint().- Parameters:
positionTolerance
- Position error which is tolerable.velocityTolerance
- Velocity error which is tolerable.
-
getPositionError
Returns the difference between the setpoint and the measurement.- Returns:
- The error.
-
getVelocityError
Returns the change in error per second.- Returns:
- The change in error per second.
-
calculate
Returns the next output of the PID controller.- Parameters:
measurement
- The current measurement of the process variable.- Returns:
- The controller's next output.
-
calculate
Returns the next output of the PID controller.- Parameters:
measurement
- The current measurement of the process variable.goal
- The new goal of the controller.- Returns:
- The controller's next output.
-
calculate
Returns the next output of the PIDController.- Parameters:
measurement
- The current measurement of the process variable.goal
- The new goal of the controller.- Returns:
- The controller's next output.
-
calculate
public double calculate(double measurement, TrapezoidProfile.State goal, TrapezoidProfile.Constraints constraints)Returns the next output of the PID controller.- Parameters:
measurement
- The current measurement of the process variable.goal
- The new goal of the controller.constraints
- Velocity and acceleration constraints for goal.- Returns:
- The controller's next output.
-
reset
Reset the previous error and the integral term.- Parameters:
measurement
- The current measured State of the system.
-
reset
Reset the previous error and the integral term.- Parameters:
measuredPosition
- The current measured position of the system.measuredVelocity
- The current measured velocity of the system.
-
reset
Reset the previous error and the integral term.- Parameters:
measuredPosition
- The current measured position of the system. The velocity is assumed to be zero.
-
initSendable
Description copied from interface:Sendable
Initializes thisSendable
object.- Specified by:
initSendable
in interfaceSendable
- Parameters:
builder
- sendable builder
-