# Cruise control implementation

I am doing a project that requires that I implement a cruise control system on an RC car using a GPS for feedback.

I have implemented PID controllers before, but this is a little bit new to me because instead of generating a correction delta like -8 or +6, the controller has to output a value from 0 to 100, 100 being as fast as the car can go, and 0 being a dead stop.

At first, I attempted to use a solution where I kept a running tally off the current throttle and I simply added the mv from the PID controller to it. This became a big issue because the "currentThrottle" variable essentially became a second integrator and would frequently windup when the car didn't respond fast enough.

One limitation of this project is that I cannot modify the algorithm used for generating the PID correction delta, but I can do whatever I want with the setpoint and mv before/after the PID correction is generated like so:

(int)cruiseControl.CalculateCorrection(8, rmc.Speed);


Where 8 is the setpoint (8kts) and rmc.Speed is the current speed. This will return the correction delta calculated from the PidConfig variables (Kp, Ki, Kd, integrator windup control, etc) when I constructed the PidController object.

Any ideas?

• Couldn't you limit currentThrottle and/or use a negative Kd to reduce overshoot? – AndreKR Feb 12 '11 at 0:07
• It's a cruise control for a cruise missile. A car with such control will crush on first traffic light. – Gregory Kornblum Apr 15 '16 at 16:47