## 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, 2018)

Tuesday, Thursday 2:30 - 4:00 pm

35-225

See class schedule for complete details

### Office Hours

Monday 2:00-4:00 pm

Tuesday 7:00-9:00 pm

24-317

### Grading Policy

Assignments: 40%

Midterm: 30%

Final Project: 30%

Late assignments will be penalized 10% every 24 hours.

No final exam.

### Previous Versions

Fall 2015: Available on edX

Fall 2014: Lectures available on YouTube

Spring 2009: Available on MIT OCW

### Class Forums

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

### Prequisites

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)

- Assignment 1
- Assignment 2
- Assignment 3
- Assignment 4
- Assignment 5

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.

"Written" assignments should be submitted by their posted deadline one of two ways:

*(Preferred)*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.- Completed written assignments can also be turned in to box 54 in 32-044.

"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".

*Midterm*

The midterm will be held **in class** on **Tuesday, March 20**. 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.

## FAQ

**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)?**

The 2018 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). 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.

## People

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