Many learners finish a ROS tutorial and assume they have "set up ROS." In practice, they may only have executed a narrow sequence inside one particular distribution, on one particular operating system, with dependencies already present. The difference between completing an exercise and reproducing an environment becomes obvious when a peer tries the same notebook on another machine. For robot learning pathways, the useful evidence is not a screenshot of a successful build; it is a record of the distribution name, the dependency manager behavior, and the workspace conditions under which a build succeeded or failed.
A single-line install or build command can succeed because of hidden state: a previously installed system library, a cached index, or an operating system that already matches the supported target. The official ROS 2 Jazzy installation documentation states that binary packages are created only for Tier 1 operating systems listed in REP-2000, and that Ubuntu Linux amd64/aarch64 on Noble Numbat 24.04 is among the provided binary platforms (ROS 2 Jazzy installation source). That means a tutorial run on an unsupported platform may rely on source builds or containers rather than the same binary path another learner would use.
When the environment is not described, the tutorial result cannot be compared across machines. A learner notebook should therefore start with platform and distribution evidence rather than with commands.
rosdep resolves dependencies by checking package.xml files and cross-referencing rosdep keys against a central index known as rosdistro (rosdep Jazzy documentation source). The keys are not abstract; for ROS-based packages already released into the ecosystem, the key is the package name listed in a distribution file such as <distro>/distribution.yaml. For system dependencies, the keys come from files such as rosdep/base.yaml for apt and rosdep/python.yaml for Python packages.
In a learning notebook, the distribution name matters because the same logical dependency can map to different resolved names on different operating systems. The Jazzy rosdep documentation gives the example of a doxygen key resolving to doxygen on Ubuntu and to app-doc/doxygen on Gentoo, showing that the key is stable while the installed package name is platform-specific. Recording "I used Jazzy" without recording "on Ubuntu 24.04 Noble, with the local rosdistro index updated" leaves the reproduction incomplete.
A workspace contains source packages, and rosdep is most often invoked over that workspace before building. The Jazzy documentation notes that rosdep install --from-paths src -y --ignore-src checks package.xml files under a source path and ignores packages that are themselves in the workspace (rosdep Jazzy documentation source). The --ignore-src behavior is easy to overlook: if a dependency appears both as a workspace source package and as an external key, the local copy is used instead of an installed one.
For a learner, useful workspace evidence includes the relative path used for --from-paths, whether the local rosdep index had been initialized and updated on that machine, and which packages were present in src at the time of the run. The notebook should record these conditions so that a later run can be compared with the original environment.
A hypothetical learner writes: "Distribution: ROS 2 Jazzy. Host OS: Ubuntu 24.04, matching the Noble Numbat binary platform named in the installation source. Local rosdep state: rosdep init and rosdep update had been run previously on this machine, so the cached index was present. Command scope: rosdep install --from-paths src -y --ignore-src from the workspace root. Observation: the run completed without prompts. Follow-up check: the same notebook entry later failed on a second machine that had no prior rosdep initialization, producing unresolved-key output instead of installed packages."
That hypothetical entry is more useful than the single word "worked," because it separates distribution identity, platform support, index state, and command scope. It also identifies the local index state as a relevant difference between the two runs.
The following items are recommended documentation practice for a robot-learning pathway. First, record the exact ROS distribution name and whether binary packages or a source/container path was used, linking the platform claim to the installation documentation. Second, note whether rosdep was initialized and updated on that machine, because the local cached index affects resolution. Third, list the package.xml dependency tags actually present in the workspace packages, since <depend>, <build_depend>, <build_export_depend>, <exec_depend>, and <test_depend> express different lifecycle needs according to the rosdep documentation.
Fourth, keep a short failure log: unresolved key names, the OS in use, and whether the key was expected from base.yaml, python.yaml, or a distribution file. Fifth, avoid claiming that the environment is portable; state only what was observed on the recorded host. These practices make the notebook a learning artifact rather than a command sheet.
The point of the notebook is that reproducing an environment means reproducing its named dependencies, its distribution identity, and its workspace conditions—not merely repeating a tutorial until a prompt disappears.
For further equipment reading, browse related industry updates and technical reference articles alongside this practical note.