This organization contains projects, template programs and utilities, and other learning materials for an autonomous robotics course targeted to computer science undergraduates. It corresponds with a course at James Madision University (CS 354) and the book Just Enough Robotics by Nathan Sprague.
Listed below are the general topics covered by the book/course and a brief description of the corresponding projects, labs and repositories to support that material.
Some of these projects use ROS (Robot Operating System) and have been tested using the ROS2 Foxy release. Where applicable, these projects utilize the Turtlebot3 Waffle Pi robot platform.
Portions of this work were supported by a grant from the Virtual Library of Virginia (VIVA).
The LaTeX source files for the textbook are available in the robotics-book-public repository. A PDF version of the book can be downloaded here:
The following course schedule includes links to lab activities, homework assignments, and readings. The posted readings are primarily from Just Enough Robotics and the official ROS2 Tutorials.
- Bumperbot Project This is a warm-up project designed to introduce some ideas in robotics and provide a starting point for students without Python programming experience.
These activities are primarily focused on getting students comfortable with ROS2 and working with the Turtlebo3 platform, both in simulation and on the physical robots.
-
Locomotive Simulation Activity [repository] [writeup] A warm-up activity in which a one dimensional train needs to stop at a point on the track and the only control the student can apply is a force (both positive and negative). This activity motivates the need for a controller algorithms.
-
PID Practice Lab [repository][writeup] Activity for learning about multidimensional PID parameters and how to pass ROS2 parameters use launch files. This includes a rocket visualization where the job of the PID controller is to make the rocket climb and maintain a specific altitude. The rocket simulator is available from the rocketbot repository.
-
Skibot Project [repository][writeup] Practice with 2D PID controller and ROS services. A skier has a goal location passed via a ROS service and the PID controller must navigate the skier to this location. The program must be able to accept new goal locations. This simulated skier accepts linear as well as angular/rotational forces. A graphical simulator is provided so the student can visualize how well their controller is functioning. The simulator is located in the skibot repository.
-
PyArm A 2D robotic arm simulator that can be used to develop and test planning algorithms.
-
Planning Project [repository] Allows students to explore using a deterministic and optimal planner (A*) versus a few probabalistic ones. Uses the PyArm for simulation and visualization.
-
Planning Visualizations This is a playlist of animations for the algorithsm described in the planning chapter of Just Enough Robotics.
-
Introductory ROS2 Navigation Lab [writeup]
-
Random Navigation Lab [repository][writeup]. Utilizes ROS navigation and occupancy grids. Students write code to select a random unoccupied location in the map, and use the ROS2 navigation system to move the robot to that location.
-
Zeta Rescue - A Final Challenge Project [repositories][writeup] This project involves conducting a time-limited search to "rescue" individuals, each marked with an AR tag and identified using the robot's camera. A ROS occupancy map is provided at the time of the competition (but not before, so, essentially it is an unknown space). It has been tested with the Turtlebot-3 Waffle Pi. Many aspects of this project can be enhanced, for example, computer vision methods can be employed to better spot individuals from far away. The supporting repositories that contain Zeta in the name are in support of this project.
These packages augment the ROS2 Foxy programming Python API language and the Turtlebot-3 Waffle Pi platform to support the projects/labs.
-
Transform service A ROS2 service that performs transforms between frames. This is useful because TF2, the ROS2 transform library, is not fully supported under Foxy.
-
JMU ROS utilities Provides some useful utility code, including a module that makes it easier to work with OccypancyGrid messages.
-
JMU Turtlebot3 Bringup This package makes the Turtlebot code more ROS2 Foxy friendly.
-
ros2_aruco Wrapper for OpenCV Aruco Marker tracking for use with ROS2.