http://hades.mech.northwestern.edu/api.php?action=feedcontributions&user=Lynch&feedformat=atomMech - User contributions [en]2020-10-21T05:41:59ZUser contributionsMediaWiki 1.18.2http://hades.mech.northwestern.edu/index.php/File:ME449-asst3-2020.pdfFile:ME449-asst3-2020.pdf2020-10-19T23:22:59Z<p>Lynch: </p>
<hr />
<div></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-19T23:22:44Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot, 3 videos)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation, 2 videos)<br />
* Wed Sept 23: finish Chapter 2 (configuration and velocity constraints, task space and workspace, 2 videos)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3), 3 videos)<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates, 3 videos)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists, 3 videos)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates and wrenches, 2 videos)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame, 3 videos)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian, 3 videos)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains, 1 video)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability, 2 videos)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)<br />
* Mon Nov 2: catch up<br />
* Wed Nov 4: final project<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics, 3 videos)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)<br />
* Wed Nov 18: Chapter 13.4 (odometry, 1 video)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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.<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
'''[[Media:ME449-asst3-2020.pdf|Assignment 3]]''', due 1 PM CDT Thursday November 5 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Modern_Robotics_ErrataModern Robotics Errata2020-10-19T21:53:12Z<p>Lynch: /* Chapter 8 */</p>
<hr />
<div>The errata below are for the [[Modern_Robotics|'''updated first edition of ''Modern Robotics'' ''']] (as well as the practice exercises and linear algebra refresher appendix). The updated first edition (also called "version 2") was originally published by Cambridge University Press in late 2019 (marked "3rd printing 2019" or later) and the corresponding online preprint is dated December 2019. The updated first edition includes several corrections and minor additions to the original first edition, which was originally published by Cambridge in May 2017, with a corresponding online preprint dated May 2017. <br />
<br />
'''[[Modern Robotics Errata, First Edition Version 1|The errata for the original first edition can be found here]].'''<br />
<br />
[https://docs.google.com/forms/d/1iZ_3LsWR1iuPJmRsUQsa2ehZj6p-qKQfx8NRKaTlIuE/edit '''Please click here to report any corrections for the updated first edition of the book, the practice exercises, or the linear algebra refresher appendix.''']<br />
<br />
== Updated first edition: Significant corrections ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Chapter 3 ===<br />
<br />
* (printed version only) At the end of the introduction Exercise 3.16, it says "origin of {b} is at (0,2,0) is {s}" but "is {s}" should be "in {s}".<br />
* Exercise 3.20, Figure 3.26: In the figure, the y and z axes for the {a}, {b}, and {c} frames are switched (y should point forward and z should point up). Also, the space frame is located at the bottom of the small wheel, directly below the {a} frame.<br />
* (printed version only) Exercise 3.25(a): the element in the third row and third column of the matrix <math>A</math> should be 0 (it is incorrectly written as 1).'''<br />
<br />
=== Chapter 4 ===<br />
<br />
* Exercise 4.21: The question should begin "For each <math>T</math> below..." (instead of "For each <math>T \in SE(3)</math> below...") since the first part of the problem is determining whether <math>T</math> is indeed an element of <math>SE(3)</math>.<br />
<br />
=== Chapter 8 ===<br />
<br />
* (printed version only) Equation (8.74): the first two plus signs should be minus signs.<br />
<br />
=== Chapter 10 ===<br />
<br />
* Second displayed equation of Chapter 10.6.3 (Workspace Potential): As it is written, this equation (which involves a partial derivative with respect to the robot's configuration <math>q</math>) already gives the repulsive generalized force <math>F_{ij}(q)</math>, i.e., the Jacobian is already embedded, obviating the subsequent development. To fit the rest of the development, the partial derivative in this equation should be with respect to <math>f_i(q)</math>. So the equation should read<br />
<math><br />
F^\prime_{ij}(q) = -\frac{\partial P^\prime_{ij}}{\partial f_i(q)} = \frac{k}{\|f_i(q) - c_j\|^4} (f_i(q) - c_j) \in \mathbb{R}^3.<br />
</math><br />
<br />
<br />
=== Chapter 11 ===<br />
<br />
* Chapter 11.5, Equations (11.52) and (11.53) (and nearby text): The term <math>K_{fp}</math> in Equations (11.52) and (11.53) should be <math>(K_{fp}+I)</math>, where <math>I</math> is the identity matrix. In the text immediately after Equation (11.51), the term "positive-definite" should be eliminated. In the text immediately after Equation (11.53), <math>K_{fp}</math> should be replaced by <math>(K_{fp}+I)</math>.<br />
<br />
== Updated first edition: Minor typos, etc., no danger of misunderstanding ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Throughout the book ===<br />
<br />
* The V-REP simulator has been discontinued and replaced by the [https://www.coppeliarobotics.com/ CoppeliaSim] simulator. This does not change anything in the book (or the simulation scenes provided to accompany the book).<br />
<br />
=== Chapter 2 ===<br />
<br />
* Figure 2.9 (left): bold segment of the line should not extend beyond the closing parenthesis at b.<br />
<br />
=== Chapter 5 ===<br />
<br />
* Chapter 5.3, Case V: For maximum clarity, the title should be "Case V: Six Revolute Joint Axes Intersecting a Common Line." Similarly, fifth bullet of Chapter 5.5: item (v) on the list should say "six revolute joint axes intersecting..." instead of just "six revolute joints intersecting..."<br />
<br />
=== Chapter 6 ===<br />
<br />
* (printed version only) Chapter 6.2.2, Example 6.1: just before the matrix <math>T_{sd}</math>, "corresponds to to" should be "corresponds to." '''<br />
* (printed version only) Chapter 6.3, first sentence after Equation (6.7): "however small" should be written "however, small" to avoid ambiguity.<br />
<br />
=== Chapter 8 ===<br />
<br />
* First bullet of Chapter 8.10: In the displayed equation, the math italic <math>L</math> should be in the calligraphic font <math>\mathcal{L}</math>, for the Lagrangian.<br />
<br />
=== Chapter 11 ===<br />
<br />
* (online version only) Chapter 11.3.3: The sentence containing Equation (11.18) is missing a period at the end.<br />
<br />
== A partial list of errata contributors ==<br />
<br />
Thanks to the following people who provided corrections, starting from the preliminary version of the book posted in October, 2016:<br />
<br />
H. Andy Nam, Eric Lee, Yuchen Rao, Chainatee Tanakulrongson, Mengjiao Hong, Kevin Cheng, Jens Lundell, Elton Cheng, Michael Young, Jarvis Schultz, Logan Springgate, Sofya Akhmametyeva, Aykut Onol, Josh Holcomb, Yue Chen, Mark Shi, AJ Ibraheem, Yalun Wen, Seongjae Jeong, Josh Mehling, Felix Wang, Drew Warren, Chris Miller, Clemens Eppner, Zack Woodruff, Jian Shi, Jixiang Zhang, Shachar Liberman, Will Wu, Dirk Boysen, Awe Wang, Ville Kyrki, John Troll, Andrew Taylor, Nikhil Bakshi, Yunzhe Pan, Barrett Ames, Marcel Bonnici, Mahdiar Edraki, Jay Li, Jose Capco, Chen Wang<br />
<br />
<!--<br />
Lu Xu in email of Sept 9, 2020, suggests giving the identity<br />
[w1×w2] = [w1][w2] - [w2][w1]<br />
for use in the derivation of Eq (8.23) between lines 3 and 4.<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Modern_Robotics_ErrataModern Robotics Errata2020-10-19T21:52:55Z<p>Lynch: /* Updated first edition: Minor typos, etc., no danger of misunderstanding (Errata for original first edition here) */</p>
<hr />
<div>The errata below are for the [[Modern_Robotics|'''updated first edition of ''Modern Robotics'' ''']] (as well as the practice exercises and linear algebra refresher appendix). The updated first edition (also called "version 2") was originally published by Cambridge University Press in late 2019 (marked "3rd printing 2019" or later) and the corresponding online preprint is dated December 2019. The updated first edition includes several corrections and minor additions to the original first edition, which was originally published by Cambridge in May 2017, with a corresponding online preprint dated May 2017. <br />
<br />
'''[[Modern Robotics Errata, First Edition Version 1|The errata for the original first edition can be found here]].'''<br />
<br />
[https://docs.google.com/forms/d/1iZ_3LsWR1iuPJmRsUQsa2ehZj6p-qKQfx8NRKaTlIuE/edit '''Please click here to report any corrections for the updated first edition of the book, the practice exercises, or the linear algebra refresher appendix.''']<br />
<br />
== Updated first edition: Significant corrections ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Chapter 3 ===<br />
<br />
* (printed version only) At the end of the introduction Exercise 3.16, it says "origin of {b} is at (0,2,0) is {s}" but "is {s}" should be "in {s}".<br />
* Exercise 3.20, Figure 3.26: In the figure, the y and z axes for the {a}, {b}, and {c} frames are switched (y should point forward and z should point up). Also, the space frame is located at the bottom of the small wheel, directly below the {a} frame.<br />
* (printed version only) Exercise 3.25(a): the element in the third row and third column of the matrix <math>A</math> should be 0 (it is incorrectly written as 1).'''<br />
<br />
=== Chapter 4 ===<br />
<br />
* Exercise 4.21: The question should begin "For each <math>T</math> below..." (instead of "For each <math>T \in SE(3)</math> below...") since the first part of the problem is determining whether <math>T</math> is indeed an element of <math>SE(3)</math>.<br />
<br />
=== Chapter 8 ===<br />
<br />
* (printed version only) Equation (8.74): the first two plus signs should be minus signs.<br />
<br />
=== Chapter 10 ===<br />
<br />
* Second displayed equation of Chapter 10.6.3 (Workspace Potential): As it is written, this equation (which involves a partial derivative with respect to the robot's configuration <math>q</math>) already gives the repulsive generalized force <math>F_{ij}(q)</math>, i.e., the Jacobian is already embedded, obviating the subsequent development. To fit the rest of the development, the partial derivative in this equation should be with respect to <math>f_i(q)</math>. So the equation should read<br />
<math><br />
F^\prime_{ij}(q) = -\frac{\partial P^\prime_{ij}}{\partial f_i(q)} = \frac{k}{\|f_i(q) - c_j\|^4} (f_i(q) - c_j) \in \mathbb{R}^3.<br />
</math><br />
<br />
<br />
=== Chapter 11 ===<br />
<br />
* Chapter 11.5, Equations (11.52) and (11.53) (and nearby text): The term <math>K_{fp}</math> in Equations (11.52) and (11.53) should be <math>(K_{fp}+I)</math>, where <math>I</math> is the identity matrix. In the text immediately after Equation (11.51), the term "positive-definite" should be eliminated. In the text immediately after Equation (11.53), <math>K_{fp}</math> should be replaced by <math>(K_{fp}+I)</math>.<br />
<br />
== Updated first edition: Minor typos, etc., no danger of misunderstanding ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Throughout the book ===<br />
<br />
* The V-REP simulator has been discontinued and replaced by the [https://www.coppeliarobotics.com/ CoppeliaSim] simulator. This does not change anything in the book (or the simulation scenes provided to accompany the book).<br />
<br />
=== Chapter 2 ===<br />
<br />
* Figure 2.9 (left): bold segment of the line should not extend beyond the closing parenthesis at b.<br />
<br />
=== Chapter 5 ===<br />
<br />
* Chapter 5.3, Case V: For maximum clarity, the title should be "Case V: Six Revolute Joint Axes Intersecting a Common Line." Similarly, fifth bullet of Chapter 5.5: item (v) on the list should say "six revolute joint axes intersecting..." instead of just "six revolute joints intersecting..."<br />
<br />
=== Chapter 6 ===<br />
<br />
* (printed version only) Chapter 6.2.2, Example 6.1: just before the matrix <math>T_{sd}</math>, "corresponds to to" should be "corresponds to." '''<br />
* (printed version only) Chapter 6.3, first sentence after Equation (6.7): "however small" should be written "however, small" to avoid ambiguity.<br />
<br />
=== Chapter 8 ===<br />
<br />
* First bullet of 8.10: In the displayed equation, the math italic <math>L</math> should be in the calligraphic font <math>\mathcal{L}</math>, for the Lagrangian.<br />
<br />
=== Chapter 11 ===<br />
<br />
* (online version only) Chapter 11.3.3: The sentence containing Equation (11.18) is missing a period at the end.<br />
<br />
== A partial list of errata contributors ==<br />
<br />
Thanks to the following people who provided corrections, starting from the preliminary version of the book posted in October, 2016:<br />
<br />
H. Andy Nam, Eric Lee, Yuchen Rao, Chainatee Tanakulrongson, Mengjiao Hong, Kevin Cheng, Jens Lundell, Elton Cheng, Michael Young, Jarvis Schultz, Logan Springgate, Sofya Akhmametyeva, Aykut Onol, Josh Holcomb, Yue Chen, Mark Shi, AJ Ibraheem, Yalun Wen, Seongjae Jeong, Josh Mehling, Felix Wang, Drew Warren, Chris Miller, Clemens Eppner, Zack Woodruff, Jian Shi, Jixiang Zhang, Shachar Liberman, Will Wu, Dirk Boysen, Awe Wang, Ville Kyrki, John Troll, Andrew Taylor, Nikhil Bakshi, Yunzhe Pan, Barrett Ames, Marcel Bonnici, Mahdiar Edraki, Jay Li, Jose Capco, Chen Wang<br />
<br />
<!--<br />
Lu Xu in email of Sept 9, 2020, suggests giving the identity<br />
[w1×w2] = [w1][w2] - [w2][w1]<br />
for use in the derivation of Eq (8.23) between lines 3 and 4.<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-16T20:31:36Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot, 3 videos)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation, 2 videos)<br />
* Wed Sept 23: finish Chapter 2 (configuration and velocity constraints, task space and workspace, 2 videos)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3), 3 videos)<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates, 3 videos)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists, 3 videos)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates and wrenches, 2 videos)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame, 3 videos)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian, 3 videos)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains, 1 video)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability, 2 videos)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)<br />
* Mon Nov 2: catch up<br />
* Wed Nov 4: final project<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics, 3 videos)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)<br />
* Wed Nov 18: Chapter 13.4 (odometry, 1 video)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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.<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-15T02:53:35Z<p>Lynch: /* Approximate Syllabus and Schedule */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot, 3 videos)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation, 2 videos)<br />
* Wed Sept 23: finish Chapter 2 (configuration and velocity constraints, task space and workspace, 2 videos)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3), 3 videos)<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates, 3 videos)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists, 3 videos)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates and wrenches, 2 videos)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame, 3 videos)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian, 3 videos)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains, 1 video)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability, 2 videos)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)<br />
* Mon Nov 2: catch up<br />
* Wed Nov 4: final project<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics, 3 videos)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)<br />
* Wed Nov 18: Chapter 13.4 (odometry, 1 video)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-15T02:43:56Z<p>Lynch: /* Approximate Syllabus and Schedule */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)<br />
* Mon Nov 2: catch up<br />
* Wed Nov 4: final project<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics, 3 videos)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)<br />
* Wed Nov 18: Chapter 13.4 (odometry, 1 video)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-15T02:42:38Z<p>Lynch: /* Approximate Syllabus and Schedule */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics, 3 videos)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics, 2 videos)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix, 1 video)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body, 2 videos)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics, 2 videos)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories, 3 videos)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling, 3 videos)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics, 3 videos)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics, 2 videos)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs, 3 videos)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs, 3 videos)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots, 3 videos)<br />
* Wed Nov 18: Chapter 13.4 (odometry, 1 video)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation, 1 video)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-15T00:33:09Z<p>Lynch: /* Approximate Syllabus and Schedule */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up (this class will basically be an office hour)<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/File:ME449-asst2-2020.pdfFile:ME449-asst2-2020.pdf2020-10-15T00:29:40Z<p>Lynch: replacement name</p>
<hr />
<div>replacement name</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-15T00:29:01Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-2020.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/File:ME449-asst2-202.pdfFile:ME449-asst2-202.pdf2020-10-13T17:26:27Z<p>Lynch: </p>
<hr />
<div></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-13T17:26:10Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
'''[[Media:ME449-asst2-202.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-13T17:26:02Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
'''[[Media:ME449-asst2-202.pdf|Assignment 2]]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-13T17:25:44Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
'''[[Media:ME449-asst2-202.pdf|Assignment 2]''', due 1 PM CDT Thursday October 22 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Writing_a_CSV_FileWriting a CSV File2020-10-13T17:05:42Z<p>Lynch: </p>
<hr />
<div>[[image:ur5-img.png|right|x200px]]<br />
<br />
Several of the CoppeliaSim simulation scenes require a plain-text comma-separated values (CSV) file as input. A CSV file may represent the trajectory of a robot, where each row contains the configuration of the robot at an instant in time, with a fixed time between each row. If the robot has <math>n</math> joints, then each row has <math>n</math> numbers separated by commas. For example, five rows of a CSV file for a six-joint robot might look like this:<br />
<br />
2.950000, -1.570000, 0.000000, 0.000000, 0.000000, 0.000000<br />
2.987484, -1.540050, 0.019967, 0.019992, 0.012495, 0.009996<br />
3.024875, -1.510399, 0.039734, 0.039933, 0.024958, 0.019967<br />
3.062079, -1.481344, 0.059104, 0.059775, 0.037360, 0.029888<br />
3.099002, -1.453174, 0.077884, 0.079468, 0.049667, 0.039734<br />
<br />
where each number is a joint angle in radians.<br />
<br />
Below are code snippets in Python, MATLAB, and Mathematica that you can modify to create your own CSV files. <br />
<br />
[[Getting_Started_with_the_CoppeliaSim_Simulator|'''This page''']] contains information on getting started quickly with CoppeliaSim. [[CoppeliaSim_Introduction|'''This page''']] contains a number of scenes that accept CSV file inputs for visualization of robot trajectories.<br />
<br />
===Python===<br />
<br />
<nowiki><br />
import numpy as np<br />
<br />
# Generate random 3x4 matrix of floats y, 3x1 vector of ints d<br />
y = np.random.rand(3, 4)<br />
d = np.random.randint(-100, 100, 3)<br />
<br />
# Open a file for output<br />
# Overwrite<br />
f = open("output.csv", "w") <br />
# Append<br />
#f = open("output.csv", "a")<br />
<br />
# For loop running 3 times to print each csv row<br />
for i in range(len(d)):<br />
output = " %10.6f, %10.6f, %10.6f, %10.6f, %d\n" % (y[i,0], y[i,1], y[i,2], y[i,3], d[i])<br />
f.write(output)<br />
<br />
# close file<br />
f.close()<br />
</nowiki><br />
<br />
The code below is a somewhat simpler version.<br />
<br />
<nowiki><br />
import numpy as np<br />
<br />
# Generate random 3x4 matrix of floats y, 3x1 vector of ints d<br />
y = np.random.rand(3, 4)<br />
d = np.random.randint(-100, 100, 3)<br />
<br />
# Set number precision<br />
y = np.round(y, 6)<br />
<br />
# Overwrite csv file<br />
np.savetxt("output.csv", np.asarray(np.c_[y, d]), delimiter = ",") <br />
</nowiki><br />
<br />
===MATLAB===<br />
<br />
<nowiki><br />
% Generate random 3x4 matrix of floats y, 3x1 vector of ints d<br />
y = rand(3, 4);<br />
d = randi([-100, 100], 3, 1);<br />
<br />
% Open a file for output<br />
% Overwrite<br />
f = fopen('output.csv', 'w');<br />
% Append<br />
%f = fopen('output.csv', 'a');<br />
<br />
% For loop running 3 times to print each csv row<br />
for i = 1: length(d)<br />
fprintf(f, ' %10.6f, %10.6f, %10.6f, %10.6f, %d\n', y(i, :), d(i));<br />
end<br />
<br />
% Close file<br />
fclose(f);<br />
</nowiki><br />
<br />
The code below is a somewhat simpler version.<br />
<br />
<nowiki><br />
% Generate random 3x4 matrix of floats y, 3x1 vector of ints d<br />
y = rand(3, 4);<br />
d = randi([-100, 100], 3, 1);<br />
<br />
% Set number precision<br />
y = round(y, 6);<br />
<br />
% Overwrite csv file<br />
csvwrite('output.csv', [y, d]);<br />
</nowiki><br />
<br />
===Mathematica===<br />
<br />
<nowiki><br />
(* Generate random 3x4 matrix of floats y,3x1 vector of ints d *)<br />
<br />
y = RandomReal[1, {3, 4}];<br />
d = RandomInteger[{-100, 100}, {3, 1}];<br />
<br />
(* Open a file for output *)<br />
(* Overwrite *)<br />
<br />
f = OpenWrite[FileNameJoin[{NotebookDirectory[], "output.csv"}]];<br />
(* Append *)<br />
(* \<br />
f=OpenAppend[FileNameJoin[{NotebookDirectory[],"output.csv"}]]; *)<br />
<br />
(* For loop running 3 times to print each csv row *)<br />
<br />
Do[WriteString[f, <br />
ExportString[{Flatten[{SetAccuracy[y[[i, ;;]], 6], d[[i]]}]}, <br />
"CSV"]], {i, Length[d]}];<br />
<br />
(* Close file *)<br />
Close[f];<br />
</nowiki><br />
<br />
The code below is a somewhat simpler version.<br />
<br />
<nowiki><br />
(* Generate random 3x4 matrix of floats y,3x1 vector of ints d *)<br />
<br />
y = RandomReal[1, {3, 4}];<br />
d = RandomInteger[{-100, 100}, {3, 1}];<br />
<br />
(* Set number precision *)<br />
y = SetAccuracy[y, 6];<br />
<br />
(* Overwrite csv file *)<br />
<br />
Export[FileNameJoin[{NotebookDirectory[], "output.csv"}], <br />
ArrayFlatten[{{y, d}}], "CSV"];<br />
</nowiki></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-13T16:34:17Z<p>Lynch: /* Student-Created Exercises */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
<!--<br />
==Student-Created Exercises==<br />
--><br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
<!--<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
--><br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-13T16:33:25Z<p>Lynch: /* Grading */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
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:<br />
* Assignment 1: 5% of your total grade<br />
* Assignment 2: 10% of your total grade<br />
* Assignment 3: 10% of your total grade<br />
* Capstone: 25% of your total grade<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Modern_Robotics_ErrataModern Robotics Errata2020-10-12T17:10:18Z<p>Lynch: /* Chapter 5 */</p>
<hr />
<div>The errata below are for the [[Modern_Robotics|'''updated first edition of ''Modern Robotics'' ''']] (as well as the practice exercises and linear algebra refresher appendix). The updated first edition (also called "version 2") was originally published by Cambridge University Press in late 2019 (marked "3rd printing 2019" or later) and the corresponding online preprint is dated December 2019. The updated first edition includes several corrections and minor additions to the original first edition, which was originally published by Cambridge in May 2017, with a corresponding online preprint dated May 2017. <br />
<br />
'''[[Modern Robotics Errata, First Edition Version 1|The errata for the original first edition can be found here]].'''<br />
<br />
[https://docs.google.com/forms/d/1iZ_3LsWR1iuPJmRsUQsa2ehZj6p-qKQfx8NRKaTlIuE/edit '''Please click here to report any corrections for the updated first edition of the book, the practice exercises, or the linear algebra refresher appendix.''']<br />
<br />
== Updated first edition: Significant corrections ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Chapter 3 ===<br />
<br />
* (printed version only) At the end of the introduction Exercise 3.16, it says "origin of {b} is at (0,2,0) is {s}" but "is {s}" should be "in {s}".<br />
* Exercise 3.20, Figure 3.26: In the figure, the y and z axes for the {a}, {b}, and {c} frames are switched (y should point forward and z should point up). Also, the space frame is located at the bottom of the small wheel, directly below the {a} frame.<br />
* (printed version only) Exercise 3.25(a): the element in the third row and third column of the matrix <math>A</math> should be 0 (it is incorrectly written as 1).'''<br />
<br />
=== Chapter 4 ===<br />
<br />
* Exercise 4.21: The question should begin "For each <math>T</math> below..." (instead of "For each <math>T \in SE(3)</math> below...") since the first part of the problem is determining whether <math>T</math> is indeed an element of <math>SE(3)</math>.<br />
<br />
=== Chapter 8 ===<br />
<br />
* (printed version only) Equation (8.74): the first two plus signs should be minus signs.<br />
<br />
=== Chapter 10 ===<br />
<br />
* Second displayed equation of Chapter 10.6.3 (Workspace Potential): As it is written, this equation (which involves a partial derivative with respect to the robot's configuration <math>q</math>) already gives the repulsive generalized force <math>F_{ij}(q)</math>, i.e., the Jacobian is already embedded, obviating the subsequent development. To fit the rest of the development, the partial derivative in this equation should be with respect to <math>f_i(q)</math>. So the equation should read<br />
<math><br />
F^\prime_{ij}(q) = -\frac{\partial P^\prime_{ij}}{\partial f_i(q)} = \frac{k}{\|f_i(q) - c_j\|^4} (f_i(q) - c_j) \in \mathbb{R}^3.<br />
</math><br />
<br />
<br />
=== Chapter 11 ===<br />
<br />
* Chapter 11.5, Equations (11.52) and (11.53) (and nearby text): The term <math>K_{fp}</math> in Equations (11.52) and (11.53) should be <math>(K_{fp}+I)</math>, where <math>I</math> is the identity matrix. In the text immediately after Equation (11.51), the term "positive-definite" should be eliminated. In the text immediately after Equation (11.53), <math>K_{fp}</math> should be replaced by <math>(K_{fp}+I)</math>.<br />
<br />
== Updated first edition: Minor typos, etc., no danger of misunderstanding ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Throughout the book ===<br />
<br />
* The V-REP simulator has been discontinued and replaced by the [https://www.coppeliarobotics.com/ CoppeliaSim] simulator. This does not change anything in the book (or the simulation scenes provided to accompany the book).<br />
<br />
=== Chapter 2 ===<br />
<br />
* Figure 2.9 (left): bold segment of the line should not extend beyond the closing parenthesis at b.<br />
<br />
=== Chapter 5 ===<br />
<br />
* Chapter 5.3, Case V: For maximum clarity, the title should be "Case V: Six Revolute Joint Axes Intersecting a Common Line." Similarly, fifth bullet of Chapter 5.5: item (v) on the list should say "six revolute joint axes intersecting..." instead of just "six revolute joints intersecting..."<br />
<br />
=== Chapter 6 ===<br />
<br />
* (printed version only) Chapter 6.2.2, Example 6.1: just before the matrix <math>T_{sd}</math>, "corresponds to to" should be "corresponds to." '''<br />
* (printed version only) Chapter 6.3, first sentence after Equation (6.7): "however small" should be written "however, small" to avoid ambiguity.<br />
<br />
=== Chapter 11 ===<br />
<br />
* (online version only) Chapter 11.3.3: The sentence containing Equation (11.18) is missing a period at the end.<br />
<br />
== A partial list of errata contributors ==<br />
<br />
Thanks to the following people who provided corrections, starting from the preliminary version of the book posted in October, 2016:<br />
<br />
H. Andy Nam, Eric Lee, Yuchen Rao, Chainatee Tanakulrongson, Mengjiao Hong, Kevin Cheng, Jens Lundell, Elton Cheng, Michael Young, Jarvis Schultz, Logan Springgate, Sofya Akhmametyeva, Aykut Onol, Josh Holcomb, Yue Chen, Mark Shi, AJ Ibraheem, Yalun Wen, Seongjae Jeong, Josh Mehling, Felix Wang, Drew Warren, Chris Miller, Clemens Eppner, Zack Woodruff, Jian Shi, Jixiang Zhang, Shachar Liberman, Will Wu, Dirk Boysen, Awe Wang, Ville Kyrki, John Troll, Andrew Taylor, Nikhil Bakshi, Yunzhe Pan, Barrett Ames, Marcel Bonnici, Mahdiar Edraki, Jay Li, Jose Capco, Chen Wang<br />
<br />
<!--<br />
Lu Xu in email of Sept 9, 2020, suggests giving the identity<br />
[w1×w2] = [w1][w2] - [w2][w1]<br />
for use in the derivation of Eq (8.23) between lines 3 and 4.<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Modern_Robotics_ErrataModern Robotics Errata2020-10-12T17:10:05Z<p>Lynch: /* Chapter 5 */</p>
<hr />
<div>The errata below are for the [[Modern_Robotics|'''updated first edition of ''Modern Robotics'' ''']] (as well as the practice exercises and linear algebra refresher appendix). The updated first edition (also called "version 2") was originally published by Cambridge University Press in late 2019 (marked "3rd printing 2019" or later) and the corresponding online preprint is dated December 2019. The updated first edition includes several corrections and minor additions to the original first edition, which was originally published by Cambridge in May 2017, with a corresponding online preprint dated May 2017. <br />
<br />
'''[[Modern Robotics Errata, First Edition Version 1|The errata for the original first edition can be found here]].'''<br />
<br />
[https://docs.google.com/forms/d/1iZ_3LsWR1iuPJmRsUQsa2ehZj6p-qKQfx8NRKaTlIuE/edit '''Please click here to report any corrections for the updated first edition of the book, the practice exercises, or the linear algebra refresher appendix.''']<br />
<br />
== Updated first edition: Significant corrections ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Chapter 3 ===<br />
<br />
* (printed version only) At the end of the introduction Exercise 3.16, it says "origin of {b} is at (0,2,0) is {s}" but "is {s}" should be "in {s}".<br />
* Exercise 3.20, Figure 3.26: In the figure, the y and z axes for the {a}, {b}, and {c} frames are switched (y should point forward and z should point up). Also, the space frame is located at the bottom of the small wheel, directly below the {a} frame.<br />
* (printed version only) Exercise 3.25(a): the element in the third row and third column of the matrix <math>A</math> should be 0 (it is incorrectly written as 1).'''<br />
<br />
=== Chapter 4 ===<br />
<br />
* Exercise 4.21: The question should begin "For each <math>T</math> below..." (instead of "For each <math>T \in SE(3)</math> below...") since the first part of the problem is determining whether <math>T</math> is indeed an element of <math>SE(3)</math>.<br />
<br />
=== Chapter 8 ===<br />
<br />
* (printed version only) Equation (8.74): the first two plus signs should be minus signs.<br />
<br />
=== Chapter 10 ===<br />
<br />
* Second displayed equation of Chapter 10.6.3 (Workspace Potential): As it is written, this equation (which involves a partial derivative with respect to the robot's configuration <math>q</math>) already gives the repulsive generalized force <math>F_{ij}(q)</math>, i.e., the Jacobian is already embedded, obviating the subsequent development. To fit the rest of the development, the partial derivative in this equation should be with respect to <math>f_i(q)</math>. So the equation should read<br />
<math><br />
F^\prime_{ij}(q) = -\frac{\partial P^\prime_{ij}}{\partial f_i(q)} = \frac{k}{\|f_i(q) - c_j\|^4} (f_i(q) - c_j) \in \mathbb{R}^3.<br />
</math><br />
<br />
<br />
=== Chapter 11 ===<br />
<br />
* Chapter 11.5, Equations (11.52) and (11.53) (and nearby text): The term <math>K_{fp}</math> in Equations (11.52) and (11.53) should be <math>(K_{fp}+I)</math>, where <math>I</math> is the identity matrix. In the text immediately after Equation (11.51), the term "positive-definite" should be eliminated. In the text immediately after Equation (11.53), <math>K_{fp}</math> should be replaced by <math>(K_{fp}+I)</math>.<br />
<br />
== Updated first edition: Minor typos, etc., no danger of misunderstanding ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Throughout the book ===<br />
<br />
* The V-REP simulator has been discontinued and replaced by the [https://www.coppeliarobotics.com/ CoppeliaSim] simulator. This does not change anything in the book (or the simulation scenes provided to accompany the book).<br />
<br />
=== Chapter 2 ===<br />
<br />
* Figure 2.9 (left): bold segment of the line should not extend beyond the closing parenthesis at b.<br />
<br />
=== Chapter 5 ===<br />
<br />
* Chapter 5.3, Case V: For maximum clarity, the title should be "Case V: Six Revolute Joint Axes Intersecting a Common Line". Similarly, fifth bullet of Chapter 5.5: item (v) on the list should say "six revolute joint axes intersecting..." instead of just "six revolute joints intersecting..."<br />
<br />
=== Chapter 6 ===<br />
<br />
* (printed version only) Chapter 6.2.2, Example 6.1: just before the matrix <math>T_{sd}</math>, "corresponds to to" should be "corresponds to." '''<br />
* (printed version only) Chapter 6.3, first sentence after Equation (6.7): "however small" should be written "however, small" to avoid ambiguity.<br />
<br />
=== Chapter 11 ===<br />
<br />
* (online version only) Chapter 11.3.3: The sentence containing Equation (11.18) is missing a period at the end.<br />
<br />
== A partial list of errata contributors ==<br />
<br />
Thanks to the following people who provided corrections, starting from the preliminary version of the book posted in October, 2016:<br />
<br />
H. Andy Nam, Eric Lee, Yuchen Rao, Chainatee Tanakulrongson, Mengjiao Hong, Kevin Cheng, Jens Lundell, Elton Cheng, Michael Young, Jarvis Schultz, Logan Springgate, Sofya Akhmametyeva, Aykut Onol, Josh Holcomb, Yue Chen, Mark Shi, AJ Ibraheem, Yalun Wen, Seongjae Jeong, Josh Mehling, Felix Wang, Drew Warren, Chris Miller, Clemens Eppner, Zack Woodruff, Jian Shi, Jixiang Zhang, Shachar Liberman, Will Wu, Dirk Boysen, Awe Wang, Ville Kyrki, John Troll, Andrew Taylor, Nikhil Bakshi, Yunzhe Pan, Barrett Ames, Marcel Bonnici, Mahdiar Edraki, Jay Li, Jose Capco, Chen Wang<br />
<br />
<!--<br />
Lu Xu in email of Sept 9, 2020, suggests giving the identity<br />
[w1×w2] = [w1][w2] - [w2][w1]<br />
for use in the derivation of Eq (8.23) between lines 3 and 4.<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/Modern_Robotics_ErrataModern Robotics Errata2020-10-12T17:05:52Z<p>Lynch: /* Updated first edition: Minor typos, etc., no danger of misunderstanding (Errata for original first edition here) */</p>
<hr />
<div>The errata below are for the [[Modern_Robotics|'''updated first edition of ''Modern Robotics'' ''']] (as well as the practice exercises and linear algebra refresher appendix). The updated first edition (also called "version 2") was originally published by Cambridge University Press in late 2019 (marked "3rd printing 2019" or later) and the corresponding online preprint is dated December 2019. The updated first edition includes several corrections and minor additions to the original first edition, which was originally published by Cambridge in May 2017, with a corresponding online preprint dated May 2017. <br />
<br />
'''[[Modern Robotics Errata, First Edition Version 1|The errata for the original first edition can be found here]].'''<br />
<br />
[https://docs.google.com/forms/d/1iZ_3LsWR1iuPJmRsUQsa2ehZj6p-qKQfx8NRKaTlIuE/edit '''Please click here to report any corrections for the updated first edition of the book, the practice exercises, or the linear algebra refresher appendix.''']<br />
<br />
== Updated first edition: Significant corrections ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Chapter 3 ===<br />
<br />
* (printed version only) At the end of the introduction Exercise 3.16, it says "origin of {b} is at (0,2,0) is {s}" but "is {s}" should be "in {s}".<br />
* Exercise 3.20, Figure 3.26: In the figure, the y and z axes for the {a}, {b}, and {c} frames are switched (y should point forward and z should point up). Also, the space frame is located at the bottom of the small wheel, directly below the {a} frame.<br />
* (printed version only) Exercise 3.25(a): the element in the third row and third column of the matrix <math>A</math> should be 0 (it is incorrectly written as 1).'''<br />
<br />
=== Chapter 4 ===<br />
<br />
* Exercise 4.21: The question should begin "For each <math>T</math> below..." (instead of "For each <math>T \in SE(3)</math> below...") since the first part of the problem is determining whether <math>T</math> is indeed an element of <math>SE(3)</math>.<br />
<br />
=== Chapter 8 ===<br />
<br />
* (printed version only) Equation (8.74): the first two plus signs should be minus signs.<br />
<br />
=== Chapter 10 ===<br />
<br />
* Second displayed equation of Chapter 10.6.3 (Workspace Potential): As it is written, this equation (which involves a partial derivative with respect to the robot's configuration <math>q</math>) already gives the repulsive generalized force <math>F_{ij}(q)</math>, i.e., the Jacobian is already embedded, obviating the subsequent development. To fit the rest of the development, the partial derivative in this equation should be with respect to <math>f_i(q)</math>. So the equation should read<br />
<math><br />
F^\prime_{ij}(q) = -\frac{\partial P^\prime_{ij}}{\partial f_i(q)} = \frac{k}{\|f_i(q) - c_j\|^4} (f_i(q) - c_j) \in \mathbb{R}^3.<br />
</math><br />
<br />
<br />
=== Chapter 11 ===<br />
<br />
* Chapter 11.5, Equations (11.52) and (11.53) (and nearby text): The term <math>K_{fp}</math> in Equations (11.52) and (11.53) should be <math>(K_{fp}+I)</math>, where <math>I</math> is the identity matrix. In the text immediately after Equation (11.51), the term "positive-definite" should be eliminated. In the text immediately after Equation (11.53), <math>K_{fp}</math> should be replaced by <math>(K_{fp}+I)</math>.<br />
<br />
== Updated first edition: Minor typos, etc., no danger of misunderstanding ([[Modern Robotics Errata, First Edition Version 1|Errata for original first edition here]]) ==<br />
<br />
=== Throughout the book ===<br />
<br />
* The V-REP simulator has been discontinued and replaced by the [https://www.coppeliarobotics.com/ CoppeliaSim] simulator. This does not change anything in the book (or the simulation scenes provided to accompany the book).<br />
<br />
=== Chapter 2 ===<br />
<br />
* Figure 2.9 (left): bold segment of the line should not extend beyond the closing parenthesis at b.<br />
<br />
=== Chapter 5 ===<br />
<br />
* Chapter 5.5, fifth bullet: item (v) on the list should say "six revolute joint axes intersecting..." instead of just "six revolute joints intersecting..." for maximum clarity.<br />
<br />
=== Chapter 6 ===<br />
<br />
* (printed version only) Chapter 6.2.2, Example 6.1: just before the matrix <math>T_{sd}</math>, "corresponds to to" should be "corresponds to." '''<br />
* (printed version only) Chapter 6.3, first sentence after Equation (6.7): "however small" should be written "however, small" to avoid ambiguity.<br />
<br />
=== Chapter 11 ===<br />
<br />
* (online version only) Chapter 11.3.3: The sentence containing Equation (11.18) is missing a period at the end.<br />
<br />
== A partial list of errata contributors ==<br />
<br />
Thanks to the following people who provided corrections, starting from the preliminary version of the book posted in October, 2016:<br />
<br />
H. Andy Nam, Eric Lee, Yuchen Rao, Chainatee Tanakulrongson, Mengjiao Hong, Kevin Cheng, Jens Lundell, Elton Cheng, Michael Young, Jarvis Schultz, Logan Springgate, Sofya Akhmametyeva, Aykut Onol, Josh Holcomb, Yue Chen, Mark Shi, AJ Ibraheem, Yalun Wen, Seongjae Jeong, Josh Mehling, Felix Wang, Drew Warren, Chris Miller, Clemens Eppner, Zack Woodruff, Jian Shi, Jixiang Zhang, Shachar Liberman, Will Wu, Dirk Boysen, Awe Wang, Ville Kyrki, John Troll, Andrew Taylor, Nikhil Bakshi, Yunzhe Pan, Barrett Ames, Marcel Bonnici, Mahdiar Edraki, Jay Li, Jose Capco, Chen Wang<br />
<br />
<!--<br />
Lu Xu in email of Sept 9, 2020, suggests giving the identity<br />
[w1×w2] = [w1][w2] - [w2][w1]<br />
for use in the derivation of Eq (8.23) between lines 3 and 4.<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-08T16:24:57Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from projects outside of Coursera, including the student-generated exercise and the capstone project.<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
'''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.<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T16:46:35Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In Chapter 4, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (You will likely want to calculate the rotation matrices <math>R_{i,i+1}</math> and use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' using the information given, and verify that your joint angle vector <math>\theta</math> is correct by entering the joint angles into the scene and comparing your ''R<sub>sb</sub>'' to the rotation matrix portion of the ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. Explain what you changed about the scene/UI. (A small change suffices.)<br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T16:46:12Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In Chapter 4, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (You will likely want to calculate the rotation matrices <math>R_{i,i+1}</math> and use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' using the information given, and verify that your joint angle vector <math>\theta</math> is correct by entering the joint angles into the scene and comparing your ''R<sub>sb</sub>'' to the rotation matrix portion of the ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. Explain what you changed about the scene/UI.<br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T16:43:04Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In Chapter 4, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (You will likely want to calculate the rotation matrices <math>R_{i,i+1}</math> and use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' using the information given, and verify that your joint angle vector <math>\theta</math> is correct by entering the joint angles into the scene and comparing your ''R<sub>sb</sub>'' to the rotation matrix portion of the ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-01T16:42:33Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from projects outside of Coursera, including the student-generated exercise and the capstone project.<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
'''[http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1]''', due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-01T16:42:15Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from projects outside of Coursera, including the student-generated exercise and the capstone project.<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
* '''Upload on time! Late submissions are not accepted.''' <br />
* 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.<br />
* 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).<br />
<br />
# [http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1], due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-01T16:41:49Z<p>Lynch: /* Assignments */</p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from projects outside of Coursera, including the student-generated exercise and the capstone project.<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
# '''Upload on time! Late submissions are not accepted.''' <br />
# 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.<br />
# 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).<br />
<br />
* [http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1], due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Robotic_ManipulationME 449 Robotic Manipulation2020-10-01T16:41:30Z<p>Lynch: </p>
<hr />
<div>'''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. <br />
<br />
'''Fall Quarter 2020'''<br />
<br />
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.<br />
<br />
'''Important Information'''<br />
<br />
* All class sessions will be recorded and available in Canvas afterward. (The two sessions were combined into one in Canvas on Sept 16.)<br />
* 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.<br />
* 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. <br />
* 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.'''<br />
* 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!)<br />
* 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.<br />
* 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.<br />
* 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 http://bit.ly/sendmirror]. You can learn more at [http://tinyurl.com/mydoccam2 http://tinyurl.com/mydoccam2].<br />
<br />
'''Getting Started'''<br />
<br />
Do the following things as soon as possible: <br />
<br />
* [[Modern Robotics#Book|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.)<br />
* [[Getting Started with the Modern Robotics Code Library|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.<br />
* [[Getting Started with the CoppeliaSim Simulator|Download, install, and test the CoppeliaSim robot simulation software.]]<br />
<br />
'''Supportive Class Environment'''<br />
<br />
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. <br />
<br />
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)<br />
<br />
'''Honor Code'''<br />
<br />
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.'''<br />
<br />
'''Class Info'''<br />
<br />
* Instructor: Prof. Kevin Lynch<br />
* TAs: Tito Fernandez, Baris Kucuktabak, and Lin Liu <br />
* Meeting: 3:00-3:50 PM, MWF, Tech LR2 <br />
* Office hours: 9 AM CDT Tuesday (Lynch), 7:30 PM CDT Wednesday (TAs)<br />
* Course website: [http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation http://hades.mech.northwestern.edu/index.php/ME_449_Robotic_Manipulation]<br />
* Book website: [http://modernrobotics.org http://modernrobotics.org]<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
==Course Summary==<br />
<br />
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.<br />
<br />
==Prerequisites==<br />
<br />
Linear algebra, first-order linear ODEs, freshman-level physics/mechanics, a bit of programming background.<br />
<br />
==Grading==<br />
<!--<br />
* 50% quizzes (quizzes will be open book, open notes, any cheat sheets you would like, but no electronics)<br />
* 20% assignments (lowest grade will be dropped)<br />
* 15% final project (due Wed Dec 11, during finals week)<br />
* 10% practice exercise for other students<br />
* 5% engagement: introducing yourself during office hours, answering questions in class, participation in in-class exercises, helping other students in class, participation in Coursera forums<br />
--><br />
<br />
50% of your final grade will be from your Coursera grades (which I expect to be near perfect) and 50% from projects outside of Coursera, including the student-generated exercise and the capstone project.<br />
<br />
==Course Text and Software==<br />
<br />
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 '''[http://hades.mech.northwestern.edu/index.php/Modern_Robotics_Errata report it here].'''<br />
<br />
[[Coursera_Resources#Things_you_should_complete_before_taking_any_course|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.<br />
<br />
'''[[Modern Robotics Linear Algebra Review|Here is a linear algebra refresher appendix to accompany the book.]]'''<br />
<br />
==Approximate Syllabus and Schedule==<br />
<br />
Here is a summary of the structure of the course:<br />
* 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.)<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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.<br />
* 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. <br />
<br />
Below is the approximate syllabus and schedule. Next to each date is the Coursera material that should have been covered '''before''' that class.<br />
<br />
'''Chapter 2, Configuration Space'''<br />
* Fri Sept 18: through Chapter 2.2 (dof of a robot)<br />
* Mon Sept 21: through Chapter 2.3 (c-space topology and representation)<br />
* Wed Sept 23: finish Chapter 2 (task space and workspace)<br />
'''Chapter 3, Rigid-Body Motions''' <br />
* Fri Sept 25: through Chapter 3.2.1 (rotation matrices SO(3))<br />
* Mon Sept 28: finish Chapter 3.2 (angular velocities, so(3), exponential coordinates)<br />
* Wed Sept 30: through Chapter 3.3.2 (transform matrices SE(3) and twists)<br />
* Fri Oct 2: finish Chapter 3 (se(3), exponential coordinates, wrenches)<br />
'''Chapter 4, Forward Kinematics (skip section 4.2 on URDF)'''<br />
* Mon Oct 5: finish Chapter 4 (product of exponentials formula, space and e-e frame)<br />
'''Chapter 5, Velocity Kinematics and Statics'''<br />
* Wed Oct 7: through Chapter 5.1 (space Jacobian, body Jacobian)<br />
* Fri Oct 9: through Chapter 5.2 (statics of open chains)<br />
* Mon Oct 12: through Chapter 5.4 (singularity analysis, manipulability)<br />
'''Chapter 6, Inverse Kinematics (focus on section 6.2)'''<br />
* Wed Oct 14: Chapter 6 (numerical inverse kinematics)<br />
* Fri Oct 16: catch up<br />
'''Chapter 8, Dynamics of Open Chains (skip sections 8.4, 8.7, 8.8, and 8.9)'''<br />
* Mon Oct 19: through Chapter 8.1.2 (Lagrangian dynamics)<br />
* Wed Oct 21: Chapter 8.1.3 (understanding the mass matrix)<br />
* Fri Oct 23: Chapter 8.2 (dynamics of a single rigid body)<br />
* Mon Oct 26: Chapter 8.3 and 8.5 (Newton-Euler inverse dynamics, forward dynamics)<br />
'''Chapter 9, Trajectory Generation'''<br />
* Wed Oct 28: through Chapter 9.3 (point-to-point trajectories, polynomial via point trajectories)<br />
* Fri Oct 30: Chapter 9.4 (time-optimal time scaling)<br />
* Mon Nov 2: catch up, final project<br />
* Wed Nov 4:<br />
'''Chapter 11, Robot Control (focus on sections 11.1 through 11.4)'''<br />
* Fri Nov 6: up to (not including) Chapter 11.2.2.1 (linear error dynamics)<br />
* Mon Nov 9: finish Chapter 11.2.2 (first- and second-order error dynamics)<br />
* Wed Nov 11: through Chapter 11.3 (motion control with velocity inputs)<br />
* Fri Nov 13: Chapter 11.4 (motion control with torque or force inputs)<br />
'''Chapter 13, Wheeled Mobile Robots (skip section 13.3)'''<br />
* Mon Nov 16: through Chapter 13.2 (omnidirectional wheeled mobile robots)<br />
* Wed Nov 18: Chapter 13.4 (odometry)<br />
* Fri Nov 20: Chapter 13.5 (mobile manipulation)<br />
* Mon Nov 23:<br />
* Wed Nov 25:<br />
* Mon Nov 30: wrap-up<br />
* Mon Dec 7: Capstone project due<br />
<br />
==Video Lectures and the Flipped Classroom==<br />
<br />
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 '''http://modernrobotics.northwestern.edu'''] or using [[Modern_Robotics_Videos|'''direct links to the videos on YouTube''']]. <br />
<!--<br />
You should sign up to audit the following courses on Coursera in advance of our study of them in class. Don't pay; you should start by choosing the 7-day free trial, but then click "audit the course." Auditing the course gives you access to everything except graded assignments and peer-reviewed projects.<br />
<br />
* [https://www.coursera.org/learn/modernrobotics-course1 Course 1: Foundations of Robot Motion (Chapters 2 and 3)]<br />
* [https://www.coursera.org/learn/modernrobotics-course2 Course 2: Robot Kinematics (Chapters 4, 5, 6, and 7)]<br />
* [https://www.coursera.org/learn/modernrobotics-course3 Course 3: Robot Dynamics (Chapters 8 and 9)]<br />
* [https://www.coursera.org/learn/modernrobotics-course4 Course 4: Robot Motion Planning and Control (Chapters 10 and 11)]<br />
* [https://www.coursera.org/learn/modernrobotics-course5 Course 5: Robot Manipulation and Wheeled Mobile Robots (Chapters 12 and 13)]<br />
* [https://www.coursera.org/learn/modernrobotics-course6 Course 6: Capstone Project, Mobile Manipulation]<br />
<br />
'''[[Coursera Resources|This page collects together useful supplemental material to the Coursera courses]]'''.<br />
--><br />
<br />
The general flow of the class will be the following: <br />
<br />
* 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. <br />
<br />
* '''[https://docs.google.com/forms/d/e/1FAIpQLSej7E9AaYomOEi5ToiNVum-_H7XdaJZ95Va__AIBPnB0xXZyg/viewform?usp=sf_link Click here to enter any questions you have on the lectures or reading that you would like to discuss in class.]'''<br />
<br />
* In class, I will usually briefly review lecture comprehension quizzes, work an example problem, take questions, and be available as you work on assignments.<br />
<br />
<!-- On days before a quiz, I will spend as much time reviewing the material covered by the quiz as you would like. --><br />
<br />
==Practice Exercises==<br />
[[Modern_Robotics#Useful_Supplemental_Documents|Sample exercises and their solutions, useful for practicing your understanding of the material.]]<br />
<br />
== Practice Quizzes ==<br />
<br />
* [[Media:ME449-quiz1-2018.pdf|Quiz 1, 2018]]<br />
* Quiz 2, 2018: Exercises 4.2, 5.3, 6.1, 8.6, and 8.7 from [[Modern_Robotics#Useful_Supplemental_Documents|the practice exercises document]].<br />
<br />
==Student-Created Exercises==<br />
<br />
<!-- [https://docs.google.com/spreadsheets/d/1cIX4_U8lkWAL6LqQBgDrE5WX1TAmJaD6-ykG7GNACkI/edit?usp=sharing '''Click here for student exercise assignments.'''] <br />
<br />
'''Bring two printed copies to class Monday Nov 18, for feedback. Turn in the final version online on Wednesday Nov 20 at 1:30 PM, as two files: FamilyName_GivenName.pdf, with the pdf of the exercise and its solution, and FamilyName_GivenName.zip, with all the source files for your exercise taken from Overleaf. Also bring a printout to class on Wed Nov 20. If it is more than one page, staple it.'''<br />
--><br />
<br />
All students will be responsible for creating a practice exercise, consisting of the exercise and the solution. A good exercise should test an important concept in the context of a real robotics application (e.g., motion planning for a quadrotor, robot localization, computer vision, grasping, etc.), require the learner to understand and apply equations in the book or use the book's software, and require a bit of thought (i.e., not just "plug and chug" questions). For many exercises, a good figure or two is helpful. You could use a figure of a real robot and add your own annotations to it (e.g., frames or objects in its environment), or you could hand-draw something, or you could use CoppeliaSim or other software to help create the figure. You should not confine your question to an application discussed in the textbook. Make your exercise interesting and motivating! Exercises that require synthesizing two or more concepts or equations are more interesting and useful. Think about what kind of exercise would have helped you to really understand the material. Your questions should be very clearly worded, so anyone can understand it without you having to be there to interpret it for them.<br />
<br />
You should look at the practice exercise document and end-of-chapter exercises for inspiration, but obviously your exercises should not be copies.<br />
<br />
You will create your exercise using [https://en.wikipedia.org/wiki/LaTeX LaTeX] (pronounced "lay teck" or "lah teck"), the standard for scientific document preparation. [https://www.overleaf.com/ Overleaf] is a free online implementation of LaTeX. To get started on your exercise,<br />
<br />
# Download [[Media:ME449-exercise.zip|'''this .zip file''']] and uncompress it. There are five files: main.tex, prelims.tex, twist-wrench.pdf, table-lamp.PNG, and LampSolution.PNG.<br />
# Create an account on [https://www.overleaf.com/ Overleaf].<br />
# Create a new (blank) project on Overleaf called "exercise."<br />
# Upload the five files to this project. (You may get a warning that your default main.tex file is being overwritten; don't worry about it.)<br />
# Click on main.tex to see your main LaTeX document.<br />
# Press the "Recompile" button to see the pdf document that is compiled from the five files. You can download the pdf file, or all the "source" files, by clicking on "Menu" and choosing which to download. '''[[Media:ME449-exercise-output.pdf|This is the .pdf file you should have created.]]'''<br />
<br />
main.tex is the main file of the project, and the only one that you will edit, so you should understand what is going on in that file. prelims.tex tells LaTeX what packages to use and defines some macros, e.g., \twist creates <math>\mathcal{V}</math> and \wrench creates <math>\mathcal{F}</math>. The other three files are image files that get included in the document. You will create different image files depending on your exercise. For example, you can make a nice hand drawing and then scan it.<br />
<br />
To learn more about typesetting in LaTeX, google is your friend! Try googling "latex math" or "latex math symbols," for example.<br />
<br />
You will turn in the source for your exercise as a zip file, as well as the final pdf file.<br />
<br />
<!--<br />
The final student assignments to topics is given below:<br />
<br />
[[File:StudentExercises2019.jpg|x400px]]<br />
--><br />
<br />
==Assignments==<br />
<br />
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.<br />
<br />
'''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.'''<br />
<br />
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.<br />
<br />
'''Instructions for uploading assignments to Canvas:'''<br />
<br />
# '''Upload on time! Late submissions are not accepted.''' <br />
<br />
# 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.<br />
<br />
# 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).<br />
<br />
* [http://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1 Assignment 1], due 1 PM CDT Thursday October 8 on Canvas.<br />
<br />
<!--<br />
* '''Assignment 1, due 30 minutes before class on Canvas, Wed Oct 9.''' Exercises 2.1, 2.4, 2.5, 2.9(c) (mechanism (c) from Fig 2.18), 2.20, 2.31, 3.1, and 3.5.<br />
* '''Assignment 2, due 30 minutes before class on Canvas, Wed Oct 16.''' Exercises 3.16, 3.26, 3.31, 4.2, 4.5, and 4.6.<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 23.''' Exercises 5.3(a,c,d,e) and 5.26.<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 30.''' [[Media:ME449-asst4-2019.pdf|The programming assignment described here]].<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 6.''' [[Media:ME449-asst5-2019.pdf|This assignment]] makes use of (approximate) [[Modern_Robotics#Supplemental_Information|dynamic parameters for the UR5 robot, given in MATLAB, Mathematica, and Python form]].<br />
<br />
* '''Assignment 3, due 30 minutes before class on Canvas, Wed Oct 24.''' Exercises 4.2, 4.5, 4.14, 5.7, and 5.11(a).<br />
* '''Assignment 4, due 30 minutes before class on Canvas, Wed Oct 31.''' Exercises 5.2, 5.25, 6.7, 6.8, and [[Media:IKexercise.pdf|this programming project]]. You should submit a zip file containing your answers to the four exercises plus the directory structure described in the programming project.<br />
* '''Assignment 5, due 30 minutes before class on Canvas, Wed Nov 7.''' Book exercises 8.2 and 8.3, and [[Media:ME449-practice-81.pdf|practice exercise 8.1]].<br />
* '''Assignment 6, due 30 minutes before class on Canvas, Wed Nov 14.''' Book exercise 8.14 (turn in your code), book exercise 8.15 (make a video of the motion using V-REP), and practice exercise 9.1(a), trajectory planning for the WAM robot. For each trajectory in 9.1(a), plot the (x,y,z) components of the trajectory and the three exponential coordinates of rotation of the trajectory (each taken from the transformation matrices) as a function of time. Make sure your plots are labeled so we can tell which curve is which.<br />
* [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''CAPSTONE PROJECT''']. We will do milestone 2 first, then 1, 3, 4 to complete it.<br />
--><br />
<br />
==Final Project: Mobile Manipulation==<br />
<br />
The final project, described [http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone '''on this page'''], is due on Canvas on Monday December 7. Reminders:<br />
# 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.<br />
# 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.<br />
# 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, it is best to 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.<br />
# 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.)<br />
# 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.<br />
# If your code is written in Python, indicate which version of Python should be used.<br />
# If you submit your code as part of the MR library, make it easy for the grader to find your code (e.g., collect it all in one place and indicate in the code or your README where to find it).<br />
<br />
<!--<br />
==Quizzes==<br />
* [[Media:ME449-quiz1-solutions-2019.pdf|Quiz 1 Solutions]] (average score 22.4/27)<br />
* [[Media:ME449-quiz2-solutions-2019.pdf|Quiz 2 Solutions]] (average score 31.2/35)<br />
<br />
==Detailed Syllabus==<br />
[https://docs.google.com/spreadsheets/d/1UrBFai-1Z98Ry48bW50OMqxvvqZ3Jo8pHgZmljOgPpo/edit?usp=sharing '''The course calendar'''], including video lecture and reading assignments due before each class.<br />
<br />
[https://docs.google.com/spreadsheets/d/1jWd_POLlQYxQLv1Igv-eVmORdtEcLi0mU_rVLkNguYI/edit?usp=sharing '''Click here for a graphical view of the class schedule, including student lectures.''']<br />
<br />
Homeworks are due at the beginning of class every Wednesday, unless otherwise noted. You will watch the videos and do the reading in advance of class using the material, as noted in the syllabus below. A typical weekly schedule will consist of: <br />
: M: Video/reading comprehension quick quiz and help with homework. <br />
: W: Video/reading comprehension quick quiz, homework solutions, plus '''EITHER''' student lecture '''OR''' quiz preparation. <br />
: F: Video/reading comprehension quick quiz plus '''EITHER''' student lecture '''OR''' quiz.<br />
<br />
'''Class 1''' (W 9/20)<br />
: Welcome to the course and course website. Structure of the course (HW due Wed, student-generated lectures and learning materials, in-class assignments, feedback on student lectures, occasional Friday quizzes). Book, software, (lack of) D-H parameters, syllabus, V-REP simulator, office hours.<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 2, through Chapter 2.2<br />
: Reading: Chapters 2.1 and 2.2<br />
: Software: download github software with book, install V-REP and verify that you can use Scenes 1 and 2 (the UR5)<br />
: '''HW1, due 1:30 PM 9/27''': Exercises 2.3, 2.9, 2.20, 2.29. Also, create your own example system with closed loops, something not in the book, and solve for the degrees of freedom using Grubler's formula. Make it something that exists or occurs in common experience, not necessarily a robot. Imagine using it to teach someone about Grubler's formula.<br />
<br />
'''Class 2''' (F 9/22)<br />
: Quick quiz<br />
: Sample student lecture<br />
<br />
At home:<br />
: Videos: 2 videos on Chapter 2.3<br />
: Reading: Chapter 2.3<br />
<br />
'''Class 3''' (M 9/25)<br />
: Quick quiz<br />
: Bring your laptop, demo V-REP UR5 scenes<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: 2 videos, Chapter 2.4 and 2.5<br />
: Reading: Chapters 2.4 and 2.5<br />
: Turn in HW1<br />
<br />
'''Class 4''' (W 9/27)<br />
: Quick quiz<br />
: Solutions to HW1; student examples of Grubler's formula<br />
<br />
At home:<br />
: Videos: first 3 videos of Chapter 3, through Chapter 3.2.1<br />
: Reading: through Chapter 3.2.1<br />
: '''HW2, due 1:30 PM 10/4''':<br />
:: 1) Exercise 3.1, except the y_a axis points in the direction (1,0,0).<br />
:: 2) Exercise 3.2, except p = (1,2,3).<br />
:: 3) Exercise 3.5.<br />
:: 4) Exercise 3.9. <br />
:: 5) In Figure 1.1(a) of the book is an image of a UR5 robot, with a frame at its base and a frame at its end-effector. Eyeballing the end-effector frame, approximately write the rotation matrix that represents the end-effector frame orientation relative to the base frame. Your rotation matrix should satisfy the properties of a rotation matrix (R^T R = I, det(R) = 1). The x-axes are in red, the y-axes are in green, and the z-axes are in blue.<br />
:: 6) Write a program that takes a set of exponential coordinates for rotation from the user as input. It then prints out the following: (a) the corresponding unit rotation axis and the angle of rotation about that axis; (b) the so(3) 3x3 matrix representation of the exponential coordinates; (c) the 3x3 SO(3) rotation matrix corresponding to the exponential coordinates; (d) the inverse of the rotation matrix from (c); (e) the 3x3 so(3) matrix log of the matrix from (d); and (f) the corresponding exponential coordinates for the so(3) matrix (e). Use the code from the book and write your program in Mathematica, MATLAB, or Python. Turn in your code and the output of an example run using (0.5, 1, 0) as the input to part (a).<br />
:: 7) Write a function that returns "true" if a given 3x3 matrix is with a distance epsilon of being a rotation matrix and "false" otherwise. It is up to you to define the "distance" between a random 3x3 real matrix and members of SO(3). Test the function on two matrices, neither of which is exactly in SO(3), but one of which is close (so the result is "true") and one of which is not. Turn in your code and provide the test run output, which also outputs the distance to SO(3) that you defined.<br />
:: 8) Following up on the previous exercise: describe (don't implement, unless you want to) a function that takes a "close by" 3x3 matrix and returns the closest rotation matrix. How would you use the fact that R^T R - I must be equal to zero to modify the initial 3x3 matrix to make it a "close by" rotation matrix? Would the function be iterative? You are free to do some research online, but as always, '''cite your sources'''!<br />
<br />
'''Class 5''' (F 9/29)<br />
: Quick quiz<br />
: Lecture<br />
<br />
At home:<br />
: Videos: videos 4-6 of Chapter 3, through Chapter 3.2.3<br />
: Reading: through Chapter 3.2.3<br />
<br />
'''Class 6''' (M 10/2)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 7-9 of Chapter 3, Chapters 3.3.1 and 3.3.2<br />
: Reading: same sections<br />
<br />
'''Class 7''' (W 10/4)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 10-11, Chapter 3.3.3 and 3.4<br />
: Reading: same sections<br />
: '''HW3, due 1:30 PM 10/11''': Exercises 3.16, 3.17, 3.27, 3.31, and 3.48 (as always, for programming assignments, turn in your code and sample output demonstrating it).<br />
<br />
'''Class 8''' (F 10/6)<br />
: EXAM 1<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 4, through Chapter 4.1.2<br />
: Reading: same sections<br />
<br />
'''Class 9''' (M 10/9)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 2-3 of Chapter 4, Chapter 4.1.3<br />
: Reading: same sections<br />
<br />
'''Class 10''' (W 10/11)<br />
: Quick quiz<br />
: Student lecture 1 (Pawar, Subramanian, Goyal, Cai)<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 5, up to (not including) Chapter 5.1<br />
: Reading: same sections<br />
: '''HW4, due 1:30 PM 10/18''': Exercises 4.2, 4.8, 4.14, and 5.7(a). Question 5: In Chapter 3.5 (Summary), there is a list of analogies between rotations and rigid-body motions. Read it carefully and report anything that is either unclear or incorrect.<br />
<br />
'''Class 11''' (F 10/13)<br />
: Quick quiz<br />
: Student lecture 2 (Wang, Wu, Xia, Zheng)<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 5, Chapter 5.1.1<br />
: Reading: same sections<br />
<br />
'''Class 12''' (M 10/16)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 3 and 4 of Chapter 5, Chapter 5.1.2 through 5.2<br />
: Reading: same sections<br />
<br />
'''Class 13''' (W 10/18)<br />
: Quick quiz<br />
: Student lecture 3 (Wiznitzers, Hutson, Spies)<br />
<br />
At home:<br />
: Videos: videos 5 and 6 of Chapter 5, Chapter 5.3 and 5.4<br />
: Reading: same sections<br />
: '''HW5, due 1:30 PM 10/25''': Exercises 5.2, 5.3, 5.23, 5.25, 6.7, and 6.8.<br />
<br />
'''Class 14''' (F 10/20)<br />
: Quick quiz<br />
: Student lecture 4 (Don, Chien, Husain, Sulaiman)<br />
<br />
At home:<br />
: Videos: videos 1 and 2 of Chapter 6,<br />
: Reading: intro of Chapter 6 and Chapter 6.2<br />
<br />
'''Class 15''' (M 10/23)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 6<br />
: Reading: Chapter 6.2<br />
<br />
'''Class 16''' (W 10/25)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: video 1 of Chapter 8, through 8.1.1<br />
: Reading: same sections<br />
: [[Media:ME449-HW6-2017.pdf|HW6, due 1:30 PM 11/1]]<br />
<br />
'''Class 17 ''' (F 10/27)<br />
: EXAM 2<br />
<br />
At home:<br />
: Videos: video 2 of Chapter 8, through 8.1.2<br />
: Reading: same sections<br />
<br />
'''Class 18''' (M 10/30)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 3 of Chapter 8, through 8.1.3<br />
: Reading: same sections<br />
<br />
'''Class 19''' (W 11/1)<br />
: Quick quiz<br />
: Student lecture 5 (Zhang, Zhu, Meng, Luo)<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 8, through 8.2<br />
: Reading: same sections<br />
: '''HW7, due 1:30 PM 11/8''': Exercises 8.2, 8.3, 8.11 (you should build on the MR code), and 8.15(a).<br />
<br />
'''Class 20''' (F 11/3)<br />
: Quick quiz<br />
: Student lecture 6 (Lyu, Yi, Wang, Swissler)<br />
<br />
At home:<br />
: Videos: video 6 of Chapter 8, up to (not including) 8.4<br />
: Reading: same sections<br />
<br />
'''Class 21''' (M 11/6)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: video 7 of Chapter 8, Chapter 8.5 (skip 8.4)<br />
: Reading: same sections<br />
<br />
'''Class 22''' (W 11/8)<br />
: Quick quiz<br />
: Student lecture 7 (Warren, Kilaru, Wang, Mandana)<br />
<br />
At home:<br />
: Videos: videos 1-2 of Chapter 9, through Chapter 9.2<br />
: Reading: same sections<br />
: '''HW8, due 1:30 PM 11/15''': Exercises 8.15(b) (use your previous results from 8.15(a), and turn in any code you write as well as a V-REP movie of your simulation), 8.14 (turn in your testable code and evidence your code returns similar results), 9.14, and 9.26.<br />
<br />
'''Class 23''' (F 11/10)<br />
: Quick quiz<br />
: Student lecture 8 (Wang, Dai, Ma, Peng)<br />
<br />
At home:<br />
: Videos: video 4 of Chapter 9, Chapter 9.4 - 9.4.1 (skip 9.3)<br />
: Reading: same sections<br />
<br />
'''Class 24''' (M 11/13)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 5-6 of Chapter 9, up to (not including) Chapter 9.5<br />
: Reading: same sections<br />
<br />
'''Class 25''' (W 11/15)<br />
: Quick quiz<br />
: Exam prep<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 11, up to (not including) Chapter 11.2.2.1<br />
: Reading: same sections<br />
: '''Final project. This project is part of the assignment grade, cannot be dropped, and has the weight of 2 normal assignments.''' The assignment is split into two parts: a relatively simple Part I, due after 1 week, followed by the programming-heavy Part II, due during finals week. You will receive a single grade for the entire assignment, after Part II has been submitted.<br />
:: '''Part I, due 1:30 PM 11/22''': Exercise 13.33 (a) and (b). Turn in your solutions (handwritten or typed) and any code you wrote.<br />
:: '''Part II, due 11:59 PM 12/6''': Exercise 13.33 (c), (d), and (e). Turn in 1) any solutions (handwritten or typed), 2) your code, 3) any plots you created with your code, 4) your short V-REP videos (made using the youbot csv animation scene), and 5) the .csv files corresponding to the videos.<br />
<br />
'''Class 26''' (F 11/17)<br />
: EXAM 3<br />
<br />
At home:<br />
: Videos: videos 4-5 of Chapter 11, Chapter 11.2.2.1 and 11.2.2.2<br />
: Reading: same sections<br />
<br />
'''Class 27''' (M 11/20)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Videos: videos 6-8 of Chapter 11, Chapter 11.3<br />
: Reading: same sections<br />
: '''Turn in Part I of your final project on Canvas.'''<br />
<br />
'''Class 28''' (W 11/22)<br />
: Quick quiz<br />
: Student lecture 9 (Abiney, Aubrun, Anthony, Alston)<br />
<br />
At home:<br />
: Videos: videos 1-3 of Chapter 13, through Chapter 13.2<br />
: Reading: same sections<br />
<br />
'''Class 29''' (M 11/27)<br />
: Quick quiz<br />
: Help with HW<br />
<br />
At home:<br />
: Reading: odometry and mobile manipulation, Chapter 13.4 and 13.5<br />
<br />
'''Class 30''' (W 11/29)<br />
: Quick quiz<br />
: Student lecture 10 (Miller, Berrueta, Davis, Tobia)<br />
<br />
At home:<br />
: Final assignment work<br />
<br />
'''Class 31''' (F 12/1)<br />
: Student lecture 11 (Fernandez, Lutzen, SaLoutos, Iwankiw)<br />
<br />
At home:<br />
: '''Your final project is due on Canvas by 11:59 PM on Wednesday Dec 6.'''<br />
<br />
--><br />
<br />
<!--<br />
==Archive==<br />
<br />
* [[ME 449 Robotic Manipulation (Archive 2012)|ME 449 Spring 2012]]<br />
* [[ME 449 Robotic Manipulation (Archive Spring 2014)|ME 449 Spring 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2014)|ME 449 Fall 2014]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2015)|ME 449 Fall 2015]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2016)|ME 449 Fall 2016]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2017)|ME 449 Fall 2017]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2018)|ME 449 Fall 2018]]<br />
* [[ME 449 Robotic Manipulation (Archive Fall 2019)|ME 449 Fall 2019]]<br />
--></div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:23:51Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (You will likely want to calculate the rotation matrices <math>R_{i,i+1}</math> and use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' using the information given, and verify that your joint angle vector <math>\theta</math> is correct by entering the joint angles into the scene and comparing your ''R<sub>sb</sub>'' to the rotation matrix portion of the ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:22:46Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (You will likely want to calculate the rotation matrices <math>R_{i,i+1}</math> and use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' using the information given, and verify that your joint angle vector <math>\theta</math> is correct by entering the joint angles into the scene and comparing your ''R<sub>sb</sub>'' to the rotation matrix portion of the ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:19:06Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (Use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:17:48Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} on links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six-vector of joint angles <math>\theta</math> given the <math>R_{ij}</math> above. (Use the MR code library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:16:53Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} on links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where {b} is the end-effector frame not shown in the figure. <br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:16:00Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} on links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6. (The frame {b} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6b</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>sb</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>sb</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method (including the MR code) you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:12:59Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined: the fixed frame {s} at the base, frames {1} through {6} on links 1 through 6, and the end-effector frame {e} which is fixed relative to link 6. (The frame {e} is not shown in the image.) The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:06:06Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
Make sure your scene 1 simulation is stopped so you can open up a script. Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:04:27Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script at each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
In Scene 1, click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Make sure your simulation is stopped so you can open a script. Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:03:27Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script on each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
In Scene 1, click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Make sure your simulation is stopped so you can open a script. Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:02:17Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves. Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.<br />
<br />
A CoppeliaSim scene may include some [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script on each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
In Scene 1, click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Make sure your simulation is stopped so you can open a script. Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:00:47Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with two tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves.<br />
<br />
A CoppeliaSim scene may include some [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script on each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
In Scene 1, click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Make sure your simulation is stopped so you can open a script. Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T12:00:26Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with 2 tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves.<br />
<br />
A CoppeliaSim scene may include some [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models]. A model consists of a number of objects connected to each other. In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.<br />
<br />
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop. At each simulation step, the main script calls (a) "actuation" functions that simulate the motion of the system and (b) "sensing" functions that simulate the sensors. Generally this main script should not be edited. <br />
<br />
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded. A non-threaded script defines the "actuation" and "sensing" functions for an object or model, and these functions are invoked by the main script on each simulation step. More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].<br />
<br />
In Scene 1, click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
Make sure your simulation is stopped so you can open a script. Double-click the "Non-threaded child script (UI_Script)" to open it. You will see a script written in the Lua programming language. Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library.<br />
<br />
Scroll down to line 242. From here to the end of the file, this code examines the type of "call" to the child script by the main script and performs the appropriate functions. For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated. (There is a lot of XML code here defining the user interface.) If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated. If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.<br />
<br />
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. If you'd like, you can consult the XML syntax for the attributes each element can have. <br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T03:24:30Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with 2 tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves.<br />
<br />
Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
The main script and any child scripts will be displayed. There is a default main script that controls the simulation loop, and this main script should not be edited. At each simulation step, the main script calls (1) "actuation" functions that simulate the motion of the system and (2) "sensing" functions that simulate the sensors. <br />
<br />
Each object in the scene has an associated child script. The child script contains actuation and sensing functions for the object, written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that are called by the main script. A threaded child script creates a new computation thread, and threaded child scripts are typically discouraged relative to non-threaded scripts that are controlled by the main script. <br />
<br />
More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts]. <br />
<br />
Note that the simulation must be stopped before you can open a script.<br />
<br />
For Scene 1, we will be looking at the "Non-threaded child script (UI_Script)." Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. <br />
<br />
More information on CoppeliaSim can be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and demos to see how their functions and UIs were defined and to get a better idea of how the scripts control the simulation.<br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* The list of the six joint angles you calculated, and a brief explanation of the method you used to calculate them. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T03:23:22Z<p>Lynch: </p>
<hr />
<div>'''Introduction'''<br />
<br />
In the next chapter, we will study the forward kinematics problem for open-chain robots: finding the configuration of the robot's end-effector <math>T_{sb}(\theta) \in SE(3)</math> given the vector of joint positions <math>\theta</math>. The forward kinematics problem is easy to solve using a formula called the "product of exponentials," which uses the matrix exponential of this chapter. In this project, CoppeliaSim will solve the forward kinematics for you.<br />
<br />
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.<br />
<br />
You will submit '''a single pdf file''' to Canvas. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). You will have to concatenate all your responses into a single pdf file. <br />
<br />
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions. You will lose points if you don't follow the instructions or if the assignment is difficult for the grader to grade.<br />
<br />
<br />
'''Part 1: CoppeliaSim Simulation and Exploration'''<br />
<br />
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)<br />
<br />
When you run this scene you will see a window with 2 tabs: "Enter Config and SE(3) Value" and "Joint Angle Sliders". Go to the "Joint Angle Sliders" tab, move the sliders corresponding to the six joints, and watch how the robot moves.<br />
<br />
Click the "Scripts" button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.<br />
<br />
[[File:CoppeliaSim_scripts.PNG]]<br />
<br />
The main script and any child scripts will be displayed. There is a default main script that controls the simulation loop, and this main script should not be edited. At each simulation step, the main script calls (1) "actuation" functions that simulate the motion of the system and (2) "sensing" functions that simulate the sensors. <br />
<br />
Each object in the scene has an associated child script. The child script contains actuation and sensing functions for the object, written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that are called by the main script. A threaded child script creates a new computation thread, and threaded child scripts are typically discouraged relative to non-threaded scripts that are controlled by the main script. <br />
<br />
More information can be found at Coppelia's webpage on [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts]. <br />
<br />
Note that the simulation must be stopped before you can open a script.<br />
<br />
For Scene 1, we will be looking at the "Non-threaded child script (UI_Script)." Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, ''so3andp2se3(R,p)'' in this script resembles ''RpToTrans(R,p)'' in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. <br />
<br />
More information on CoppeliaSim can be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and demos to see how their functions and UIs were defined and to get a better idea of how the scripts control the simulation.<br />
<br />
'''Your task:'''<br />
Modify the non-threaded child script (UI_Script) to change an aspect of the scene. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:<br />
<br />
*Changing the layout: consult the XML syntax and change <group layout="vbox"> to another type (hbox,form, grid, none). Using line 257, changing <group layout="vbox"> to <group layout="hbox"> changes the orientation of the items in the group containing "Configuration Entry", "Current configuration", and "Messages" on the "Enter Config and SE(3) Value" tab of the Custom UI from vertically arranged to horizontal.<br />
<br />
*Changing the words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have <nowiki><big> and </big></nowiki> on its sides. For example, <nowiki>line 258 "label text="<big> Configuration Entry:</big>"</nowiki> controls the text "Configuration Entry" on the "Enter Config and SE(3) Value" tab of the Custom UI. Change the words "Configuration Entry" to change the text displayed in that specific section.<br />
<br />
*Changing the font: Using line 258 <nowiki>label text="<big>Configuration Entry:</big>"</nowiki><br />
**The font can be changed to small using: <nowiki>label text="<small>Configuration Entry:</small>"</nowiki><br />
** The font can be changed to a specific size using: <nowiki>label text="<font size=20>Configuration Entry:</font></nowiki>", where 20 is the desired font size.<br />
<br />
<!--<br />
'''Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.'''<br />
--><br />
<br />
'''Part 2: Joint Angle Calculations'''<br />
<br />
The 6R UR5 robot is shown below at its home configuration. Seven frames are defined: the fixed frame {s} at the base and frames {1} through {6} on links 1 through 6. The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis. All frames are aligned when the robot is at its home configuration, i.e., each rotation matrix <math>R_{ij}</math> (where <math>i, j</math> could be <math>s</math> or any number 1 through 6) is the identity matrix. <br />
<br />
[[File:UR5 Home.PNG]]<br />
<br />
The rotation axes for joint <math>i</math>, defined in frame {<math>i</math>}, are <math>\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)</math>.<br />
<br />
For some set of joint angles <math>\theta</math>, we have the following relations between the orientations of the joint frames:<br />
<br />
*''R<sub>13</sub>'' = [[0, 0, -1]; [0, 1, 0]; [1, 0, 0]]<br />
*''R<sub>s2</sub>'' = [[0, -1, 0]; [-0.5, 0, -0.866]; [0.866, 0, -0.5]]<br />
*''R<sub>15</sub>'' = [[-0.3536, -0.3536, 0.866]; [-0.7071, 0.7071, 0]; [-0.6124, -0.6124, -0.5]]<br />
*''R<sub>12</sub>'' = [[-0.5, 0, -0.866]; [0, 1, 0]; [0.866, 0, -0.5]]<br />
*''R<sub>34</sub>'' = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]<br />
*''R<sub>s6</sub>'' = [[-0.3536, -0.7071, 0.6124]; [-0.5732, -0.3536, -0.7392]; [0.7392, -0.6124, -0.2803]]<br />
*''R<sub>6e</sub>'' = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]<br />
<br />
where ''e'' corresponds to an end-effector frame fixed relative to link 6 and is not shown in the figure.<br />
<br />
'''Your task:'''<br />
<br />
* Find the six joint angles <math>/theta</math> given the <math>R_{ij}</math>. (Use the MR library, e.g., MatrixLog3.)<br />
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot. <br />
* Calculate ''R<sub>se</sub>'' and verify your results (including your joint angles) are correct by comparing to ''T<sub>se</sub>'' calculated by the scene under the "Enter Config and SE(3) Value" tab.<br />
<br />
'''What to turn in to Canvas:''' A single pdf file. The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf). This file should have:<br />
* Your list of the six joint angles you calculated. <br />
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration. <br />
* A screenshot of your changed code in the child script. <br />
<br />
If you do not know how to take a screenshot, you can use one of the following: <br />
*''Mac'': Cmd-Shift-3 and look for the screenshot on your desktop. <br />
*''Windows'': Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. <br />
*''Linux'': you can use Screenshot or PrtScrn.</div>Lynchhttp://hades.mech.northwestern.edu/index.php/ME_449_Assignment_1ME 449 Assignment 12020-10-01T02:35:37Z<p>Lynch: </p>
<hr />
<div