Table of Contents


Robotics as an application draws from many different fields and allows automation of products as diverse as cars, vacuum cleaners, and factories. This course is a challenging introduction to basic computational concepts used broadly in robotics. Topics include simulation, kinematics, control, optimization, and probabilistic inference. The mathematical basis of each area is emphasized, and concepts are motivated using common robotics applications and programming exercises. Students will participate in a series of projects over the course of the semester, in which they will implement algorithms that apply each of the topics discussed in class to real robotics problems. This course prepares students to take CS 4752/MAE 4750: Robotic Manipulation and MAE 4180/CS 3758: Autonomous Mobile Robots, among others.

Course Aims

By the end of this course, I will understand the basic concepts and theory governing the programming of robots that perform autonomous tasks such as navigation and manipulation.

Learning Outcomes

After this course, I will be able to:


(MATH 1920 or MATH 2220) and MATH 2940 and (CS 1110 or CS 1112) or permission of instructor. That is, multivariable calculus, linear algebra, and introduction to computing.

Optional Textbooks

*=on reserve in Uris Library

These texts are not required, but can serve as useful references for different parts of the course.

Course Websites




Regrade requests will be handled through the course CMS website. All regrade requests must be submitted within 10 days of receiving the grade. When submitting a regrade request, you must provide detailed reasoning as to why you feel you deserve a regrade. Please be advised that due to the additional scrutiny we will give your submission as a result of the regrade request, the score you received might increase, decrease, or remain unchanged.

Extension requests

Extensions will be granted only in exceptional circumstances, such as documented illness, not for situations such as job interviews or large workloads in other courses. Direct any extension requests to administrative TA Julia Proft via email.

Homework submission

Homeworks will be submitted, and grades returned, through the course CMS website. Late submission of written homeworks and coding projects will be accommodated through slip days. A maximum of five slip days may be used by each student through the course of the semester. A slip day allows an assignment to be submitted one day later than the deadline without penalty, and they are cumulative. Each assignment allows up to three slip days to be used. Any attempt to submit an assignment that uses more than the allotted number of slip days either on one assignment or overall for the semester will result in a zero on that assignment. Sometimes the CMS server is slow to upload, so do not wait until the last minute! If the upload finishes one minute past the deadline, you wil incur a full slip day penalty.

Reading quizzes

The reading quizzes are due before each class and are submitted on the CMS website. Once missed, they cannot be made up, even if you join the course late.


Written homeworks and projects are to be submitted individually, but working together in groups of any size is explicitly encouraged. Note that each student is responsible for writing a separate solution to written and coding homeworks. No student should ever see another’s solution. Solutions that are too similar may trigger an academic integrity hearing. For all assignments, you must write who you collaborated with.

Academic integrity

Students are expected to follow Cornell’s Code of Academic Integrity which can be found at The purpose of this code is to provide for an honest and fair academic environment. As such, it should be clear to students what is expected of them in the course (see the collaboration policy) and in case of doubt, students should ask Prof. Knepper. Copying work of others (code and/or text) — or allowing others to copy your work — is considered a violation of Cornell’s code.

Inclusion Statement

Students in this course come from a variety of backgrounds, abilities, and identities. In order to ensure an environment conducive to learning, all members of the course must treat one another and the course staff with respect. If you feel your needs are not being adequately accommodated by the other students or instruction staff, please contact Prof. Knepper. You may do so anonymously at or on Piazza.


This course is taught as a standard lecture. Lecture notes are distributed on the website in advance of the class, and students are assigned one short reading per class, usually under 10 pages. Students complete a short (1 or 2 question) quiz to check reading comprehension. Classroom activities will comprise lecture and synthesis of information, with some discussion. In addition, homework assignments comprise a mixture of written response and algorithm implementation on a variety of simulations of mobile and manipulator robots. There are two in-class prelims and one take-home final exam.

Getting Help

This course exposes the student to both theoretical and applied aspects of robotics. Students are likely to encounter trouble with various aspects, from clarifications about notation to implementation confusion and problems debugging complex code. The course is designed so that most of the problems you face will be geared towards learning about robotics. The course staff provides a number of tools to help streamline the process particularly in the programming projects. Nevertheless, aspects of the course are very open-ended. Solving open-ended problems is an important job skill, so it is important for the student to strike a balance between trying to solve a problem themselves and seeking help from others.

Before Seeking Help

  1. Please read the documentation about the libraries or function calls you are using. Even if you think you know how to use it properly, go back and re-read the documentation. The answers you seek are usually there.

  2. When confused about the documentation, please ask a substantive and informed question. Saying “I don’t get it” gives the impression that you made zero effort to try to understand it. Instead, let us know what you understand or expect, so that we can help you get the information you really want quickly and efficiently.

  3. If you get an error message or problem you don’t understand, try Googling it before asking for help on Piazza. Chances are, you are not the first to encounter this error. Search for error text strings to find out what causes the error. If you run a command and it doesn’t work, then Google the command and read the documentation. If you don’t understand how to use a service or function call while coding, try Googling the name of it.

  4. We often get questions like “Would this work if I ran it?” Please just try it and see what happens. You won’t break anything, and you can learn a lot by being curious and experimenting.

  5. If you need help debugging a problem with your code, please understand that we expect you to do your due diligence first. You should take several steps to try to narrow down the error yourself before asking for help. These steps can involve logging, adding print statements, or simplifying the code (e.g. if it doesn’t work with 8 turtles, try it with 1 or 2 and see what happens).

  6. If your code is not producing the results you expect, perform some experiments. You can either run the debugger or use print statements. Make a hypothesis about your code (e.g. when the program gets here, the value of x will always be positive) and test it.

Office Hours

We love to see you in our office hours! In fact, this is one way to earn participation grade points. Office hours are spread throughout the week.


Please follow the Before Seeking Help instructions. Then, if you still need help, please follow these guidelines:

  1. Unless your question requires you to post code, post it publicly to the whole class.

  2. If you need help with a problem, please be as specific as possible when asking a question. Tell us what you did before the problem occurred, what the problem was (include an error message, screenshot, or other details), and tell us what you have already tried to fix it.

  3. If you must post privately because your question involves code or solutions, then post a private message to the entire course staff. Do not address your private post to one specific member of the course staff. It will only delay us getting you an answer.

  4. Course staff will not answer most questions immediately because we want to encourage students to participate in helping one another.

  5. One way to earn participation grade points is to help others on Piazza. Note that only posts directly related to the course material will earn points.

  6. If you need help and don’t want to make a public post on Piazza, please use a private post rather than emailing one of the course instruction staff. You will get a quicker response to your question, and we can better balance the workload among the course staff. The only two course staff you should be emailing unsolicited are Prof. Knepper and administrative TA Julia Proft.

  7. Please understand that if you do not follow the above guidelines, we may not answer your question.