Your question is Implement a PID Controller. Start with the requirements on the right.
Run and submit as often as you like. When you're ready, talk me through your approach or go straight to the code.
Implement one discrete PID control step for a Symbotic robotic shuttle axis. The controller must compute a bounded actuator command while preserving controller state between calls.
Implement pid_step(setpoint, measurement, dt, state, kp, ki, kd, output_min, output_max). Inputs are numeric values except state, which is a dictionary containing integral, previous_error, and initialized. dt is the elapsed time in seconds and is strictly positive. Return a two-element tuple: (output, updated_state), where output is clamped to the inclusive output range and updated_state has the same three fields.
Use these rules:
error = setpoint - measurement.(error - previous_error) / dt.integral + error * dt.def pid_step(setpoint, measurement, dt, state, kp, ki, kd, output_min, output_max):