Tuning Velocity PID Controller for Robot Drive Base with Talon SRX

I have read the Talon SRX guide on setting the feed forward parameter and there is no confusion for me there. I also understand how the proportional/integral/derivative gains are set after the feed forward gain is set.

I am mainly confused about the application of this knowledge to the robot’s drive base. If I wanted to control individually how fast each side of the robot was going (differential steering model) in tank drive or most importantly during autonomous, then would I have to tune the velocity controller with one side of the robot not moving and the other side moving? (the side I want to control) The concern is the clear difference in friction between when the robot is driving completely straight and when only one side of the robot is moving (motor has to do more work due to friction caused other side). If I tune the controller for the latter scenario, will it still work for the former scenario? How will this difference in friction be accounted for?


Ideally, a perfect closed loop system shouldn’t care - the extra friction is just an external disturbance it compensates for.

In practice, we start tuning our left/right controllers together. First in a straight line, then while curving. Ideally they use about the same gains, in practice we usually end up tweaking one side a bit more than the other.

The feed forward term will do the heavy lifting of getting the robot to move. The proportional term will do the heavy lifting to overcome any variation from the desired value.

Remember that the portional term simply applies a value based on how far away from the nominal value your system is. That’s why it takes the form:

Kp*(desired velocity - actual velocity)

It calcuates the error of your system and applies that to the output.