AICurious Logo
Published on
Monday, February 1, 2021

[MOOC] Apollo Lesson 7: Control

958 words5 min read

This is my note for lesson 7 of MOOC course: Self-Driving Fundamentals - Featuring Apollo. Content: Understand how to use steering, throttle and brake to execute our planned trajectory and master different types of controllers in Apollo. The control module goal is to use variable control inputs to minimize the deviation from target trajectory and maximize passenger comfort.


  • Planning trajectory
  • Car status
  • Localization

Output: Control commands (steering, throttle, brake) to the chassis.

This section review 3 control strategies:

  • Proportional Integral Derivative Control (PID)
  • Linear Quadratic Regulator (LQR)
  • Model Predictive Control (MPC)

Proportional–Integral–Derivative (PID) Controller

A proportional–integral–derivative controller (PID controller or three-term controller) is a control loop mechanism employing feedback that is widely used in industrial control systems and a variety of other applications requiring continuously modulated control. A PID controller continuously calculates an error value e(t){\displaystyle e(t)} as the difference between a desired setpoint (SP) and a measured process variable (PV) and applies a correction based on proportional, integral, and derivative terms (denoted P, I, and D respectively), hence the name.



  • It's simple but works pretty well in many situations


  • Only a linear algorithm → Not good for really complex problems. For example in self-driving car, we need to apply different PID controller for steering and acceleration → It's hard to combine a latitudinal and longitudinal control.
  • Depend on realtime error measurement → will probably fail with measurement delays.

In Apollo: PID is used in the longitudinal controller.

Linear–Quadratic Regulator (LQR) Controller

LQR is a model-based controller that uses the state of the vehicle to minimize error. LQR is used for lateral control in Apollo.

Lateral control state has 4 components:

  • The lateral error
  • The rate of change of the lateral error
  • The heading error
  • The rate of change of the heading

The rate of change is derivative. Here is the mathematical expression of above components:

x=[ctect˙eθθ˙]x=\left[\begin{array}{c} c t e \\ c \dot{t} e \\ \theta \\ \dot{\theta} \end{array}\right]

3 control inputs to vehicle:

  • Steering
  • Acceleration
  • Brake

We denote control inputs as uu:

u=[ steering  throttle  brake ]u=\left[\begin{array}{c} \text { steering } \\ \text { throttle } \\ \text { brake } \end{array}\right]

LQR handles linear control. Equation:

x˙=Ax+Bu\dot{x}=A x+B u


[ct˙ect¨eθ˙θ¨]=A[ctect˙eθθ˙]+B[ steering  throttle  brake ]\left[\begin{array}{c} c \dot{t} e \\ c \ddot{t} e \\ \dot{\theta} \\ \ddot{\theta} \end{array}\right]=A\left[\begin{array}{c} c t e \\ c \dot{t} e \\ \theta \\ \dot{\theta} \end{array}\right]+B\left[\begin{array}{c} \text { steering } \\ \text { throttle } \\ \text { brake } \end{array}\right]

The equation is linear because:

x˙+Δx˙=A(x+Δx)+B(u+Δu)\dot{x}+\Delta \dot{x}=A(x+\Delta x)+B(u+\Delta u)

Quadratic cost function:

cost=0(xTQx+uTRu)dt\operatorname{cost}=\int_{0}^{\infty}\left(x^{T} Q x+u^{T} R u\right) d t

Model Predictive Controller (MPC)

MPC uses a model of the system to make predictions about the system's future behavior. MPC solves an online optimization algorithm to find the optimal control action that drives the predicted output to the reference.

MPC Loop:

    1. Build a model of vehicle.
    1. Use a optimization engine to calculate a sequence of control inputs over a time horizon.
    1. Implement the first set of control inputs.
    1. Return to step 2.

Vehicle model approximates the physics of our car. It can use vehicle state and control inputs to predict the car's trajectory. MPC defines a cost function and minimize it to optimize the trajectory.

Vehicle model. Image from course video

Pros and Cons


  • It takes vehicle model into consideration → More accurate than PID.
  • It works with different cost functions → Optimize differents costs in different situations.


  • Complex → Slower at runtime and Harder to implement.