Dataford
Interview QuestionsInterview GuidesExperiencesMock InterviewsPricing
Get started

Implement a PID Controller

MediumPython00:00
Practice interviewer
In session
5 left
00:00

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.

You need to log in / sign up to run or submit.

Problem

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.

Formal Specification

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:

  1. Compute error = setpoint - measurement.
  2. Use zero derivative on the first call. Otherwise compute (error - previous_error) / dt.
  3. Update the integral using integral + error * dt.
  4. Apply anti-windup: if the unclamped output exceeds a limit and the current error would push it farther beyond that limit, retain the previous integral.
  5. Store the current error for the next call.

Constraints

  • 0 < dt <= 10
  • -10^6 <= setpoint, measurement <= 10^6
  • 0 <= kp, ki, kd <= 10^4
  • output_min < output_max
  • Inputs are finite numbers
  • state contains integral, previous_error, and initialized

Function Signature

def pid_step(setpoint, measurement, dt, state, kp, ki, kd, output_min, output_max):
Your solutionPython 3
You need to log in / sign up to run or submit.
Run your code to see test output