Dataford
Interview QuestionsInterview GuidesExperiencesCoaching
New
Pricing
Get started
Dataford
Popular roles
Software EngineerData AnalystData ScientistData EngineerBusiness AnalystAI EngineerMachine Learning EngineerProduct Manager
Browse
Browse All RolesEvery role hub, from analyst to MLBrowse All CompaniesCompany-specific interview loopsAll Interview GuidesThe full guide library
Top questions by role
Software EngineerData AnalystData ScientistData EngineerBusiness AnalystAI EngineerMachine Learning EngineerProduct Manager
Top questions by skill
SQLPythonStatisticsMachine LearningA/B TestingSystem DesignGenerative AIProduct SenseMetricsBehavioral
Browse all questions →Try a mock interview
Experiences
Practice
Mock InterviewsTimed interview simulations with feedbackCoaching1:1 coaching with people at your target companiesSuccess PathYour 6-week structured planModulesCurated lessons by topicWebinarsTalks from ex-Big Tech data leadsPlaygroundA free-form scratch editor
Learn
BlogInterview strategy and career adviceTech Job Market ReportHiring trends across data and AI rolesFor UniversitiesDataford for career centersAbout DatafordWho we are and how we build
Pricing
Build my plan
Implement a PID Controller
00:00
5 left

Implement a PID Controller

MediumPython

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

Your question is Implement a PID Controller. Start with the requirements in the Question tab.

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.
CodePython 3
Sign up free to run your codeLog inLn 2
Run your code to see test output here.