The lab's ROS 2 handbook: what ROS 2 is, which version to use, how to install it, the commands you need and how to fix what breaks, for new students and coding agents.
Advanced Telerobotics Research Laboratory · Department of Computer Science · Kent State University
|
What is ROS 2 Nodes, topics, services, actions, QoS, discovery, tf2 and workspaces in plain words. |
Distributions Foxy to Lyrical: dates, end of life and which one to pick. |
Install natively The official apt install, plus Raspberry Pi, Jetson, macOS and Windows. |
|
Install with ROSEnv Several distros side by side in Docker, pinned with a lockfile. |
Command cheatsheet ros2, colcon, rosdep and environment variables, checked per distro. |
Packages and nodes RViz, bags, ros2_control, Nav2, MoveIt 2, drivers and simulators. |
|
Debugging Symptom, cause and fix, from discovery to crashes. |
Lab robots How each lab device connects to ROS 2 and which distro it needs. |
Resources Official docs, REPs, where to ask, courses and lab repos. |
The lab rule: manage ROS 2 with ROSEnv, which keeps several distributions side by side on one machine, and use the distribution the robot's SDK was written for. When no robot or SDK decides, use Jazzy on Ubuntu 24.04: it is supported until May 2029, has the widest set of packages and runs on the lab's newer hardware.
| Your situation | Use |
|---|---|
| New project, nothing forces a version | Jazzy (Ubuntu 24.04) |
| Every package you need is released for Lyrical and you want support to 2031 | Lyrical (Ubuntu 26.04) |
| A robot SDK or driver targets it (today: the Unitree Go2 community SDK and the Booster K1 SDK) | That SDK's distro, today Humble (Ubuntu 22.04). Humble ends in May 2027; the lab plans to fork these SDKs for Lyrical (lab robots) |
| Old Foxy, Galactic or Iron code | Run it in that distro's Docker image only |
| Kilted | Not for new work; ends in December 2026 at the latest |
Dates, platforms and the reasoning are in distributions. Status as of Sept. 30, 2026.
Pick one route. Both end with a talker and a listener exchanging messages. Route B, ROSEnv, is the lab's default.
Route A: native install (Ubuntu 24.04; full steps and other distros in install natively)
sudo apt update && sudo apt install curl software-properties-common -y
sudo add-apt-repository universe
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
sudo apt update && sudo apt upgrade -y
sudo apt install ros-jazzy-desktop ros-dev-tools -y
source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp talker # second terminal: source the same file, then ros2 run demo_nodes_py listenerRoute B: ROSEnv (a Linux host with Python 3.11+ and Docker Engine, tested on Ubuntu 24.04; ROS is not installed into the system; details in install with ROSEnv)
git clone https://github.com/MarcoDotIO/rosenv.git && cd rosenv && uv tool install . && cd ..
mkdir -p ~/robot_ws/src && cd ~/robot_ws
rosenv init --ros jazzy
rosenv add demo_nodes_cpp
rosenv run -- ros2 run demo_nodes_cpp talker # in a second terminal: rosenv run -- ros2 run demo_nodes_cpp listenerThen build and test a real package: the example workspace has a talker and listener with parameters, a launch file and tests, verified on Humble, Jazzy, Kilted and Lyrical.
| Path | What it holds | Read it when |
|---|---|---|
docs/ |
The handbook, nine numbered pages | You are learning ROS 2 or looking something up |
docs/01-what-is-ros2.md |
Concepts and vocabulary | You are new to ROS |
docs/02-distributions.md |
Every distro from Foxy to Lyrical, and a decision guide | You are choosing a version or migrating |
docs/03-install-native.md |
Official installs and platform notes | You are setting up a computer or robot |
docs/04-install-rosenv.md |
ROSEnv environments and lockfiles | You need several distros or reproducible dependencies |
docs/05-cheatsheet.md |
Commands and environment variables | You need an exact command |
docs/06-packages-and-nodes.md |
Useful packages by task | You need a tool for a job |
docs/07-debugging.md |
Symptoms, causes, fixes | Something does not work |
docs/08-lab-robots.md |
Lab devices and their ROS 2 support | You are writing code for a lab robot |
docs/09-resources.md |
External links | You need more depth |
examples/ |
hello_ws, a tested example workspace |
You want working code to copy |
AGENTS.md |
Rules, sources and checks for coding agents and contributors | You are editing this repo |
Found something wrong or out of date? Open an issue or send a pull request. Follow the writing rules and checks in AGENTS.md: cite an official source for every version, date or command, run the command before you document it, and use [bracketed placeholders] for anything only the lab can confirm.
Text and code in this repository are released under the MIT License. The names and logos of the Advanced Telerobotics Research Laboratory and Kent State University are trademarks and are not covered by that license. ROS, ROS 2 and the distribution names and logos belong to their respective owners; third-party projects linked from these pages keep their own licenses.
ATR Lab docs ·
About the lab ·
Getting started ·
Dev guidelines ·
All things ROS 2 ·
All repositories
Advanced Telerobotics Research Laboratory · Department of Computer Science · Kent State University ·
www.atr.cs.kent.edu
