ME 2801 — Introduction to Feedback Control
  • Home
  • Syllabus
  • Schedule
  • Assignments
  • Autopilot

On this page

  • Speed Channel
    • Base - Speed
    • Feedforward - Speed
    • Tuned - Speed
  • Yaw-rate (Steering) Channel
    • Base - Yaw-rate
    • Base - Yaw-rate (integrator windup demonstration)
    • Feedforward - Yaw-rate
    • Tuned - Yaw-rate
  • Summary

Lab 2 — Example Results

Week 7 · Spring 2026

← Back to Lab 2 overview

Example step-response figures from the three experiments (Base, FeedForward, Tuned) for the speed and yaw-rate channels. Each case has two figures:

  • Timeseries — setpoint, measured response, and actuator command across the full step window.
  • PID internals — Tar / Act with metrics text box (top), and the per-term breakdown (P, I, D, FF) plus the actuator command (bottom).

A separate integrator-windup demonstration on the Base/yaw run shows what happens when the controller is allowed to hold the step long enough for the I term to wind up.

Speed Channel

Base - Speed

ArduRover stock PID gains, FF off, rate limiters off, throttle baseline off. The reference against which FeedForward and Tuned are compared.

Base / speed — timeseries (setpoint, measured GPS speed, throttle command)

Base / speed — PID internals (Tar/Act with metrics; P/I/D/FF terms with actuator command)

Feedforward - Speed

FeedForward / speed — timeseries

FeedForward / speed — PID internals

Tuned - Speed

Tuned / speed — timeseries

Tuned / speed — PID internals

Yaw-rate (Steering) Channel

Base - Yaw-rate

Known setup issue in this dataset: the baseline parameter file shipped with ACRO_TURN_RATE = 360 deg/s (≈ 6.28 rad/s), well above what the boat can physically achieve. Full-stick yaw commands therefore mapped to an unrealistically large setpoint, and the measured yaw rate plateaus far below the commanded value — visible as a large steady-state error in the figures and the metrics table. The procedure now has students reduce ACRO_TURN_RATE to a value the boat can actually track.

Base / yaw — timeseries (setpoint, measured EKF yaw rate, rudder command)

Base / yaw — PID internals (Tar/Act with metrics; P/I/D/FF terms with rudder command)

Base - Yaw-rate (integrator windup demonstration)

The same Base/yaw configuration as above, but the step input is held long enough for the integrator to wind up. The delayed recovery on the step-back illustrates classic I-term windup.

Base / yaw / windup — timeseries with extended step hold

Base / yaw / windup — PID internals; note the I term grows for the duration of the step and dominates the recovery transient

Feedforward - Yaw-rate

FeedForward / yaw — timeseries

FeedForward / yaw — PID internals

Tuned - Yaw-rate

Tuned / yaw — timeseries

Tuned / yaw — PID internals

Summary

Tuned PID gains and step-response metrics across the three experiments for both channels. Generated by closedloop_assess_main.m; the table content is included from metrics_summary.md, regenerated each time the analysis script runs.

label P I D FF RiseTime (s) SettlingTime (s) Overshoot (%) SS Error
base_speed 0.2 0.2 0 0 2.030 20.293 11.50 0.0000
ff_speed 0.2 0.2 0 0.2 2.791 10.079 0.53 -0.0200
tuned_speed 0.4 0.1 0 0.2 5.521 10.139 0.44 0.1600
base_yaw 0.2 0.2 0 0 2.608 NaN 19.88 1.3014
ff_yaw 0.4 0.1 0 1.2 1.121 NaN 27.43 -1.4310
tuned_yaw 0.4 0.1 0 1.2 1.181 NaN 30.04 -1.3611

© Brian Bingham · Source on GitHub

 

Built with Quarto