Autonomous Navigation for Flying Robots (EdX course)

In this course, we will introduce the basic concepts for autonomous navigation with quadrotors, including topics such as probabilistic state estimation, linear control, and path planning.

Course on EdX (including interactive quadrotor simulator)

Lecture Videos

About this course

In recent years, flying robots such as miniature helicopters or quadrotors have received a large gain in popularity. Potential applications range from aerial filming over remote visual inspection to automatic 3D reconstruction of buildings. Navigating a quadrotor manually requires a skilled pilot and constant concentration. Therefore, there is a strong scientific interest to develop solutions that enable quadrotors to fly autonomously and without constant human supervision. This is a challenging research problem because the payload of a quadrotor is uttermost constrained and so both the quality of the onboard sensors and the available computing power is strongly limited.

In this course, we will introduce the basic concepts for autonomous navigation for quadrotors including topics such as probabilistic state estimation, linear control, and path planning. You will learn how to infer the position of the quadrotor from its sensor readings, how to navigate along a series of waypoints, and how to plan collision free trajectories. The course consists of a series of weekly lecture videos that we be interleaved by interactive quizzes and hands-on programming tasks. The programming exercises will require you to write small code snippets in Python to make a quadrotor fly in simulation.

This course is intended for graduate students in computer science, electrical engineering or mechanical engineering. The course is based on the TUM lecture “Visual Navigation for Flying Robots” which received the TUM TeachInf best lecture award in 2012 and 2013. The course website from last year (including lecture videos and course syllabus) can be found below.

Interactive Exercises and Quadrotor Simulator

For this course, we developed a JavaScript-based quadrotor simulator that runs directly in the browser. You can program this simulator using Python.

You can also download the simulator for offline use. However, you need to activate JavaScript in your browser to run on local html pages. Alternatively, you can set up your own (local) webserver.


Course Evaluation

Teaching this MOOC was a great experience for us and we enjoyed it a lot. We are proud to announce that this course had 19950 participants, of which 1393 passed the course successfully (achieved more than 60% of all points in the homework exercises). By now, all certificates (verified and honor code) have been issued and can be downloaded from your EdX dashboard.

We would also like to thank you for the feedback that we got from you in our course evaluation. Most participants were very happy with the lectures and exercises. In particular, the quadrotor simulator was highly praised. In general, both the videos and homework exercises were perceived as very useful for the understanding of the material. However, there is also room for improvement: Although most participants ranked the level of difficulty to be adequate, the material was on average perceived to be slightly too easy. In the comments, many participants proposed to add more (small) exercises between the lecture videos and add open exercises where it is possible to write more code on your own. People also liked challenge tasks such the race in week 8. On average, most participants spent around 4-6 hours per week for watching the videos and working on the exercises, which was around what we targeted. The full evaluation report is available from here:

Survey results (Google Docs)

Survey results (PDF)

Course Material (Slides and Videos)

Lecture 1.1: Welcome (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_1_part_1.pdf] [lecture_1_part_1.pptx]
Lecture 1.2: Why Quadrotors? (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_1_part_2.pdf] [lecture_1_part_2.pptx]
Lecture 1.3: Flying Principle of a Quadrotor (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_1_part_3.pdf] [lecture_1_part_3.pptx]
Lecture 1.4: Brief History on Quadrotor Research (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_1_part_4.pdf] [lecture_1_part_4.pptx]
Lecture 2.1: Recap on Linear Algebra (Daniel Cremers), 2014.
[bib] [youtube] [lecture_2_part_1.pdf] [lecture_2_part_1.pptx]
Lecture 2.2: 2D Geometry (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_2_part_2.pdf] [lecture_2_part_2.pptx]
Lecture 2.3: 2D Robot Example (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_2_part_3.pdf] [lecture_2_part_3.pptx]
Lecture 2.4: Homework Discussion (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_2_part_4.pdf] [lecture_2_part_4.pptx]
Lecture 3.1: 3D Geometry (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_3_part_1.pdf] [lecture_3_part_1.pptx]
Lecture 3.2: Sensors (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_3_part_2.pdf] [lecture_3_part_2.pptx]
Lecture 4.1: Motors and Controllers (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_4_part_1.pdf] [lecture_4_part_1.pptx]
Lecture 4.2: Feedback Control (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_4_part_2.pdf] [lecture_4_part_2.pptx]
Lecture 4.3: Kinematics and Dynamics (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_4_part_3.pdf] [lecture_4_part_3.pptx]
Lecture 4.4: PID Control (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_4_part_4.pdf] [lecture_4_part_4.pptx]
Lecture 5.1: State Estimation (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_5_part_1.pdf] [lecture_5_part_1.pptx]
Lecture 5.2: Recap on Probability Theory (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_5_part_2.pdf] [lecture_5_part_2.pptx]
Lecture 5.3: Reasoning with Bayes Law (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_5_part_3.pdf] [lecture_5_part_3.pptx]
Lecture 6.1: Bayes Filter (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_6_part_1.pdf] [lecture_6_part_1.pptx]
Lecture 6.2: Kalman Filter (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_6_part_2.pdf] [lecture_6_part_2.pptx]
Lecture 6.3: EKF Example (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_6_part_3.pdf] [lecture_6_part_3.pptx]
Lecture 7.1: 2D Motion Estimation in Images (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_7_part_1.pdf] [lecture_7_part_1.pptx]
Lecture 7.2: Visual Odometry (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_7_part_2.pdf] [lecture_7_part_2.pptx]
Lecture 8.1: Visual Navigation with a Parrot ARDrone (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_8_part_1.pdf] [lecture_8_part_1.pptx]
Lecture 8.2: Tracking and Mapping using Signed Distance Functions (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_8_part_2.pdf] [lecture_8_part_2.pptx]
Lecture 8.3: Direct Methods for Visual SLAM (Jürgen Sturm), 2014.
[bib] [youtube] [lecture_8_part_3.pdf] [lecture_8_part_3.pptx]
Powered by bibtexbrowser

Course on EdX (including interactive quadrotor simulator)