A beginner-friendly ROS 2 course for learning the core ideas behind modern robot software.
This repository is designed for learners who are new to ROS 2 and want a practical, low-storage path into robotics programming. The course starts with the essentials: terminals, workspaces, packages, Python nodes, topics, services, custom interfaces, parameters, launch files, and command-line debugging.
The goal is not to install every robotics tool on day one. The goal is to understand how ROS 2 systems are built, tested, and debugged from the ground up.
By the end of the beginner course, you should be able to:
- set up a lightweight ROS 2 Jazzy environment
- create and build ROS 2 workspaces
- create Python ROS 2 packages
- write simple ROS 2 nodes
- publish and subscribe to topics
- create and call services
- define custom messages and services
- use parameters for runtime configuration
- write launch files to start multiple nodes
- inspect and debug a ROS 2 graph from the terminal
- complete a small integrated ROS 2 project
ROS 2 can feel overwhelming at the beginning because many tutorials quickly jump into simulation, visualization, navigation, robot models, and large toolchains.
This course takes a smaller and clearer route:
- Learn the communication model first.
- Build tiny working examples.
- Verify everything with ROS 2 CLI tools.
- Add visual debugging only when it helps.
- Save heavy robotics tools for later.
This makes the course friendlier for beginners and for laptops or virtual machines with limited storage.
The beginner path starts with:
ros-jazzy-ros-base
and later adds only small visualization tools when needed:
ros-jazzy-rqt
ros-jazzy-rqt-graph
The early course does not require:
- Gazebo / Ignition
- Navigation2
- MoveIt
- Docker images
- YOLO or AI packages
- large simulation worlds
- full ROS desktop stacks
Those tools are important, but they belong after the fundamentals are comfortable or when more storage is available.
The course targets:
| Tool | Version |
|---|---|
| Ubuntu | 24.04 LTS |
| ROS 2 | Jazzy |
| Language | Python |
| Build tool | colcon |
| Code sync | Git |
| Beginner install | ros-jazzy-ros-base |
If you are on a small-storage machine, start with the base install and avoid full desktop robotics stacks at first.
If you edit course files on macOS and test ROS 2 inside Ubuntu, use Git to move code between the two environments. Shared folders are useful for screenshots and quick transfer, but ROS 2 workspaces should be built inside Ubuntu, such as ~/ros2_ws.
The companion ROS 2 workspace repo is:
-
Install and verify the lightweight ROS 2 setup:
Installation-Guides/01 ROS 2 Jazzy Base Install and Verification.md
-
Read the course roadmap:
-
Begin with Module 1:
ROS 2 Environment and Workspace
.
├── Installation-Guides/
│ └── 01 ROS 2 Jazzy Base Install and Verification.md
├── Lessons/
│ ├── README.md
│ ├── lesson-plan/
│ └── lessons/
├── AGENTS.md
├── CLAUDE.md
└── README.md
| Path | Purpose |
|---|---|
Installation-Guides/ |
Setup and verification guides |
Lessons/README.md |
Main course roadmap and lesson plan |
Lessons/lesson-plan/ |
Planning documents for future lessons |
Lessons/lessons/ |
Student-facing lessons |
AGENTS.md |
Instructions for coding agents |
CLAUDE.md |
Teaching and lesson-generation rules |
| Module | Focus |
|---|---|
| 1 | ROS 2 environment, workspace, and package mechanics |
| 2 | First ROS 2 Python node |
| 3 | CLI inspection and rqt_graph visualization |
| 4 | Topics, publishers, subscribers, and bags |
| 5 | Services and clients |
| 6 | Custom messages and services |
| 7 | Parameters and YAML configuration |
| 8 | Launch files, remapping, and namespaces |
| 9 | Final beginner integration project |
Each module should end with something runnable, inspectable, and explainable.
Lessons in this repo should be:
- beginner-friendly
- hands-on
- low-storage aware
- written for ROS 2 Jazzy on Ubuntu 24.04
- clear about what each command does
- honest about common beginner mistakes
- focused on practical verification
Every lesson should include a small exercise or mini-project so learners can test their skills instead of only reading.
This repository is in active course-building mode.
The roadmap and installation guide are in place. Student-facing lessons will be created progressively from the roadmap, tested in a real ROS 2 environment, and expanded with troubleshooting notes as the course grows.
This repo includes Claude/Codex-oriented course authoring instructions:
AGENTS.mdtells coding agents how to work in this repository.CLAUDE.mddefines the teaching quality bar..claude/commands/make-lesson-plan.mddefines/make-lesson-plan <Lesson Number>..claude/commands/make-lesson.mddefines/make-lesson <Lesson Number>.
Generated lesson plans should go in:
Lessons/lesson-plan/
Generated student-facing lessons should go in:
Lessons/lessons/
A small working ROS 2 system is better than a large confusing install.
Start with the core. Build one thing. Run it. Inspect it. Break it. Fix it. Then move to the next idea.
That is how this course is meant to be learned.