Underactuated Robotics

Algorithms for Walking, Running, Swimming, Flying, and Manipulation
Spring 2019

Course Description

Robots today move far too conservatively, using control systems that attempt to maintain full control authority at all times. Humans and animals move much more aggressively by routinely executing motions which involve a loss of instantaneous control authority. Controlling nonlinear systems without complete control authority requires methods that can reason about and exploit the natural dynamics of our machines.

This course introduces nonlinear dynamics and control of underactuated mechanical systems, with an emphasis on computational methods. Topics include the nonlinear dynamics of robotic manipulators, applied optimal and robust control and motion planning. Discussions include examples from biology and applications to legged locomotion, compliant manipulation, underwater robots, and flying machines.

Course Information

Class Time and Location

Spring semester
(February - May, 2019)

Tuesday, Thursday 2:30 - 4:00 pm
Location: 35-225

See class schedule for complete details

Office Hours

Starting from Feb. 11
Time: Monday 7-9pm, Friday 9-11am
Location: 24-321

Grading Policy

Assignments: 40%
Midterm: 30%
Final Project: 30%

Late assignments will be penalized 10% every 24 hours.

No final exam.

Previous Versions

Spring 2018: Available on YouTube

Fall 2015: Available on edX

Fall 2014: Available on YouTube

Spring 2009: Available on MIT OCW

Class Forums

Forums are on Piazza (sign up with your @mit.edu email address).


Basic linear algebra and differential equations.

Coding assignments will be in Python.

See the FAQ if you have any questions about prerequisites.

Textbook, Assignments, Videos

The textbook, assignments, and lecture videos will be all be open and available online:

Textbook (link)
The textbook will be updated throughout the semester. Please refer to the schedule for how textbook sections will correspond to lecture.

Assignments (to be released as they're assigned)

Links and due dates for assignments will be on the schedule.

Submission of Assignments
We'll be using Gradescope for written and code assignment submission and grading. Each assignment is weighted equally. The login code for this class will be posted on Piazza -- please create an account and add yourself to this class using that code.

Submit "Written" assignments: Upload the assignment to Gradescope, either as a scanned PDF or a series of images. Cell phone pictures are fine, as long as they're legible.

Note that we plan on scanning these assignments, so please make sure that's possible to do (though stapling is fine). You can complete the assignments directly on the printed pset (we did our best to create adequate space), and can continue on new paper if needed, as long as it's clearly labeled. These assignments will usually require writing code to help find answers.

"Coding" assignments will also appear on Gradescope starting with Problem Set 2. The grading of those assignments will rely on submitted code passing an automated battery of tests, in combination with our review of your code and inline responses to questions. More details will be provided when that assignment is released.

Collaboration Policy
Collaboration is encouraged on both written and coding assignments -- but the work you submit for assignments is expected to be entirely your own. That is, the writing must be yours, and you must fully understand everything that you hand in. Discussing the details of how to solve a problem is fine, but you must write the solution yourself. To avoid plagiarizing, you shouldn't be looking at someone else's solution while you write down your own. If you collaborated significantly (use your own discretion for "significantly") on a problem, list the people you collaborated with next to your solution.

Videos (link to YouTube Channel homepage)
Videos will be livestreamed (Tuesdays, Thursdays, 2:30 - 4:00 EST) and also remain available on YouTube.

To find the link for the livestream, head to the Channel homepage and the next (or Live) scheduled livestream should appear at the top of the feed.

To best stay updated on when new videos are available, you can head to the Channel and click "Subscribe".

The midterm will be held in class on Tuesday, March 19th. More information about it (including some examples of previous midterms) is available here.

Final Projects

The final project will be your opportunity to take what you've learned in the class and put it towards an application of your choice.

Details about the final projects and their requirements are available here.


I don't have any robotics experience, is it okay if I take the class?
Yes. The course is designed to not assume any prior experience with robotics. If you have plenty of robotics experience, that's great too.

How will the class compare with previous versions? (for example, 2009, 2015, 2018)?
The 2019 version of the course will cover expanded versions of selected topics, including more content on manipulation, reinforcement learning, and sensors (output-feedback).

The assignments for the class will also be almost entirely overhauled, including that programming assignments will now be in Python and will use Drake through the pydrake interface.

What will assignments be like?
Weekly assignments will comprise a mix of hand-written math and programming.

Programming assignments will be in Python and will feature use of Drake, a toolbox for planning, control and analysis for robotics. Drake was developed out of the Robot Locomotion Group and its development is now led by Toyota Research Institute.

All assignments (both hand-written components and programming components) will be graded using Gradescope.

I am not sure if I fit the prerequisites, what should I do?
The best way to determine if you are ready for the class is to look over some of the lectures from previous years (for example, 2009, 2015, 2018). If you are excited and think you can handle it, you probably will be able to. You can always contact the course TAs (underactuated-tas@mit.edu) if you would like to get feedback on how prepared you are. Also, see the next question.

What can I do to best prepare for success in the class?
The course takes a rigorous mathematical approach to robotics. The only required preqrequisites are basic familiarity with linear algebra and differential equations. If you work hard, we can teach you the rest.

If, however, you would like to prepare as best as possible, here is what the course TAs recommend:

  • Linear Algebra:
    • A strong, intuitive understanding of Linear Algebra will very much help you with this class. If off the top of your head you don't remember what the rank of a matrix is, or how to do Singular Value Decomposition, we recommend you review your linear algebra. The entire world of robotics is rich in linear algebra -- you will not regret investing time in mastering fundamentals!
    • To brush up on linear algebra, the content and video lectures from Gilbert Strang's classic course, MIT 18.06 have helped many students in the past.
    • Another good resource is the textbook Linear Algebra Done Right by Sheldon Axler.
  • Differential Equations (ODEs)
    • While a strong understanding of differential equations will only help you, if you have not taken a full Diff EQ course before, you will probably be okay with just understanding the basics.
    • The Differential Equations content at Khan Academy should be enough to get you going in the class -- you can learn the rest as you go.
  • Nonlinear Dynamics
    • While not a prerequisite, a fantastic textbook for an introduction to nonlinear dynamics is the textbook Nonlinear Dynamics and Chaos by Steven Strogatz.
  • Programming in Python
    • If you are somewhat familiar with Python but would like to brush up on syntax, this tutorial from Stanford CS231n provides a good overview.
    • If you are an absolute beginner with Python, Codecademy provides a friendly introduction.
    • Although you will not need to know C++ to get an A in the class, the underlying software used for some of the assignments is in C++.
  • Mathematical Optimization
    • We will teach you what you need to know about optimization, but acquiring a background in the subject will help you deepen understanding. If you know what the following are, you are totally set: LP, QP, QCQP, MI-variants, SDP.
    • Video lectures on Convex Optimization by Stephen Boyd are recommended, as is the reference textbook Convex Optimization by Boyd and Vandenberghe.
    • Reading about SOS (Sum of Squares) optimization would also be helpful (but we will teach you this).
  • Machine Learning
    • Basic background in Machine Learning can only help. There are many great introductory classes online, Andrew Ng's is one.
  • Robotics
    • You will not need any prior robotics exposure to succeed in the class. If however you want to start absorbing fundamentals (frame transformations, manipulator equations, etc.) then Introduction to Robotics: Mechanics and Control by John Craig is a good reference.


You can contact the course staff at: underactuated-tas@mit.edu


Russ Tedrake

Teaching Assistant

Wei Gao

Teaching Assistant

Yunzhu Li