Syllabus for a mini-course in programming and simulating robots
Spring 2020
- Course description
- Textbook
- Homebrew text and notes
- Slack
- Video lectures
- Schedule
- Assignments
- Final project
Course description
This is a mini-course introduction to programming and simulating robots. The programming framework is a Python client library of the open-source Robot Operating System (ROS). Some familiarity with programming is required, but experience with Python or ROS is not.
Textbook
Morgan Quigley, Brian Gerkey, William Smart. Programming Robots with ROS: A Practical Introduction to the Robot Operating System. O’Reilly Media, 2015. (Required. Henceforth: Qu)
Homebrew text and notes
A partial texts (with fill-ins) I’m writing will be posted on the _Robotics: programming and simulation (henceforth: Ro) page.
Slack
Everyone is required to join the messaging service called “Slack.” We’ll use it to communicate with each other during the semester. The Slack team you need to join is called drrico. That’s a signup link. Be sure to join the channel #577-general-2020
.
Video lectures
Most lectures will be available online on my YouTube channel. I recommend subscribing and familiarizing yourself with the playlist for this course.
Schedule
The following schedule is tentative. Bonus lectures denoted “+” are optional, but so is this class.
day | lectures (Ro) | week | reading | due |
---|---|---|---|---|
05.00 Introducing ROS 05.01 ROS methodology Resource 1.1 Setting up VirtualBox+Ubuntu Resource 1.2 Setting up ROS dev env: ROS Resource 1.3 Setting up a Python ROS dev. env. |
1 | Qu Ch 1 | ||
06.01 ROS graphs 06.02 ROS packages 06.03 Running and launching ROS nodes 06.04 Coordinate transformations and tf2 |
2 | Qu Ch 2 | Ass. 1 | |
Resources 2+3 Textbook code and git 07.01 Publishing to ROS topics 07.02 Subscribing to ROS topics 07.03 Custom ROS messages 07.04 Other ROS topics considerations |
3 | Qu Ch 3 | Ass. 2 | |
08.01 ROS services introduction 08.02 Serving and calling a ROS service |
4 | Qu Chs 4, 5 | Ass. 3 | |
09.01 ROS actions introduction 09.02 Serving and calling a ROS action |
5 | Qu Ch 6 | Ass. 4 | |
6 | Qu Chs 7 | Ass. 5 | ||
final project due | 7 |
Assignments
Assignments are due Monday of the week they appear in the schedule.
Assignment #1
- Do the assigned reading.
- Set up your development environment.
Assignment #2
- Do the assigned reading.
- Do Ro Exercise 06.1.
- Do the tutorial: Navigating the ROS Filesystem.
- Do the tutorial: Understanding ROS Nodes
Assignment #3
- Do the assigned reading.
- Do the tutorial: Understanding ROS Topics
- Do the tutorial: Writing a Simple Publisher and Subscriber.
Assignment #4
- Do the assigned reading.
- Do the tutorial: Using rosed to edit files in ROS
- Do the tutorial: Creating a ROS msg and srv
- Do the tutorial: Writing a Simple Service and Client
- Do the tutorial: Examining the Simple Service and Client
Final project
The final project will be due at the end (midnight) of Thursday of the final exam week.
Description
The project is to write your own ROS packages covered in Ro. If you’ve been following along, making your own my_topics
, my_services
, and my_actions
, you only have a few things left to do!
Submission format
- The submission must be a GitHub repository.
- The repository must include distributable ROS packages
my_topics
,my_services
, andmy_actions
, compatible with the class development environment. - You must write a launch file for each package. (We covered this in general, but not for each package.)
- The repository must include a
README.md
file. Use the About READMEs and the Basic writing and formatting syntax GitHub articles to guide you. YourREADME.md
should include all the elements in this sampleREADME.md
. - Your
README
should include clear instructions for launching each of your packages and what it should do. - The code must be well-organized and include documentation in the form of comments.
- Make sure you edit your
package.xml
to include your information. - For obvious reasons, your packages cannot be named
rico_whatever
. Definitely do not simply put my code in your repository.
If you do not want your repository to be public, create a private repository and add me (username: ricopicone
) as a collaborator on the repository.