During my junior year of college, I took over as the software team lead for the Mars Rover team. Every year we have an influx of new members who join the software team who are looking to learn more and contribute to the software stack of our rover. However, ROS 1 in particular is somewhat notorious for having a bit of a high learning curve and rather dense documentation to read through (this has gotten much better with ROS 2). In order to remedy this, I created a set of workshop presentations and accompanying videos to make the core concepts associated with ROS more palatable to new members of the team. Each workshop had a small programming assignment that utilized the topics taught, allowing new members to get hands on experience working with ROS.
There are 3 ROS-centric workshops I created to introduce students to ROS. I also created a series of videos showing students how to install ROS on either a virtual machine or native linux machine, since many students coming into the club for the first time have little to no experience using linux. The first ROS workshop explains what ROS is students and how it fits into the rover software stack. It also explains the basic terminology of ROS, and introduces the concepts of nodes, publishers and subscribers. For the first workshop I had students write a simple node that prints "Hello ROS!" using the rosloginfo function. After that students created a basic publisher and subscriber- I live coded while they followed along. All of the examples were posted to Github for review afterwards, and additionally I recorded videos going through each workshop so students could review.
The second workshop covered the differences between ros messages and services (and when to use each). For messages, students expanded upon the previous publisher/subscriber example covered in the first workshop. For the services server/client- I adapted examples using turtlesim from two different ROS textbooks. Students ended up working with the turtlesim library to control a simulated turtle using their keyboard.
The third workshop covered more advanced topics such as actions, and RViz. For action servers, I had students play with the turtlesim "turtle_actionlib" shape drawing code. The RViz portion covered a brief introduction to RViz and then what TF is. Admittedly, the RViz and TF tutorials could have been saved for just the students interested in working with simulation.
Overall, giving students a chance to play with different ROS concepts increased retention slightly. The tutorial framework I laid out was later adapted by the new software lead to introduce students to ROS 2. I still believe that more students would be retained if they could test ROS concepts with a physical robot (other than the rover), but unfortunately the team lacks the necessary budget to purchase kits for the turtlebot or similar- since most of our funding goes to directly updating the rover itself. I do think creating these workshops made ROS more accessible to the students. I tried to keep in mind while teaching what I would have wanted to know while having to to endure the steep learning curve of ROS during my freshman year. While these workshops are by no means perfect, I'm glad I got the chance to get more students interested in ROS- since it's such a big tool in the robotics community.