My teaching centers around the core philosophy that I want to develop complete roboticists, expert in theory, algorithms, and real-world implementation. Some of my harshest lessons were learned when I applied my algorithms to real problems. The courses I have designed echo this philosophy: theory grounded in the practical application of getting robots to work.
Courses at Carnegie Mellon University
At CMU, I created two graduate-level courses from scratch: Robot Autonomy, a Masters-level course for the Master of Science in Robotic Systems Development (MRSD), and Manipulation Algorithms, a PhD-level course. These courses have continued to be offered by other faculty after my departure.
Robot Autonomy
This was the first course of its kind to provide an end-to-end robotics experience: from the theory of perception, control, planning and manipulation algorithms, to implementation on real robots, to working prototypes on diverse real-world platforms. I designed every single assignment to be implemented in OpenRAVE, a planning framework we have developed, which enabled students to appreciate the programming complexity and real-world run-times of the algorithms they were learning. I also matched student teams with faculty research mentors for class projects. Each project was mandated to implement the learning from the class on real-world hardware platforms, ranging from HERB, PR2, and Nao robots, to quadrotors, and the Gigapan system.
Manipulation Algorithms
This course filled a vital gap in our curriculum, exposing PhD-level students to state of the art algorithms for motion planning and manipulation. Unfortunately, although there have been several recent advances in manipulation, they are often drowned out in the avalanche of published work. My course focused on organizing manipulation algorithms in terms of their academic origins, deriving proofs for completeness and optimality, and drawing out their pros and cons when applied to real-world robotics problems. Students then applied these learnings in their own research in class projects. This was an exciting experience where both the students and I learned about some really diverse and creative applications of manipulation algorithms in often completely unrelated fields.
Courses at University of Washington
At UW, again, I created two courses from scratch: Advanced Robotics, a PhD-level course, and Robotics a brand new and my first undergraduate course in robotics.
Advanced Robotics
This was Manipulation Algorithms on steroids: a brand new graduate-level robotics course on motion planning algorithms. The course covers the Piano Movers Problem, sampling-based planning, minimum dispersion graphs, efficient search, lazy and anytime planning, planning under uncertainty with application to mobile manipulators and humanoid robots, with a focus on algorithmic foundations and theorem proving. Again, we designed all of the homeworks in OpenRAVE from scratch.
Robotics
In Winter 2018, I decided to take on a very ambitious project of teaching an undergraduate course, also from scratch. We designed and built 14 RACECARs (autonomous RC cars), created programming assignments, and brand new lecture notes. In 11 weeks, students learned everything that was needed to build an autonomous vehicle, and their final project was to autonomously drive around the 6th floor of CSE and look for hidden ‘gold’. This was the most work that I have ever put in for a class, but it was well worth it. We need to teach hands-on robotics to our undergrads on real robots, and I am committed to doing it. It was a lot of work for the students (58% said they spent >22 hours/week) but well received. I really enjoyed this quote:
It made building your own self-driving racecar feel accessible. It’s the only course in CSE that’s given me the competitive drive I felt from high school FIRST Robotics Competition. It’s one of few courses where I’ve wondered “what would Lab 5 be? what would lab 6 be?”… I wish this was a yearlong course.