# PIDF (2020) questions

We are starting to work with PIDs on our robot, and though we are using Neos for the shooter (so we will use the built-in PID), ultimately, we want to use Odometry for the drivetrain. So, I began with simple PIDF and KInematics to try to understand how these pieces fit together and ran into two questions about the 2020 implementation of the PID algorithm. One is specific to robotpy, the other is not.

1. How do we implement the feedforward variable? I tried to import `edu.wpi.first.wpilibj.controller.SimpleMotorFeedforward;` (which is what the Java docs use) in python by doingâ€¦
``````\$py
>>>from wpilib.controller import SimpleMotorFeedforward
``````

â€¦but got a library not found error. I think I am using the most recent version of pyfrc because the Ramsete Controller imports fine. The new PID controller no longer supports kF on construction. Is there something else we should use?

1. How do we â€śclampâ€ť the outputs? We could use a simple if / then statement, or map, but I am wondering if there is a built-in function I am missing.

~Mr. R^2

If you do `dir(wpilib.controller)` youâ€™ll see a `SimpleMotorFeedforwardMeters` and a `SimpleMotorFeedforwardFeet`.

1 Like

I was missing the Feet or Meters. Also, that command is really helpful. Thanks.

SimpleMotorFeedforward seems bizarre to have separate classes for distance units, given that said units cancel out in the calculationsâ€¦ (not to mention that people usually donâ€™t measure the distance flywheels spin in metres)

1 Like

For clamping thereâ€™s a clamp method on WPIlibâ€™s MathUtil, not sure about PY buts itâ€™s in java.

We donâ€™t have a clamp function in our libraries, but you can very easily write one:

``````def clamp(value: float, bottom: float, top: float) -> float:
return max(bottom, min(value, top))``````
1 Like

Thank you. That is a good idea. I guess that would function differently than map which keeps the relationship. I find it odd that Wpi took those pieces out. Especially the latter for people who have little experience with PID. A robot can run rampant easily with a poorly tuned system. It does not take much.
Edit: not that I am above that mistake mind you. It seems we learn it every year in one form or another. At least now we know to begin with the wheels off the ground

Thanks for the clarification, never used the Python libraries. Sorry for any confusion OP!

1 Like

Itâ€™s largely because RobotPy is based on the C++ libraries now, so we only expose what C++ has unless someone goes out of their way to write it in Python.

1 Like

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