> For the complete documentation index, see [llms.txt](https://panav.gitbook.io/robotics-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://panav.gitbook.io/robotics-handbook/ros-2/ros-2.md).

# Overview

ROS 2 - middleware for robotics from setup to Nav2, MoveIt 2, microROS, and production deployment on Humble and Jazzy.

ROS 1 reached end-of-life with Noetic in **May 2025**. If you are starting a robotics project in 2026, you start it on ROS 2 - full stop. This section is the modern, ROS 2 first counterpart to the legacy `ros-1-legacy/ros/` material, which we keep around purely so older codebases and tutorials still make sense to readers.

I have been writing ROS 2 code daily since Foxy, shipped a Humble + Jazzy mobile platform ([Polka](/robotics-handbook/authors-projects/polka.md)), and contributed upstream to Nav2 and PlotJuggler. The pages in this section reflect what I actually do at work, not just what the docs say.

### In this section

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>Setup</td><td><a href="/robotics-handbook/ros-2/setup.md">Setup</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-b1cd703d109c7f4a12e191956084367916d9b687%2Fros2-qos.gif?alt=media">ros2-setup.gif</a></td></tr><tr><td>DDS and QoS</td><td><a href="/robotics-handbook/ros-2/dds-qos.md">DDS and QoS</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-784cf1deab07c2e011b74783a266d99e9e7aea75%2Fdds.gif?alt=media">dds.gif</a></td></tr><tr><td>Lifecycle and Composition</td><td><a href="/robotics-handbook/ros-2/lifecycle-and-composition.md">Lifecycle and Composition</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-2f3a3447bf9b6fcc17454c7c166b425e386fd04f%2Flifecycle.jpeg?alt=media">lifecycle.jpeg</a></td></tr><tr><td>Nav2 Deep Dive</td><td><a href="/robotics-handbook/ros-2/nav2-deep-dive.md">Nav2 Deep Dive</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-3bcf927f47a0a6316ec316b384aafb419a6315ab%2Fnav2-pure-pursuit.gif?alt=media">nav2-pure-pursuit.gif</a></td></tr><tr><td>MoveIt 2</td><td><a href="/robotics-handbook/ros-2/moveit2.md">MoveIt 2</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2FCl2nsS1vO9EdaPCByAUq%2Fik1.gif?alt=media&amp;token=01420e88-99bd-43fd-bd9c-2cb3af141ac7">ik1.gif</a></td></tr><tr><td>micro-ROS</td><td><a href="/robotics-handbook/ros-2/micro-ros.md">micro-ROS</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2FeeeV16VnkgFlTppqvuTZ%2FESP32-blink-gif.gif?alt=media&amp;token=ffa22d21-3f9b-4aff-8560-ad221faa9bf1">ESP32-blink-gif.gif</a></td></tr><tr><td>Visualization (rviz2, Foxglove, Lichtblick, PlotJuggler)</td><td><a href="/robotics-handbook/ros-2/visualization.md">Visualization (rviz2, Foxglove, Lichtblick, PlotJuggler)</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-1bab1a286eafdba134321c8705c66fc2cb7998c2%2Fros2-visualization.gif?alt=media">ros2-visualization.gif</a></td></tr><tr><td>Important Packages and Libraries</td><td><a href="/robotics-handbook/ros-2/important-packages-and-libraries.md">Important Packages and Libraries</a></td><td><a href="https://923066007-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJR2yBCOFnSaxfostbWYx%2Fuploads%2Fgit-blob-b0fe2811777b872caff19e62697034d996467d9b%2Fros2-packages.gif?alt=media">ros2-packages.gif</a></td></tr></tbody></table>

### Why ROS 2 (and not ROS 1)

ROS 1 was a brilliant research framework that grew organically from 2007. It had a single ROS Master, no real QoS, no security story, no real-time guarantees, and a transport built on custom TCPROS/UDPROS. It was great for prototyping, painful in production.

ROS 2 was a rewrite, not a port. The headline changes:

| Concern          | ROS 1                           | ROS 2                                                  |
| ---------------- | ------------------------------- | ------------------------------------------------------ |
| Discovery        | Centralized `roscore` (master)  | Fully distributed via DDS                              |
| Transport        | Custom TCPROS / UDPROS          | DDS-RTPS (CycloneDDS, Fast DDS, Zenoh RMW)             |
| QoS              | Effectively none                | Reliability, Durability, History, Deadline, Liveliness |
| Multi-machine    | Awkward, single master          | Native - `ROS_DOMAIN_ID` partitions networks           |
| Threading        | Mostly single-threaded          | Executors, callback groups, true multi-threading       |
| Real-time        | Not realistic                   | Designed for real-time-capable runtimes                |
| Security         | None                            | SROS2 (DDS-Security)                                   |
| Lifecycle        | Hand-rolled                     | First-class managed nodes                              |
| Composition      | One node per process            | Composable nodes, intra-process zero-copy              |
| Microcontrollers | rosserial (limited, ROS 1 only) | micro-ROS (proper DDS-XRCE)                            |
| Language support | C++, Python (rospy)             | C++ (rclcpp), Python (rclpy), Rust, others             |
| Build system     | catkin                          | colcon + ament                                         |
| Launch           | XML                             | Python (and XML/YAML if you must)                      |

The trade-off is real complexity in places ROS 1 hid from you - QoS mismatches between publishers and subscribers will silently drop your data the first time you forget about them. That is the price for actually working over wireless and across machines.

### Distros in 2026

ROS 2 ships on a roughly biannual cadence, alternating LTS and non-LTS releases. As of 2026 the two distros that matter for production are:

| Distro               | Released       | EOL      | Ubuntu        | Notes                                                               |
| -------------------- | -------------- | -------- | ------------- | ------------------------------------------------------------------- |
| **Humble Hawksbill** | May 2022 (LTS) | May 2027 | 22.04 Jammy   | The conservative choice - most third-party packages still target it |
| **Jazzy Jalisco**    | May 2024 (LTS) | May 2029 | 24.04 Noble   | The current default for new work                                    |
| **Kilted Kaiju**     | May 2025       | Dec 2026 | 24.04 Noble   | Non-LTS, mostly used by Nav2/MoveIt developers chasing new features |
| **Rolling Ridley**   | Continuous     | n/a      | tracks latest | The development branch - never deploy this to a robot               |

When I start a new project today I default to **Jazzy on Ubuntu 24.04**. I only pick Humble when a critical dependency (a vendor driver, a specific MoveIt configuration, a customer-pinned Docker image) has not been ported. Avoid mixing distros inside a single workspace; the binary interfaces of `rcl`, `rclcpp`, and message packages are not stable across distros.

The official EOL schedule lives at [docs.ros.org/en/rolling/Releases.html](https://docs.ros.org/en/rolling/Releases.html) - sanity-check the dates above against that page when planning a multi-year deployment.

### What's in this section

* [Setup](/robotics-handbook/ros-2/setup.md) - installing ROS 2 on Ubuntu 22.04 / 24.04, colcon workspaces, overlays, and the Docker route.
* [DDS and QoS](/robotics-handbook/ros-2/dds-qos.md) - the part of ROS 2 that bites you first. RMW implementations, QoS profile components, compatibility rules, and tuning for real bandwidth.
* [Lifecycle and Composition](/robotics-handbook/ros-2/lifecycle-and-composition.md) - managed nodes for deterministic bringup, composable nodes for intra-process zero-copy.
* [Nav2 Deep Dive](/robotics-handbook/ros-2/nav2-deep-dive.md) - the modern navigation stack: bt\_navigator, controller\_server (DWB / MPPI / RPP), planners (Smac, NavFn), behavior trees, costmap layers, collision monitor, tuning.
* [MoveIt 2](/robotics-handbook/ros-2/moveit2.md) - manipulation: move\_group, OMPL, Pilz, ros2\_control integration, and when MoveIt is actually the right tool.
* [micro-ROS](/robotics-handbook/ros-2/micro-ros.md) - running real DDS on STM32 / ESP32 / RP2040 over DDS-XRCE.
* [Visualization](/robotics-handbook/ros-2/visualization.md) - rviz2, Foxglove, [Lichtblick](/robotics-handbook/ros-2/visualization.md#lichtblick), PlotJuggler, and the rqt family.

### Related reading

* [Polka](/robotics-handbook/authors-projects/polka.md) - my mobile platform running Humble + Jazzy side by side.
* [SLAM and State Estimation → LiDAR SLAM](/robotics-handbook/slam-and-state-estimation/lidar-slam.md) - the perception layer most ROS 2 navigation stacks rely on.
* [Optimization libraries](/robotics-handbook/programming-for-robotics/optimization-libraries.md) - the math underneath MPPI, Smac, MoveIt, and most modern planners.
* [Legacy ROS 1](/robotics-handbook/ros-advanced-and-legacy/ros-advanced/ros.md) - kept for archaeology only; do not start new projects there.

### How to read this section

These pages assume you already know what a topic, service, and action are at the conceptual level. If you don't, the official docs at [docs.ros.org/en/jazzy/Tutorials.html](https://docs.ros.org/en/jazzy/Tutorials.html) are the right starting point. What I cover here is the layer above the tutorials - the design decisions and production gotchas that the docs assume you'll learn the hard way.

I lean on production examples from my own work where they add signal. If you spot something that drifts out of date as new distros land, the GitHub history of this handbook is the source of truth.
