No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro lyrical showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/mgonzs13/yolo_ros.git
VCS Type git
VCS Version main
Last Updated 2026-10-10
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yolo_bringup 5.0.0
yolo_hfhub_vendor 5.0.0
yolo_msgs 5.0.0
yolo_onnxruntime_vendor 5.0.0
yolo_ros 5.0.0

README

yolo_ros

ROS 2 wrap for YOLO models from Ultralytics to perform object detection and tracking, instance segmentation, human pose estimation, Oriented Bounding Box (OBB) and image classification. There are also 3D versions of object detection, instance segmentation and human pose estimation based on depth images.

The pipeline is a pure C++ / ONNX Runtime implementation: there is no Python runtime and no ultralytics dependency at run time. It runs any Ultralytics-exported ONNX model (see Models), and the whole repository is licensed under MIT. Every stage runs inside a single yolo_node executable as a pluginlib plugin — detection, tracking, 3D lifting and debug rendering — exchanging data over an in-memory typed blackboard.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) [![GitHub release](https://img.shields.io/github/release/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/releases) [![Code Size](https://img.shields.io/github/languages/code-size/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/mgonzs13/yolo_ros.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/commits/main) [![GitHub issues](https://img.shields.io/github/issues/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/mgonzs13/yolo_ros)](https://github.com/mgonzs13/yolo_ros/pulls) [![Contributors](https://img.shields.io/github/contributors/mgonzs13/yolo_ros.svg)](https://github.com/mgonzs13/yolo_ros/graphs/contributors) [![Doxygen Deployment](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml/badge.svg?branch=main)](https://github.com/mgonzs13/yolo_ros/actions/workflows/doxygen-deployment.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | | :----------: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | | **Foxy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Foxy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/foxy-build-test.yml?branch=main&event=push&label=Foxy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/foxy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=foxy) | | **Galactic** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Galactic Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/galactic-build-test.yml?branch=main&event=push&label=Galactic)](https://github.com/mgonzs13/yolo_ros/actions/workflows/galactic-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=galactic) | | **Humble** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Humble Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/humble-build-test.yml?branch=main&event=push&label=Humble)](https://github.com/mgonzs13/yolo_ros/actions/workflows/humble-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=humble) | | **Iron** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Iron Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/iron-build-test.yml?branch=main&event=push&label=Iron)](https://github.com/mgonzs13/yolo_ros/actions/workflows/iron-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=iron) | | **Jazzy** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Jazzy Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/jazzy-build-test.yml?branch=main&event=push&label=Jazzy)](https://github.com/mgonzs13/yolo_ros/actions/workflows/jazzy-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=jazzy) | | **Kilted** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Kilted Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/kilted-build-test.yml?branch=main&event=push&label=Kilted)](https://github.com/mgonzs13/yolo_ros/actions/workflows/kilted-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=kilted) | | **Lyrical** | [`main`](https://github.com/mgonzs13/yolo_ros/tree/main) | [![Lyrical Build](https://img.shields.io/github/actions/workflow/status/mgonzs13/yolo_ros/lyrical-build-test.yml?branch=main&event=push&label=Lyrical)](https://github.com/mgonzs13/yolo_ros/actions/workflows/lyrical-build-test.yml?query=branch%3Amain) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-lyrical-blue)](https://hub.docker.com/r/mgons/yolo_ros/tags?name=lyrical) |

Table of Contents

  1. Installation
  2. Docker
  3. Models
  4. Usage
  5. Demos
  6. Documentation
  7. License

Installation

The node builds as a standard ROS 2 colcon workspace. ONNX Runtime 1.20.0 is downloaded automatically by yolo_onnxruntime_vendor at configure time — the CPU tarball by default, the GPU tarball with -DONNX_GPU=ON — so the runtime is not something you install by hand.

Prerequisites and checkout, common to every backend:

# Clone this repo
cd ~/ros2_ws/src
git clone https://github.com/mgonzs13/yolo_ros.git

# Install rosdep dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

CPU (x64 and aarch64)

colcon build --symlink-install
source install/setup.bash

yolo_onnxruntime_vendor downloads the CPU ONNX Runtime for the host architecture (x86_64 or aarch64) and the node runs on the CPU execution provider — no CUDA or cuDNN required.

CUDA / TensorRT (x64)

The vendor package detects the CUDA major and downloads the matching ONNX Runtime GPU build, which needs the cuDNN major shown:

CUDA ONNX Runtime cuDNN
11 1.18.0 8
12 1.20.0 9
13 1.28.0 9
# Scripted: detects CUDA + Ubuntu, installs the matching cuDNN, runs ldconfig
# and verifies it (--tensorrt for the TensorRT EP, --ubuntu 2004|2204|2404 to
# override the detected release, --dry-run to preview).
sudo yolo_onnxruntime_vendor/scripts/install_gpu_deps.sh

colcon build --symlink-install --cmake-args -DONNX_GPU=ON
source install/setup.bash

Or manually (only add the keyring when apt does not know libcudnn9-*, e.g. systems set up from a local cuda-repo-* archive; use the URL matching your Ubuntu release — ubuntu2004 / ubuntu2204 / ubuntu2404):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

# cuDNN matching the detected CUDA major. The -dev package is recommended:
# ONNX Runtime 1.18/1.20 link the versioned libcudnn soname directly, while
# 1.28 resolves it at run time (probing libcudnn.so.9, then libcudnn.so).
sudo apt-get install libcudnn9-dev-cuda-13   # CUDA 13; libcudnn9-dev-cuda-12 for CUDA 12; libcudnn8-dev for CUDA 11
sudo ldconfig

If startup reports Using execution provider: cpu, or the CUDA provider fails with cuDNN is unavailable or disabled ... dlopen failed for libcudnn.so, the runtime libraries are missing or the wrong major — install the cuDNN matching the table (cuDNN 8 for CUDA 11, cuDNN 9 for CUDA 12/13, with the CUDA-major-specific package).

For provider: tensorrt, the ONNX Runtime builds need the TensorRT 10 runtime (libnvinfer.so.10, libnvonnxparser.so.10): install libnvinfer10 and libnvonnxparsers10, or run the script with --tensorrt. The tensorrt meta package may point at a newer major (TensorRT 11) and will not satisfy it; in that case the provider logs Failed to load library .../libonnxruntime_providers_tensorrt.so ... libnvinfer.so.10: cannot open shared object file and provider: tensorrt falls back to CUDA.

-DONNX_GPU=ON detects the CUDA major (CUDA_VERSION env, $CUDA_HOME/version.json, /usr/local/cuda*/version.json, then nvcc) and downloads the matching ONNX Runtime GPU build with its cuDNN major; the host also needs an NVIDIA driver and the same CUDA series at run time. Override the selection with -DONNX_CUDA_MAJOR=11|12|13, -DONNXRUNTIME_VERSION=..., -DONNX_GPU_SUFFIX=... or a full -DONNXRUNTIME_URL=.... TensorRT is opt-in: the default provider: auto runs on the CUDA execution provider and falls back to CPU; set provider: tensorrt to prefer the TensorRT EP (TensorRT → CUDA → CPU) when it is installed. provider and device are chosen at runtime — see Parameters. The prebuilt GPU tarballs are x64-only and cover only the table above; on aarch64 or for any other CUDA/cuDNN combination build from source (see the build guide).

Launch from the workspace root so relative source paths resolve.

Docker

File truncated at 100 lines see the full file