Setting PIDF Coefficients in RUN_TO_POSITION Mode Causes Runtime Error

We are trying to set the PID coefficients for an arm controlled by a motor. We wanted to set a feed forward term to counteract gravity and make the system more stable, but when we set the coefficients using the code below, we get a not implemented exception. Why is this implemented for velocity control, but not position control? Is there any way to do this without programming the whole thing ourselves by hand?

I do believe that setPIFDCoefficients() is implemented for Blocks however from the documentation…

    'Not all DcMotors support this feature.'

What type of motor are you using?

I think you need to update the firmware on your Control Hub and/or Expansion Hub to version 1.8.2.

I believe that RUN_TO_POSITION may not implement PIDF control as the F term would not really work for position control. Perhaps you meant to tune the velocity controller and should make sure to change the runMode to RUN_USING_ENCODER to update the velocity controller coefficients. The FTC SDK has some documentation for setting the coefficients. To learn about the cascading control architecture and tuning equations (for a lighter load,) there is this document.

This doesn’t answer your original question about the error, but assuming you get that fixed… you may also need to know this…

If you want to run in RUN_TO_POSITION mode and adjust the controller gains, then you really need to define TWO sets of coefficients:

  1. set the PIDF coefficients for RUN_USING_ENCODERS mode to control the motor velocity
    and
  2. set the P coefficient for RUN_TO_POSITION mode to control the motor position.

The two controllers work together when running in RUN_TO_POSITION mode.
Just the P term is used to control the position loop. It calculates the desired velocity. Then the PIDF coeffs are used to obtain the desired velocity. Feed Forward is only relevant with the Velocity control component.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.