- Rocco DiVerdi (office hours: Thursday 7-9 and Sunday 7-9, also by appointment)
- Ryan Louie (office hours: Sundays 3 - 5, 9 - 11)
- Paul Ruvolo (by appointment)
The course will provide a project-based introduction to the computational principles, algorithms, and software engineering practices that lie at the heart of modern robotics.
The course will be project-based. While I will provide you with robust scaffolding for your journey, the depth, quality, and scope of much of your learning will depend on you! In short, you will get out what you put into this class.
Robotics is sort of a technological "grand challenge" in that it pulls together and integrates strands from so many different disciplines. Depending upon the scaffolding an instructor provides in their course, students will leave having learned very different aspects of the field. With this in mind, the scaffolding provided in this course will be tailored to maximize your learning of the computational and software engineering aspects of the discipline. Before diving into the specific scaffolding I will provide, perhaps it is worth discussing what this course is NOT about. This course is not about: mechanical design, electrical engineering, sensor design, or low-level programming (e.g. interfacing to hardware) of robots. Here are the pieces that I will provide to help guide your journey:
- A working robot with an array of sophisticated sensors. I will provide a total of 8 working and interchangeable robots. Each robot is equipped with a 360 degree LIDAR, a camera, accelerometer, and bump sensors.
- Software to interface to the robots wirelessly. The software will remove the need for you to worry about the low-level details of how to read sensor data and send motor commands to the robot. These tasks will be easily accomplished through high-level interfaces that can be accessed from an array of programming languages.
- Sample code for solving a number of difficult computational problems on the robots. This sample code may be useful as a jumping off point for project ideas, or can be used as a component within a larger system that you design. It is also worth saying that these modules are by no means perfect, and you should not expect them to function as such. Some highlights of the samples provided are: SLAM (Simultaneous Localization and Mapping), occupancy grid mapping, localization using particle filters, object tracking, 3d structure from motion, path planning, and object recognition.
- Instruction on useful tools for designing, debugging, and evaluating robotics algorithms. Given that much of the learning in this course will be project-based, I will avoid as much as possible spending time lecturing on the details of algorithms or techniques that will only be relevant to a subset of students. That being said, no matter what your project is, you are likely to face similar challenges around how to best architect your code, debug it, and test it rigorously. I will try as much as possible to focus class activities around these topics. Activities will be interactive, and may require you to "put aside" your project for the duration of class. While it may be tempting to adopt the attitude of "can't I just work on my project!", I ask that you put your full effort into these activities in order to maximize your learning in the course.
- Infrastructure for evaluating robotics algorithms. In addition to the tools / techniques described above, I will be providing a robot testing lab where you can evaluate quantitatively the accuracy of some of the algorithms you implement. Specifically, the testing lab will provide a way for you to get accurate estimates of your robot's location within a room so that you can validate these estimates against the output of your algorithm. This infrastructure should not only help you to improve the accuracy of your code, but will allow you to explore some advanced techniques for debugging and optimization that would not be possible without this facility.
- Materials to explain an array of robotics algorithms. These materials will take many forms. Some of them are slide decks from the last iteration of CompRobo. Some of them will be online tutorials or guides written by myself or others. These materials should be starting points for your investigation and learning, and you should not consider them exhaustive by any means.
- A detailed walkthrough of understanding, implementing, and testing one robotics algorithm. Before turning you loose in fully autonomous project-based mode, we will as a class go through an extended lab where we will understand the theory, design the code, and then test and debug a particle filter for robot localization. This will give us a chance to build a shared set of skills and best practices that will be useful in later student-designed projects. While I will provide lots of structure during this project, there will be plenty of chances to take it in different directions should you so desire.
- Project-specific guidance and informal instruction / coaching. Basically the standard role of an instructor in a PBL class.
All of the above scaffolding will only get you so far. In order to get the most out of this class I suggest the following:
- Complete pre-class assignments.
- Put significant effort into coming up with, and then refining, project ideas. This is where the real learning happens. The choices you make as to the project topic you pursue, will have a huge impact on what you learn in this class. I will also provide guidance on project topic and scope. I ask that you take this advice seriously, and try to incorporate it into your project proposal.
- Be an active participant in class. This involves both engaging with class-wide activities and proactively reaching out for instructor help on your project during project work time.
- Be reflective. Things might not always go so well in this class. However, no experience is a waste unless you fail to learn from it. I ask that you take time to reflect on successes and failures in this course both as a means of your improvement and learning, but also as a means to help me improve the course itself.
- Close the loop. If something isn't working for you about this class, let me know. The goal is to collaboratively improve this course.
- Bring the energy. This class should be a tremendous amount of fun. The more positive energy you all bring to the class, the more fun we will all have!