Class PhoenixPIDController
- All Implemented Interfaces:
TelemetryLoggable, ComplexTunable
PIDController class.
This class differs from the WPI implementation by using explicit timestamps for
integral/derivative calculations. Ideally, these timestamps come from the StatusSignal.
-
Constructor Summary
ConstructorsConstructorDescriptionPhoenixPIDController(double kp, double ki, double kd) Allocates a PIDController with the given constants for kp, ki, and kd. -
Method Summary
Modifier and TypeMethodDescriptionbooleanReturns true if the error is within the tolerance of the setpoint.doublecalculate(double measurement, double timestamp) Returns the next output of the PID controller.doublecalculate(double measurement, double setpoint, double timestamp) Returns the next output of the PID controller.voidDisables continuous input.voidenableContinuousInput(double minimumInput, double maximumInput) Enables continuous input.doubleReturns the accumulated error used in the integral calculation of this controller.doublegetD()Get the Differential coefficient.doublegetError()Returns the difference between the setpoint and the measurement.doubleReturns the error derivative.doubleReturns the error derivative tolerance of this controller.doubleReturns the error tolerance of this controller.doublegetI()Get the Integral coefficient.doublegetIZone()Get the IZone range.doubleReturns the last applied output from this PID controller.doublegetP()Get the Proportional coefficient.doubleReturns the current setpoint of the PIDController.Gets the telemetry table type.Gets the tunable table type.booleanReturns true if continuous input is enabled.voidlogTo(TelemetryTable table) Logs the object to aTelemetryTable.voidpublishTunable(TunableTable table) Publishes the tunable to the given table.voidreset()Resets the previous error and the integral term.voidsetD(double kd) Sets the Differential coefficient of the PID controller gain.voidsetI(double ki) Sets the Integral coefficient of the PID controller gain.voidsetIntegratorRange(double minimumIntegral, double maximumIntegral) Sets the minimum and maximum contributions of the integral term.voidsetIZone(double iZone) Sets the IZone range.voidsetP(double kp) Sets the Proportional coefficient of the PID controller gain.voidsetPID(double kp, double ki, double kd) Sets the PID Controller gain parameters.voidsetSetpoint(double setpoint) Sets the setpoint for the PIDController.voidsetTolerance(double errorTolerance) Sets the error which is considered tolerable for use with atSetpoint().voidsetTolerance(double errorTolerance, double errorDerivativeTolerance) Sets the error which is considered tolerable for use with atSetpoint().Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ComplexTunable
publishChildTunable, publishChildTunable, removeChildTunable, setChildTunableChanged, updateTunable
-
Constructor Details
-
PhoenixPIDController
public PhoenixPIDController(double kp, double ki, double kd) Allocates a PIDController with the given constants for kp, ki, and kd.- Parameters:
kp- The proportional coefficient.ki- The integral coefficient.kd- The derivative coefficient.
-
-
Method Details
-
setPID
public void setPID(double kp, double ki, double kd) Sets the PID Controller gain parameters.Set the proportional, integral, and differential coefficients.
- Parameters:
kp- The proportional coefficient.ki- The integral coefficient.kd- The derivative coefficient.
-
setP
public void setP(double kp) Sets the Proportional coefficient of the PID controller gain.This setter is intended for online tuning.
- Parameters:
kp- The proportional coefficient.
-
setI
public void setI(double ki) Sets the Integral coefficient of the PID controller gain.This setter is intended for online tuning.
- Parameters:
ki- The integral coefficient.
-
setD
public void setD(double kd) Sets the Differential coefficient of the PID controller gain.This setter is intended for online tuning.
- Parameters:
kd- The differential coefficient.
-
setIZone
public void setIZone(double iZone) 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_INFINITYdisables IZone functionality.- Parameters:
iZone- Maximum magnitude of error to allow integral control.- Throws:
IllegalArgumentException- if iZone < 0
-
getP
public double getP()Get the Proportional coefficient.- Returns:
- proportional coefficient
-
getI
public double getI()Get the Integral coefficient.- Returns:
- integral coefficient
-
getD
public double getD()Get the Differential coefficient.- Returns:
- differential coefficient
-
getIZone
public double getIZone()Get the IZone range.- Returns:
- Maximum magnitude of error to allow integral control.
-
getErrorTolerance
public double getErrorTolerance()Returns the error tolerance of this controller. Defaults to 0.05.- Returns:
- the error tolerance of the controller.
-
getErrorDerivativeTolerance
public double getErrorDerivativeTolerance()Returns the error derivative tolerance of this controller. Defaults to ∞.- Returns:
- the error derivative tolerance of the controller.
-
getAccumulatedError
public double getAccumulatedError()Returns the accumulated error used in the integral calculation of this controller.- Returns:
- The accumulated error of this controller.
-
setSetpoint
public void setSetpoint(double setpoint) Sets the setpoint for the PIDController.- Parameters:
setpoint- The desired setpoint.
-
getSetpoint
public double getSetpoint()Returns the current setpoint of the PIDController.- Returns:
- The current setpoint.
-
atSetpoint
public boolean atSetpoint()Returns true if the error is within the tolerance of the setpoint. The error tolerance defaults to 0.05, and the error derivative tolerance defaults to ∞.This will return false until at least one input value has been computed.
- Returns:
- Whether the error is within the acceptable bounds.
-
enableContinuousInput
public void enableContinuousInput(double minimumInput, double maximumInput) Enables continuous input.Rather than 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
public void disableContinuousInput()Disables continuous input. -
isContinuousInputEnabled
public boolean isContinuousInputEnabled()Returns true if continuous input is enabled.- Returns:
- True if continuous input is enabled.
-
setIntegratorRange
public void setIntegratorRange(double minimumIntegral, double maximumIntegral) Sets the minimum and maximum contributions of the integral term.The internal integrator is clamped so that the integral term's contribution to the output stays between minimumIntegral and maximumIntegral. This prevents integral windup.
- Parameters:
minimumIntegral- The minimum contribution of the integral term.maximumIntegral- The maximum contribution of the integral term.
-
setTolerance
public void setTolerance(double errorTolerance) Sets the error which is considered tolerable for use with atSetpoint().- Parameters:
errorTolerance- Error which is tolerable.
-
setTolerance
public void setTolerance(double errorTolerance, double errorDerivativeTolerance) Sets the error which is considered tolerable for use with atSetpoint().- Parameters:
errorTolerance- Error which is tolerable.errorDerivativeTolerance- Error derivative which is tolerable.
-
getError
public double getError()Returns the difference between the setpoint and the measurement.- Returns:
- The error.
-
getErrorDerivative
public double getErrorDerivative()Returns the error derivative.- Returns:
- The error derivative.
-
calculate
public double calculate(double measurement, double setpoint, double timestamp) Returns the next output of the PID controller.- Parameters:
measurement- The current measurement of the process variable.setpoint- The new setpoint of the controller.timestamp- The current timestamp to use for calculating integral/derivative error.- Returns:
- The next controller output.
-
calculate
public double calculate(double measurement, double timestamp) Returns the next output of the PID controller.- Parameters:
measurement- The current measurement of the process variable.timestamp- The current timestamp to use for calculating integral/derivative error.- Returns:
- The next controller output.
-
getLastAppliedOutput
public double getLastAppliedOutput()Returns the last applied output from this PID controller. -
reset
public void reset()Resets the previous error and the integral term. -
logTo
Logs the object to aTelemetryTable.- Specified by:
logToin interfaceTelemetryLoggable- Parameters:
table- telemetry table
-
getTelemetryType
Gets the telemetry table type.- Specified by:
getTelemetryTypein interfaceTelemetryLoggable- Returns:
- Table type
-
publishTunable
Publishes the tunable to the given table.- Specified by:
publishTunablein interfaceComplexTunable- Parameters:
table- table
-
getTunableType
Gets the tunable table type.- Specified by:
getTunableTypein interfaceComplexTunable- Returns:
- Table type
-