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):