Identify exactly what's wrong with your robot's movement — and know exactly which constant to change. Symptom → diagnosis → fix.
The robot creeps toward the target with very little force. It might time out before reaching it, or crawl in at less than walking speed.
The robot reaches the target but continues past it by several inches before stopping (or coming back).
The robot reaches the approximate target but keeps rocking back and forth, over-correcting, unable to settle.
The robot reliably stops just short of the target — always the same distance short. It's not oscillating, just slightly under.
pid_exit_condition_set() so the robot doesn't exit too early.
When commanded to drive straight, the robot arcs to the left or right instead of going in a straight line.
pid_heading_constants_set() kP. Default is around 11.0 — try 13–15 if drifting. The heading PID runs in the background during drives to keep the robot pointed correctly.
Robot spins past the target angle by 10–30° or more. Sometimes comes back, sometimes just keeps going.
The robot creeps to the target angle or gets very close but then takes 2–3 seconds of tiny adjustments to finally settle.
pid_turn_exit_condition_set() might be too strict, causing it to wait unnecessarily.
Tuned on your practice field but doesn't hit the same angles at the competition venue.
default_constants() function in autons.cpp. The tuner does NOT save automatically — you must copy the numbers into code manually.You can add your own subsystem PIDs (arm, lift, etc.) to the tuner so you can tune them the same way:
Always tune with a repeatable test — don't use your actual autonomous. Write a dedicated tuning routine:
(0.0, 0.0, 0.0). Run test — robot does nothing (expected).(0.0, 0.0, 0.0).Swing turns pivot using only one side of the drive. EZ Template supports these with pid_swing_set(). They need their own constants: