ME 449 Robotic Manipulation (Archive Fall 2020)
UPDATE, SEPTEMBER 29, 2020: ME 449 will continue as an online-only course. The primary reason is to provide a more uniform experience for all students in the class, and to allow them to communicate more easily with the instructor and each other.
Fall Quarter 2020
In Fall 2020, ME 449 will be taught as a hybrid course. Initially, at least, in-person meeting times will be treated as office hours, with a combination of worked examples by the instructors, questions from the class (online or in person), and time to work on assignments with an instructor available if you get stuck. All lectures are pre-recorded for viewing any time, and experiments with robots will be in simulation. You do not have to attend in-person meetings for this course, nor do you have to attend online during the course meeting periods, though that would allow you to interact with me and others, live. Advantages of being in person may be a better spatial awareness of your classmates and the instructor, better access to typical social cues that are hard to get through a computer screen, and, as a result, better engagement with others (while respecting social distancing), but there will be no specific material or experiences available only to those who attend in person. As the quarter progresses, we will evaluate the pros and cons of in-person class sessions.
- All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)
- The first two class meetings (Sept 16 and 18) will be online only. We will not meet in LR2 until Monday Sept 21. After that, we will evaluate whether an in-person component adds significant value.
- For ME grad students: the ME 512 conflict has been resolved by eliminating the time for 512. You should be able to register for ME 512 now.
- We will use this wiki, the Canvas page, and Coursera extensively in this course. Since many of the materials of this course are taken from the Modern Robotics specialization on Coursera, you will see a lot of references to "courses 1-6," "the specialization," "week 1," etc. You can ignore those. We are not following the same schedule as used on Coursera, we will not use all the materials on Coursera, and we will have items that are not a part of Coursera. Ignore any automatic emails from Coursera! I can't control those.
- Although it may be tempting, because most of the materials are already available on Coursera, please do not work more than a week ahead of the schedule posted below. For one reason, we may change the content during the course, so your early work may be wasted. For another, you will be out of sync with the content of the class sessions. (On the other hand, make sure you don't fall behind!)
- Zoom meetings will be recorded and placed on Canvas. No one other than class members will be able to access the recordings. Given these circumstances, I encourage you to engage as much as possible.
- Zoom teaching is new to many of us, but students actually see more examples of it than faculty! So if you have suggestions how to improve the course, they are more than welcome.
- I encourage you to order your (free) doc cam, that points your laptop's webcam downward and facilitates sharing real-time written work with me. Make sure you are authenticated to NU's network, then order at http://bit.ly/sendmirror. You can learn more at http://tinyurl.com/mydoccam2.
Do the following things as soon as possible:
- Buy the book "Modern Robotics" or download the electronic preprint version. (Though the Cambridge-published version is the "official" version, the differences are mostly layout and either will work for this course.)
- Download the Modern Robotics software. You can program in Python, MATLAB, or Mathematica. Most students use Python or MATLAB, but any of these is fine.
- Download, install, and test the CoppeliaSim robot simulation software.
Supportive Class Environment
All members of this class (instructors, TAs, students) are expected to contribute to a respectful, inclusive, and supportive environment for every other member of the class.
We are partners in your education; help me help each of you get the most out of this class. Please engage as much as possible during our class meetings! (e.g., via discussion and chat)
By far the most important purpose of this course is to prepare you for further study, or employment, in the field of robotics! But of course it is also our duty to provide a fair evaluation of your performance. You are encouraged to discuss the material with the instructor, course assistants, and your classmates, but you are not allowed to share your answers or code with others. Anyone asking for answers or code, or providing answers or code, or becoming aware of others doing so without reporting to the instructor, is considered in violation of the honor code.
- Instructor: Prof. Kevin Lynch
- TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu
- Meeting: 3:00-3:50 PM, MWF, Tech LR2
- Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)
- Course website: http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation
- Book website: http://modernrobotics.org
- Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.
Representations of the configuration and spatial motion of rigid bodies and robots based on modern screw theory. Forward, inverse, and differential kinematics. Robot dynamics, trajectory planning, and motion control. Wheeled mobile robots and mobile manipulation.
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from assignments outside of Coursera. There will be four assignments outside of Coursera, with the following weights:
- Assignment 1: 5% of your total grade
- Assignment 2: 10% of your total grade
- Assignment 3: 10% of your total grade
- Capstone: 25% of your total grade (5% milestone 2, 20% final submission)
Course Text and Software
This course uses the textbook Modern Robotics: Mechanics, Planning, and Control, Kevin M. Lynch and Frank C. Park, Cambridge University Press 2017. If you find an error or typo in the book, please report it here.
Get the book, install and test the Modern Robotics code library, and install and test the CoppeliaSim robot simulator. You will program in Python, Mathematica, or MATLAB in this course.
Approximate Syllabus and Schedule
Here is a summary of the structure of the course:
- Before most classes, you will watch the associated videos on Coursera and answer the "lecture comprehension" quizzes. (Designed to be relatively quick, to solidify your understanding.)
- You are encouraged to read the corresponding portions of the textbook after watching the videos. I suggest you watch first, then read, then possibly re-watch, but you can determine what works best for your learning style.
- During the class period after those videos, I will typically summarize what we learned, work a problem, take any questions you have about the material, and possibly assign you a problem to work on.
- We have two kinds of quizzes on Coursera: "lecture comprehension" quizzes, which are short and immediately follow lectures, and summative quizzes, which are usually longer assessments/assignments at the middle or end of a chapter. All quizzes are required and have an impact on your grade. You are requested to stick (at least approximately) to the schedule posted below, but there will be no penalty if a quiz is submitted late.
- Within Coursera we also have "discussion prompts," open-ended group questions that you should reply to (responses can be simple) and forums where you can post questions and reply to other students' questions.
- We also have a few assignments, including the student-created exercise and the capstone programming project, that will be submitted through Canvas instead of Coursera. More information is forthcoming.
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered before that class.
Chapter 2, Configuration Space
- Fri Sept 18: through Chapter 2.2 (dof of a robot, 3 videos)
- Mon Sept 21: through Chapter 2.3 (c-space topology and representation, 2 videos)
- Wed Sept 23: finish Chapter 2 (configuration and velocity constraints, task space and workspace, 2 videos)
Chapter 3, Rigid-Body Motions
- Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3), 3 videos)
- Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates, 3 videos)
- Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists, 3 videos)
- Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates and wrenches, 2 videos)
Chapter 4, Forward Kinematics (skip section 4.2 on URDF)
- Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame, 3 videos)
Chapter 5, Velocity Kinematics and Statics
- Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian, 3 videos)
- Fri Oct 9: through Chapter 5.2 (statics of open chains, 1 video)
- Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability, 2 videos)
Chapter 6, Inverse Kinematics (focus on section 6.2)
- Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)
- Fri Oct 16: catch up (this class will basically be an office hour)
Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)
- Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)
- Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)
- Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)
- Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)
Chapter 9, Trajectory Generation
- Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)
- Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)
- Mon Nov 2: catch up
- Wed Nov 4: final project
Chapter 11, Robot Control (focus on sections 11.1 through 11.4)
- Fri Nov 6: up to (not including) Chapter 184.108.40.206 (linear error dynamics, 3 videos)
- Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)
- Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)
- Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)
Chapter 13, Wheeled Mobile Robots (skip section 13.3)
- Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)
- Wed Nov 18: Chapter 13.4 (odometry, 1 video)
- Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)
- Mon Nov 23:
- Wed Nov 25: CLASS CANCELED (unless popular demand!)
- Mon Nov 30: wrap-up
- Mon Dec 7: Capstone project due
Video Lectures and the Flipped Classroom
This course will take advantage of video lectures. You will watch the videos on Coursera, but you also can see the video lectures at the video browser http://modernrobotics.northwestern.edu or using direct links to the videos on YouTube.
The general flow of the class will be the following:
- Before class, watch the videos, take the lecture comprehension quizzes associated with each video, and do the associated reading. In general, I recommend that you first watch the videos to get a quick understanding of the material of the chapter, then follow up by reading the appropriate sections of the book. The videos are short and dense, so don't expect to get by only watching the videos. You will need to read the book, then do the exercises, to gain mastery of the material.
- Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.
- In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.
- Quiz 1, 2018
- Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from the practice exercises document.
As mentioned above, in the Honor Code: You are encouraged to discuss the material with the instructor, course assistants, and your classmates, but you are not allowed to share your answers or code with others. Anyone asking for answers or code, or providing answers or code, or becoming aware of others doing so without reporting to the instructor, is considered in violation of the honor code.
Assignments are graded based on correctness, how well you organize your homework (it should be easy to understand your thinking and easy to find your responses), and how well you follow the submission instructions below. You will lose points if you don't follow these instructions.
You will not receive credit if you just give an answer. Your solution must demonstrate how you got the answer. It must be easy to follow.
If you ever think a problem is stated incorrectly, not enough information is given, or it is impossible to solve, don't panic! Simply make a reasonable assumption that will allow you to solve the problem (but clearly state what this assumption is), or indicate why it is not possible to solve the problem.
Instructions for uploading assignments to Canvas:
- Upload on time! Late submissions are not accepted.
- For every assignment, you should upload exactly one pdf file, named FamilyName_GivenName_asst#.pdf. This pdf file should have answers to all the questions, including screen shots, text logs of code running, etc. Always include output of your code running on the exercises, so the grader can see what you got when you ran your code. You may scan handwritten solutions (provided they are neat!), but in any case, all answers should be in a single pdf file. DO NOT UPLOAD SCANS AS JPGS! THEY MUST ALL BE COMPILED INTO A SINGLE PDF FILE.
- If required by the assignment, in addition you may be asked to provide a zip file including all source code in their original forms, such as .m, .py, or .nb. This zip file should be named FamilyName_GivenName_asst#.zip. Always create a script that the grader can easily invoke to run your code for a particular exercise. Don't expect the grader to search through your code to find sample code to cut-and-paste. Make it as easy as possible for the grader (you can include a "README.txt" file in your zip file, for example, to tell the grader how everything works). Your code should be commented well enough that it is easy for someone else to pick it up and understand more or less how it works.
Assignment 1, due 1 PM CDT Thursday October 8 on Canvas.
Assignment 2, due 1 PM CDT Thursday October 22 on Canvas.
Assignment 3, due 1 PM CST Thursday November 5 on Canvas. (With the automatic one-day extension, it is now due at 1 PM CST Friday November 6 on Canvas. No assignment will be accepted after that time.)
Final Project: Mobile Manipulation
Office hours for capstone: We will have office hours at the normal times (Tues 9 AM, Wed 7:30 PM) on Dec 1 and 2 during finals week, and one bonus office hour at 9 AM CDT Friday Dec 4. The Dec 4 office hour will be in our class Zoom room.
The final project is described on this page.
- Due Monday November 16 at 1:00 PM on Canvas (extended from Nov 12): Milestone 2. (You will do milestone 2 first! Milestone 1 will come next.) You will turn in a single zip file named FamilyName_GivenName_milestone2.zip with your solution to milestone 2. The zip file should include a README.pdf file with a brief summary of your solution and how to use it, and if your code is not working properly, it should correctly point out the problems. The zip file should also include a directory with the commented code you wrote, including a cut-and-pastable comment at the beginning showing how to execute the code to generate the csv file included in the submission; a CoppeliaSim video showing your reference trajectory of the end-effector (similar to this video); and the csv file that your code generated to create the video.
- Due Monday December 7 at 1:00 PM on Canvas: The entire final writeup, as described at this page, in a single zip file named FamilyName_GivenName_capstone.zip.
- Read and follow closely the instructions on what to submit! If you are missing requested files, or if you use a different directory structure, you will lose points. Make sure your top-level README file is clear on what you've done and what you've submitted.
- If your code does not work well, please describe the remaining issues in your README file. Don't gloss over them or only provide examples where the code works well if the code does not work well for other example problems. Otherwise, if the graders find problems with your software, you will not receive credit for having identified them yourself.
- You can get up to 10 pts of extra credit for correctly implementing joint-limit avoidance (so the robot links and chassis do not self-intersect) and singularity avoidance (e.g., using joint limits that keep the arm in a portion of its workspace where it does not encounter any singularities). If you implement these, you should submit examples of your code solving the same problem two ways---not using joint-limit avoidance and using it---so the usefulness of the joint-limit avoidance is apparent. Also, your README file should clearly describe your approach to solving joint-limit and singularity avoidance.
- Make sure to keep your problem inputs separate from the code. The exact same code should solve all your problem instances; you shouldn't have different copies of your code for different problem inputs. You could have an input file for each of your examples (e.g., bestScript, overshootScript, newTaskScript) which defines the inputs (e.g., block configurations, controller gains, initial robot configuration) and invokes your code. Then a grader just needs to invoke those scripts to verify your results. (If you implemented joint-limit avoidance, this could just be one of your inputs, e.g., a variable called "avoidJointLimits" which is 0 if you don't care about avoiding joint limits and 1 if you do.)
- Make sure your videos are good quality. They shouldn't be too fast (at least 5 seconds long) or low resolution. The motion should be smooth.
- If your code is written in Python, indicate which version of Python should be used.
- Only submit the code that you wrote. DO NOT submit MR library functions. The TAs will test your code using the MR library functions imported into MATLAB or Python as appropriate.