PID I value tuning issues

Hey y’all,

So we’ve been tuning an auto-alignment feature for aligning with the goal (using vision). We’re successfully filtering the image, and calculating the image and distance. In tele-op, we’re using the built-in LabVIEW PID loop (see attached image). When we are tuning the PID constants, though, the I constant seems to have no effect. Our robot gets close to the needed angle, but even an extremely large (10^4) value for I seems to not change the robot’s motion at all. Advice? We’re relatively new to using PID control.

Set-up:
NavX
6WD Tank





What PID gains are you using?

Also, it is important to note that the way LabView sets up their PID is different than you might expect. Changing the Kp gain actually effects Ki and Kd gains. This is because LabVIEW uses Kp, Ti, and Td, which is because of the different control setup they use.

Also, I believe that Ti is inversely proportional to Ki, so try decreasing it? I might be wrong, but I am pretty sure that is how it works.

We got to a Kp = 0.025 which would make the robot oscillate around the target. Didn’t tune the other values. I’ll try what you suggested.

If you got the robot to oscillate you might consider increasing Kd. The derivative term is supposed to control damping.

Is Kd straightforward in LabVIEW, or does it depend on Kp and such as well?

Unfortunately, Kd is also dependent the proportional gain. LabVIEW uses Kp, Ti, and Td.

However, this does not mean you need to throw PID rules of thumb out the window. Generally, I find an oscillating Kp like you did, add Td until I achieve a step response that fully dampens after 1-2 small overshoots (or less depending on the application), and then add in Ti if necessary to reduce steady-state error.

Hope this helps :slight_smile:

I believe that Labview has Integral windup prevention. When the I gets above a certain value it sets it back to zero.
So if you set it super high it will think it is winding up and set it to zero all the time.
Integral would typically be rather small values. I don’t have enough experience to tell you what range to expect. In my previous applications it would be from .0001 to .25