Quadrotors: Control
& Estimation

Learn modelling, simulation, estimation and control of autonomous quadrotor systems through hands-on experiments.

Crazyflie Platform

Students design, test, and deploy estimation and control algorithms on the Crazyflie quadrotor research platform.

D-FaLL Flying Arena

Students evaluate controllers through hands-on experiments in the ETH D-FaLL Flying Arena using real Crazyflie quadrotors.

See our gallery for images of the flying arena where students implement their algorithms for making a quad-rotor drone fly autonomously.

Course Overview

Quadrotors are becoming increasingly commonplace as technological advancements improve capabilities and reduce costs. They are used in applications ranging from consumer entertainment and professional cinematography to industrial inspection and autonomous robotics.

This course teaches students how to model, simulate and control autonomous quadrotor systems using MATLAB, Simulink and real-world flight experiments. The learning objectives include:

Course Requirements

Students must have access to MATLAB R2025a or newer, including the Simulink toolbox.

Course Material/Script

The course script is intended as a stand alone script that allows the student to review all the theory we cover in class, as well as provide additional information for those students wishing to delve further particular topics.

The script can be downloaded here (Version 2026-Sep-03), and is also available in the ETH Research Collection.

The script includes a introduction to Simulink tutorial that provides step-by-step instructions for simulating a simple pendulum system.

In addition, clone the course Git repository and follow the setup instructions provided in the README file: D-FaLL Quadrotor P&S GitLab Repository. The repository contains all files required to complete the exercises throughout the semester. Before starting an exercise, carefully read the corresponding README documentation to understand the software structure, provided templates, and expected workflow.

Class Dates for Autumn 2026

The first class will take place on Wednesday, September 23, 2026, 08:15-12:00 in Room T.B.A. Following that, classes will occur as listed below. Students will be split into Group A and Group B, attending on alternating weeks.

Group A

  • Wed. Sep 30, 2026 Room T.B.A 08:15 am
  • Wed. Oct 14, 2026 Room T.B.A 08:15 am
  • Wed. Oct 28, 2026 Room T.B.A 08:15 am
  • Wed. Nov 11, 2026 Room T.B.A 08:15 am
  • Wed. Nov 25, 2026 Room T.B.A 08:15 am

Group B

  • Wed. Oct 07, 2026 Room T.B.A 08:15 am
  • Wed. Oct 21, 2026 Room T.B.A 08:15 am
  • Wed. Nov 04, 2026 Room T.B.A 08:15 am
  • Wed. Nov 18, 2026 Room T.B.A 08:15 am
  • Wed. Dec 02, 2026 Room T.B.A 08:15 am

Exercises

Exercise 1

The goal of Exercise 1 is to become familiar with the Simulink environment by developing a simplified flight-control system that generates Pulse Width Modulation (PWM) signals from a thrust command.

Exercise 2

The goal of Exercise 2 is to simulate the equations of motion for an N-rotor vehicle and through this gain a deeper understanding and intuition for the vehicle's behaviour. Exercise Sheet (Version 2026-Sept-03)

Exercise 3

The goal of Exercise 3 is to design, implement, and tune a PID and LQR controller for the Crazyflie 2.0 quad-rotor vehicle. Exercise Sheet (Version 2026-Sep-03)

Exercise 4

The goal of Exercise 4 is to familiarise with the practical setup and then implement and tune a PID controller for altitude and yaw. Exercise Sheet (Version 2026-Sep-03)

Exercise 5

The goal of Exercise 5 is to continue your implementation and tuning a PID controller for altitude and yaw, and then to implement an LQR controller for the x and y positions. Exercise Sheet (Version 2026-Sep-03)

The following example MATLAB script will assist in tuning your outer LQR controller. To use the example you should save the file locally on you computer and run the script in MATLAB. Further details are explained in the comments of the script. Note that the controller sample time in the lab is 1/200. matlab LQR synthesis example script