wpilib-controller

A backport of the upcoming (in 2020) WPILib PIDController.


Keywords
frc, wpilib, robotpy, pid-controller
License
BSD-3-Clause
Install
pip install wpilib-controller==0.7.1

Documentation

wpilib-controller

A backport of the upcoming (in 2020) WPILib PIDController.

This is a backport of wpilibsuite/allwpilib#1300, which is planned to be merged for the 2020 season, for RobotPy.

@calcmogul has some in-progress docs on this.

Note that if you are moving from the old WPILib PIDController, your PID constants will need to change, as it did not consider the discretization period:

  • divide your Ki gain by 0.05, and
  • multiply your Kd gain by 0.05,
  • where 0.05 is the original default period (use the period you used otherwise).

Installation

For a computer with an internet connection:

pip install wpilib-controller

To install onto an offline roboRIO:

pip download wpilib-controller -d pip_cache  # with an internet connection
robotpy-installer install-pip wpilib-controller  # connected to your robot

Example

from wpilib_controller import PIDController

controller = PIDController(1, 0, 0)
# setInputRange and setContinuous are now a single method
controller.enableContinuousInput(0, 360)

controller.setSetpoint(180)

# elsewhere...

# assume gyro is a gyro object created prior
output = controller.calculate(gyro.getAngle())
# do something with the output, for example:
motor.set(output)

Major differences

  • The PID gains are no longer time dependent.
  • This PIDController expects a measurement as a parameter to calculate().
  • This PIDController runs synchronously in your robot code (as opposed to having it run in a thread). You must call calculate() and use its return value.