Northeastern University · Electrical & Computer Engineering · Boston/Seattle
Classical Control Systems
Build a self-balancing robot. Apply control theory. Compete.
Introduces the analysis and design of classical control systems — from transfer functions and stability theory to real hardware implementation. Every concept taught in lecture is tested on a physical robot you build yourself.
Course Overview
Examines control system objectives, modeling and mathematical description, transfer function and state-variable representations, feedback control characteristics, system responses, and stability. Also addresses compensator design based on root-locus and frequency response, and modern control using state-variable feedback.
The centerpiece of the course is a team-based project to design, build, and tune a two-wheeled self-balancing robot from scratch. Students wire DC motors, an IMU, and wheel encoders to a microcontroller running a 100 Hz real-time control loop — then apply every control method taught in lecture to keep the robot upright and race it five meters.
Python is used throughout the course for control analysis: the python-control library derives transfer functions, plots root loci and Bode diagrams, and simulates closed-loop responses. Jupyter notebooks let you compare theoretical predictions against live hardware measurements in one shareable document.
The semester ends with a live, department-wide race. Teams line their tuned robots at the starting line and the robot that travels five meters the fastest — while staying balanced — wins. Awards are given for Fastest Race Time, Best Disturbance Recovery, Best Technical Report, and Fan Favorite.
Course Topics
Semester Roadmap
Wk 1–4
Foundations
Laplace · state-space · PID · PincherX 100 labs
Wk 5–8
Frequency Domain
Root locus · Bode · compensators · PincherX 100 labs
Wk 9–11
Robot Build
Assembly · IMU · encoders · firmware
Wk 12–13
Controller Tuning
PID + LQR on balancing robot
Wk 14–16
Race!
5-meter robot race · showcase
What You Will Do
Hardware Platform
Chassis
Two-wheeled inverted-pendulum frame — 3D-printed. Students assemble the full mechanical structure from a provided STL file. Total parts cost per team is approximately $60–75; all components are provided by the course.
Actuation
Brushed DC gearmotors with quadrature encoders. L298N H-bridge motor driver controlled via PWM signals from the microcontroller.
Sensing
MPU-6050 IMU (3-axis gyroscope + accelerometer) for tilt angle estimation. Quadrature wheel encoders for velocity and position feedback.
Power
LiPo or NiMH battery pack with regulated 5 V and motor supply rails. Students design the power distribution circuit and manage safe battery operation.
Microcontroller
Arduino Nano running a 100 Hz main control loop. Serial port streams sensor data to a laptop for logging and analysis with Python.
State Estimation
Complementary filter or discrete Kalman filter fuses gyroscope and accelerometer data into a reliable tilt angle estimate at full loop rate.
Simulation
System model derived analytically, then built in Python (python-control / scipy) inside a Jupyter notebook and verified by simulation before any code is deployed to hardware.
Data Analysis
Step-response plots, Bode diagrams, and root-locus overlays logged from the real robot and compared against theoretical predictions using Python (matplotlib, python-control) in a shared Jupyter notebook.
Control Theory Curriculum
Mathematical Modeling
Derive equations of motion for the inverted pendulum. Linearize around the upright equilibrium. Extract the transfer function and state-space model for all subsequent analysis.
Stability Analysis
Apply Routh-Hurwitz criterion to assess closed-loop stability. Compute gain and phase margins from Bode plots. Interpret Nyquist diagrams for robustness assessment.
Root-Locus Design
Sketch root loci by hand using construction rules, then verify with the Python control.root_locus() function. Select pole locations to meet transient response specifications such as settling time and overshoot.
Frequency-Domain Design
Use Bode plots to design lead and lag compensators. Specify gain crossover frequency, phase margin, and bandwidth. Verify closed-loop performance before hardware deployment.
PID Control
Derive PD, PI, and full PID controllers. Understand the physical role of each gain. Apply Ziegler-Nichols and manual methods to tune a PID controller on the physical robot.
Modern State-Space Methods
Design state-variable feedback via pole placement. Apply LQR optimal control by specifying a cost function. Introduction to Luenberger observer design for unmeasured states.
End-of-Semester Competition
The semester ends with a live, department-wide race. Teams line up their tuned robots at the starting line. The robot that travels five meters the fastest — while staying balanced — wins. No software changes are permitted after the submission deadline.
Teams are judged on speed over the 5-meter course, continuous balance throughout the run, and the quality of their final design report. An optional disturbance-recovery bonus is available for teams that want to test their controller robustness.
Why Take This Course
PID tuning, frequency-domain analysis, and Python-based control design (python-control, scipy, matplotlib) are used daily by control engineers at aerospace, automotive, and robotics companies. This course teaches them in the context of a real physical system.
No passive lectures — every concept from stability margins to state feedback is verified on a physical robot. You see, hear, and feel the control theory working in real time.
EECE 5580 is a prerequisite gateway to Digital Control Systems and advanced robotics courses. The tools — Laplace, state-space, stability criteria — appear in nearly every controls and robotics graduate course.
Work in teams on a semester-long engineering project. Practice technical writing, oral presentation, and collaborative hardware and software development — skills valued in every engineering role.
Course Materials & Repository
Lessons, labs, homework, and project specifications — all in one place. Every page includes theory, Python code, step-by-step procedures, and expected output. Updated throughout the semester.
Open Wiki ↗All course code lives here: Jupyter notebooks, Arduino sketches, Python analysis scripts, and the balancing robot firmware. Clone the repo on Day 1 and keep it up to date as new files are pushed.
Open Repository ↗The entire course runs on open-source Python. No license required. Install once with pip install control scipy matplotlib jupyter and you have everything needed for every lesson and lab.
The first two labs use a PincherX 100 servo arm as an accessible hardware platform for step-response measurement and PID tuning — before the balancing robot build begins. Setup guide covers ROS2 and Dynamixel Wizard.
Hardware Setup ↗Course Information
| Course Number | EECE 5580 |
| Title | Classical Control Systems |
| Credits | 4 credit hours |
| Level | Graduate & Senior Undergraduate |
| Campus | Northeastern University · Seattle · Boston (potential) |
| Prerequisites | EECE 3464 or EECE 2520 with minimum grade D− · or Graduate Admission |
| Tools | Python 3.10+ · python-control · scipy · numpy · matplotlib · Jupyter Lab · Arduino IDE 2.x · ROS2 Humble · Dynamixel Wizard 2.0 |