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:
- Derive the continuous-time equations of motion for a general N-rotor vehicle.
- Simulate a general N-rotor vehicle.
- Understand how vehicle parameters affect flight performance
- Explain why a quadrotor design allows the control architecture to be decoupled.
- Design and tune PID and LQR controllers.
- Implement flight-control algorithms in C++
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