diff --git a/README.md b/README.md index 050bdaea..493943c6 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,9 @@ streamline development and testing with the Isaac ROS suite.
Isaac ROS DevOps tools
-The Docker images included in this package provide pre-compiled binaries -for ROS 2 Humble on Ubuntu 20.04 Focal. - -Additionally, on x86_64 platforms, Docker containers allow you to -quickly set up a sensitive set of frameworks and dependencies to ensure -a smooth experience with Isaac ROS packages. The Dockerfiles for this -platform are based on the version 22.03 image from [Deep Learning +Docker containers allow you to quickly set up a sensitive set of frameworks +and dependencies to ensure a smooth experience with Isaac ROS packages. +The Dockerfiles for x86_64 are based on the version 23.10 image from [Deep Learning Frameworks Containers](https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html). On Jetson platforms, JetPack manages all of these dependencies for you. @@ -35,4 +31,4 @@ Please visit the [Isaac ROS Documentation](https://nvidia-isaac-ros.github.io/re ## Latest -Update 2023-10-18: Updated for Isaac ROS 2.0.0. +Update 2024-05-30: Update to be compatible with JetPack 6.0 diff --git a/docker/Dockerfile.aarch64 b/docker/Dockerfile.aarch64 index 7205f9b3..5df747c5 100644 --- a/docker/Dockerfile.aarch64 +++ b/docker/Dockerfile.aarch64 @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved. # # NVIDIA CORPORATION and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation @@ -7,224 +7,240 @@ # license agreement from NVIDIA CORPORATION is strictly prohibited. # Docker file for aarch64 based Jetson device -ARG BASE_IMAGE="nvcr.io/nvidia/l4t-base:35.4.1" +ARG BASE_IMAGE="nvcr.io/nvidia/l4t-cuda:12.2.12-devel" FROM ${BASE_IMAGE} +# Store list of packages (must be first) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/aarch64-start-packages.csv + # Disable terminal interaction for apt ENV DEBIAN_FRONTEND=noninteractive ENV SHELL /bin/bash SHELL ["/bin/bash", "-c"] # Ensure we have universe -RUN apt-get update \ - && apt-get install -y software-properties-common \ - && add-apt-repository universe +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + software-properties-common \ +&& add-apt-repository universe \ +&& apt-get update # Fundamentals -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + apt-utils \ + bash-completion \ build-essential \ ca-certificates \ curl \ git \ + git-lfs \ gnupg2 \ iputils-ping \ + libgoogle-glog-dev \ + locales \ lsb-release \ + software-properties-common \ sudo \ tar \ unzip \ vim \ wget \ - libgoogle-glog-dev \ - software-properties-common \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Upgrade cmake to 3.22.1 to match Ubuntu 22.04 -# Key rotation 2024-01-10 -RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null \ - && echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null \ - && apt-get update \ - && apt-get remove -y cmake && apt-get purge -y cmake && apt-get remove -y cmake-data && apt-get purge -y cmake-data \ - && apt-get install -y cmake=3.22.1-0kitware1ubuntu20.04.1 cmake-data=3.22.1-0kitware1ubuntu20.04.1 \ - && cmake --version \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + zlib1g-dev + +# Add Isaac apt repository +RUN --mount=type=cache,target=/var/cache/apt \ + wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | apt-key add - && \ + grep -qxF "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" /etc/apt/sources.list || \ + echo "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" | tee -a /etc/apt/sources.list \ + && apt-get update + +# Setup Jetson debian repositories +RUN --mount=type=cache,target=/var/cache/apt \ + apt-key adv --fetch-keys https://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ + && apt-key adv --fetch-keys http://l4t-repo.nvidia.com/jetson-ota-internal.key \ + && echo 'deb https://repo.download.nvidia.com/jetson/common r36.3 main' > /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \ + && echo 'deb https://repo.download.nvidia.com/jetson/t234 r36.3 main' >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \ + && apt-get update + +# Python basics +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + python3-dev \ + python3-distutils \ + python3-flake8 \ + python3-pip \ + python3-pytest-cov \ + python3-venv \ + python3-zmq \ + python3.10 \ + python3.10-venv # Set Python3 as default RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 -# Python basics -RUN apt-get update && apt-get install -y \ - python3-dev \ - python3-flake8 \ - python3-pip \ - python3-pytest-cov \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install OpenCV dependencies -RUN apt-get update && apt-get install -y \ - libavformat-dev \ - libjpeg-dev \ - libopenjp2-7-dev \ - libpng-dev \ - libpq-dev \ - libswscale-dev \ - libtbb2 \ - libtbb-dev \ - libtiff-dev \ - pkg-config \ - yasm \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install additional packages needed for ROS 2 dependencies -RUN apt-get update && apt-get install -y \ - python3-distutils \ +# Core dev libraries +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + ffmpeg \ + gfortran \ + graphicsmagick-libmagick-dev-compat \ + jq \ + kmod \ + lcov \ + libasio-dev \ + libassimp-dev \ + libatlas-base-dev \ + libblas3 \ + libatlas3-base \ libboost-all-dev \ libboost-dev \ - libpcl-dev \ - libode-dev \ - lcov \ - python3-zmq \ - libxaw7-dev \ - libgraphicsmagick++1-dev \ - graphicsmagick-libmagick-dev-compat \ libceres-dev \ - libsuitesparse-dev \ + libbullet-dev \ + libcunit1-dev \ + libffi7 \ + libfreetype6 \ + libgraphicsmagick++1-dev \ + libhidapi-libusb0 \ + libinput10 \ + libjpeg8 \ + liblapack3 \ + libmnl0 \ + libmnl-dev \ libncurses5-dev \ - libassimp-dev \ - libyaml-cpp-dev \ + libode-dev \ + libopenblas0 \ + libopencv-dev=4.5.4+dfsg-9ubuntu4 \ + libopenmpi3 \ libpcap-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# sklearn dependencies -RUN apt-get update && apt-get install -y \ - gfortran \ - libatlas-base-dev \ - python3-scipy \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + libpcl-dev \ + libsuitesparse-dev \ + libtinyxml2-dev \ + libturbojpeg \ + linuxptp \ + libunwind8 \ + libv4l-0 \ + libx264-dev \ + libxaw7-dev \ + libyaml-cpp-dev \ + llvm-14 \ + nlohmann-json3-dev \ + python3-opencv=4.5.4+dfsg-9ubuntu4 \ + python3-scipy -# sklearn Python dependencies +# Additional Python dependencies RUN python3 -m pip install -U \ Cython \ - wheel - -# Install sklearn -RUN python3 -m pip install -U \ - scikit-learn + pymongo \ + wheel \ + scikit-learn \ + ninja \ + networkx \ + numpy \ + numpy-quaternion \ + pyyaml \ + setuptools_scm>=6.2 \ + trimesh \ + yourdfpy>=0.0.53 \ + warp-lang>=0.9.0 \ + scipy>=1.7.0 \ + tqdm \ + importlib_resources -# Install Git-LFS -RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ - apt-get update && apt-get install -y \ - git-lfs \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install TensorRT and VPI -RUN apt-get update && apt-get install -y \ - tensorrt \ - vpi2-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install tao-converter -COPY tao/tao-converter-aarch64-tensorrt8.4.zip /opt/nvidia/tao/tao-converter-aarch64-tensorrt8.4.zip -RUN mkdir -p /opt/nvidia/tao && \ - cd /opt/nvidia/tao && \ - unzip -j tao-converter-aarch64-tensorrt8.4.zip -d /opt/nvidia/tao/jp5 && \ - chmod 755 $(find /opt/nvidia/tao -name "tao-converter") && \ - ln -sf $(find /opt/nvidia/tao -name "tao-converter") /opt/nvidia/tao/tao-converter && \ - rm tao-converter-aarch64-tensorrt8.4.zip - -ENV PATH="${PATH}:/opt/nvidia/tao" # Update environment -ENV LD_LIBRARY_PATH="/opt/nvidia/vpi2/lib64:${LD_LIBRARY_PATH}" +RUN update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-14 14 +ENV LD_LIBRARY_PATH="/opt/nvidia/vpi3/lib64:${LD_LIBRARY_PATH}" ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra:${LD_LIBRARY_PATH}" -ENV LD_LIBRARY_PATH="/usr/local/cuda-11.4/targets/aarch64-linux/lib:${LD_LIBRARY_PATH}" +ENV LD_LIBRARY_PATH="/usr/local/cuda-12.2/targets/aarch64-linux/lib:${LD_LIBRARY_PATH}" ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra-egl:${LD_LIBRARY_PATH}" ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra/weston:${LD_LIBRARY_PATH}" ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/aarch64-linux-gnu-host" -ENV PATH="${PATH}:/usr/local/cuda/bin" +ENV PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/src/tensorrt/bin:${PATH}" + +# Install CUDA packages +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y --no-install-recommends \ + cuda-cudart-12-2 \ + cuda-libraries-12-2 \ + cuda-nvml-dev-12-2 \ + cuda-sanitizer-12-2 \ + cuda-toolkit-12-2 \ + libcublas-12-2 \ + libcudnn8 \ + libcusparse-12-2 \ + libnpp-12-2 + +# Install TensorRT and VPI +RUN --mount=type=cache,target=/var/cache/apt \ +mkdir -p /lib/firmware && \ +apt-get update && apt-get install -y \ + libnvvpi3 \ + tensorrt \ + vpi3-dev + +# Install Tao converter +RUN mkdir -p /opt/nvidia/tao && cd /opt/nvidia/tao && \ + wget --content-disposition 'https://api.ngc.nvidia.com/v2/resources/org/nvidia/team/tao/tao-converter/v5.1.0_jp6.0_aarch64/files?redirect=true&path=tao-converter' -O tao-converter && \ + chmod 755 tao-converter -# https://forums.developer.nvidia.com/t/error-importerror-usr-lib-aarch64-linux-gnu-libgomp-so-1-cannot-allocate-memory-in-static-tls-block-i-looked-through-available-threads-already/166494/3 -ENV LD_PRELOAD="/usr/lib/aarch64-linux-gnu/libgomp.so.1" +ENV PATH="${PATH}:/opt/nvidia/tao" +ENV TRT_LIB_PATH="/usr/lib/aarch64-linux-gnu" +ENV TRT_INCLUDE_PATH="/usr/include/aarch64-linux-gnu" # PyTorch (NV CUDA edition) # https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html RUN python3 -m pip install --no-cache \ - https://developer.download.nvidia.cn/compute/redist/jp/v50/pytorch/torch-1.13.0a0+340c4120.nv22.06-cp38-cp38-linux_aarch64.whl - -# Install Triton server 2.24 from https://github.com/triton-inference-server/server/releases/tag/v2.24.0 -RUN apt-get update && apt-get install -y --no-install-recommends \ - autoconf \ - automake \ - libb64-dev \ - libcurl4-openssl-dev \ - libopenblas-dev \ - libre2-dev \ - libssl-dev \ - libtool \ - patchelf \ + https://developer.download.nvidia.com/compute/redist/jp/v60dp/pytorch/torch-2.2.0a0+6a974be.nv23.11-cp310-cp310-linux_aarch64.whl + +# Install Triton server from https://github.com/triton-inference-server/server/releases/tag/v2.40.0 +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y --no-install-recommends \ + libb64-0d \ + libre2-9 \ rapidjson-dev \ - zlib1g-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + libopenblas-dev \ + libarchive-dev -RUN mkdir -p /opt/tritonserver && cd /opt/tritonserver \ - && wget https://github.com/triton-inference-server/server/releases/download/v2.24.0/tritonserver2.24.0-jetpack5.0.2.tgz \ - && tar -xzvf tritonserver2.24.0-jetpack5.0.2.tgz \ - && rm tritonserver2.24.0-jetpack5.0.2.tgz +RUN --mount=type=cache,target=/var/cache/apt \ + cd /opt \ + && wget https://github.com/triton-inference-server/server/releases/download/v2.40.0/tritonserver2.40.0-igpu.tar.gz \ + && tar -xzvf tritonserver2.40.0-igpu.tar.gz \ + && chmod 644 /opt/tritonserver/backends/tensorflow/libtensorflow_cc.so.2 \ + && chmod 644 /opt/tritonserver/backends/tensorflow/libtensorflow_framework.so.2 \ + && rm tritonserver2.40.0-igpu.tar.gz ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/tritonserver/lib" +# Install boost version >= 1.78 for boost::span +# Current libboost-dev apt packages are < 1.78, so install from tar.gz +RUN --mount=type=cache,target=/var/cache/apt \ + wget -O /tmp/boost.tar.gz \ + https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz \ + && (cd /tmp && tar xzf boost.tar.gz) \ + && cd /tmp/boost_1_80_0 \ + && ./bootstrap.sh --prefix=/usr \ + && ./b2 install \ + && rm -rf /tmp/boost* + +# Install CV-CUDA +RUN --mount=type=cache,target=/var/cache/apt \ + cd /tmp && \ + wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ + dpkg -i nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ + wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ + dpkg -i nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb + # Add MQTT binaries and libraries -RUN apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ - && apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ +&& apt-get update && apt-get install -y \ mosquitto \ - mosquitto-clients \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + mosquitto-clients -# Note: VPN cannot be on for pymongo download +# Install jtop RUN python3 -m pip install -U \ - pymongo \ - paho-mqtt + jetson-stats -# Core dev libraries -RUN apt-get update && apt-get install -y \ - libasio-dev \ - libbullet-dev \ - libtinyxml2-dev \ - libcunit1-dev \ - libopencv-dev=4.2.0+dfsg-5 \ - python3-opencv=4.2.0+dfsg-5 \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# NPP library -RUN apt-get update && apt-get install -y --no-install-recommends \ - libnpp-dev-11-4 \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Upgrade libc to resolve vulnerabilities including CVE-2019-11477 -RUN apt-get update && apt-get install -y --only-upgrade \ - linux-libc-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Downgrade protobuf -RUN python3 -m pip install \ - protobuf==3.20.1 - -# # GPU usage monitoring on Jetson -# RUN python3 -m pip install -U \ -# jetson-stats - -# Apply libcudacxx patch for fixing C++17 compilation errors in GXF -COPY patches/libcudacxx_aarch64_cuda_11_4.diff /tmp/ -RUN patch -i /tmp/libcudacxx_aarch64_cuda_11_4.diff /usr/local/cuda-11.4/targets/aarch64-linux/include/cuda/std/detail/libcxx/include/cmath +# Store list of packages (must be last) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/aarch64-end-packages.csv \ No newline at end of file diff --git a/docker/Dockerfile.aarch64.ros2_humble b/docker/Dockerfile.aarch64.ros2_humble deleted file mode 100644 index d7083d04..00000000 --- a/docker/Dockerfile.aarch64.ros2_humble +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. - -FROM nvcr.io/nvidia/isaac/ros:aarch64-ros2_humble_b7e1ed6c02a6fa3c1c7392479291c035 diff --git a/docker/Dockerfile.cvcuda b/docker/Dockerfile.cvcuda deleted file mode 100644 index 1129ac41..00000000 --- a/docker/Dockerfile.cvcuda +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. - -# Install cvCUDA into the dev image - -ARG BASE_IMAGE -FROM ${BASE_IMAGE} - -RUN if [ "$(uname -m)" = "x86_64" ]; then \ - cd /tmp; \ - wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-lib-0.4.0_beta-cuda11-x86_64-linux.deb; \ - dpkg -i nvcv-lib-0.4.0_beta-cuda11-x86_64-linux.deb; \ - wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-dev-0.4.0_beta-cuda11-x86_64-linux.deb; \ - dpkg -i nvcv-dev-0.4.0_beta-cuda11-x86_64-linux.deb; \ - wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-lib-0.4.0_beta-cuda11-x86_64-linux.deb; \ - dpkg -i nvcv-lib-0.4.0_beta-cuda11-x86_64-linux.deb; \ - else \ - echo "Not available on aarch64 pending availability of https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-lib-0.4.0_beta-cuda11-aarch64-linux.deb" ; \ - # cd /tmp; \ - # wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-lib-0.4.0_beta-cuda11-aarch64-linux.deb; \ - # dpkg -i nvcv-lib-0.4.0_beta-cuda11-aarch64-linux.deb; \ - # wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.4.0-beta/nvcv-dev-0.4.0_beta-cuda11-aarch64-linux.deb; \ - # dpkg -i nvcv-dev-0.4.0_beta-cuda11-aarch64-linux.deb; \ - fi - diff --git a/docker/Dockerfile.realsense b/docker/Dockerfile.realsense index 56cb3f02..f81d9c45 100644 --- a/docker/Dockerfile.realsense +++ b/docker/Dockerfile.realsense @@ -11,15 +11,39 @@ ARG BASE_IMAGE FROM ${BASE_IMAGE} +ARG LIBREALSENSE_SOURCE_VERSION=v2.55.1 +ARG LIBREALSENSE_DEB_VERSION=2.55.1-0~realsense.12474 +ARG LIBREALSENSE_DKMS_DEB_VERSION=1.3.26-0ubuntu1 +ARG REALSENSE2_CAMERA_ROS_DEB_VERSION=4.54.1-1jammy.20240517.191635 + +# Install realsense2-camera ROS package and librealsense from binaries for x86_64 only +RUN --mount=type=cache,target=/var/cache/apt \ + if [[ "$(uname -m)" == "x86_64" ]]; then \ + mkdir -p /etc/apt/keyrings && \ + curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | \ + tee /etc/apt/keyrings/librealsense.pgp > /dev/null && \ + echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] \ + https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \ + tee /etc/apt/sources.list.d/librealsense.list && apt-get update && \ + apt-get install -y \ + librealsense2-dkms=${LIBREALSENSE_DKMS_DEB_VERSION} \ + librealsense2-utils=${LIBREALSENSE_DEB_VERSION} \ + librealsense2-dev=${LIBREALSENSE_DEB_VERSION} \ + ros-humble-realsense2-camera=${REALSENSE2_CAMERA_ROS_DEB_VERSION}; \ + fi + COPY scripts/build-librealsense.sh /opt/realsense/build-librealsense.sh COPY scripts/install-realsense-dependencies.sh /opt/realsense/install-realsense-dependencies.sh -RUN chmod +x /opt/realsense/install-realsense-dependencies.sh && /opt/realsense/install-realsense-dependencies.sh -RUN chmod +x /opt/realsense/build-librealsense.sh && /opt/realsense/build-librealsense.sh +# Build librealsense from source for aarch64 only +# The realsense2-camera ROS package will be built from source as part of the "RealSense Setup docs" for aarch64 only +RUN if [[ $(uname -m) == "aarch64" ]]; then \ + chmod +x /opt/realsense/install-realsense-dependencies.sh && \ + /opt/realsense/install-realsense-dependencies.sh; \ + chmod +x /opt/realsense/build-librealsense.sh && /opt/realsense/build-librealsense.sh -v ${LIBREALSENSE_SOURCE_VERSION}; \ + fi -# Copy hotplug script which will get invoked whenever a devices plugged or un-plugged +# Copy hotplug script for udev rules/hotplug for RealSense RUN mkdir -p /opt/realsense/ COPY scripts/hotplug-realsense.sh /opt/realsense/hotplug-realsense.sh - -# Copy custom udev rules file COPY udev_rules/99-realsense-libusb-custom.rules /etc/udev/rules.d/99-realsense-libusb-custom.rules diff --git a/docker/Dockerfile.ros2_humble b/docker/Dockerfile.ros2_humble index 8af1d4b5..c6c6262b 100644 --- a/docker/Dockerfile.ros2_humble +++ b/docker/Dockerfile.ros2_humble @@ -1,4 +1,4 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved. # # NVIDIA CORPORATION and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation @@ -9,14 +9,16 @@ ARG BASE_IMAGE FROM $BASE_IMAGE +# Store list of packages (must be first) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/ros2_humble-start-packages.csv + # disable terminal interaction for apt ENV DEBIAN_FRONTEND=noninteractive ENV SHELL /bin/bash SHELL ["/bin/bash", "-c"] # Env setup -RUN locale-gen en_US en_US.UTF-8 -RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 +RUN locale-gen en_US en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 ENV LANG=en_US.UTF-8 ENV ROS_PYTHON_VERSION=3 ENV ROS_DISTRO=humble @@ -25,31 +27,23 @@ ENV RMW_IMPLEMENTATION=rmw_fastrtps_cpp # Avoid setup.py and easy_install deprecation warnings caused by colcon and setuptools # https://github.com/colcon/colcon-core/issues/454 -ENV PYTHONWARNINGS=ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources +ENV PYTHONWARNINGS=ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources,ignore:::setuptools.command.develop RUN echo "Warning: Using the PYTHONWARNINGS environment variable to silence setup.py and easy_install deprecation warnings caused by colcon" # Add ROS 2 apt repository -RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg -RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2-testing/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null - -# Add Isaac apt repository -RUN wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | apt-key add - && \ - grep -qxF 'deb https://isaac.download.nvidia.com/isaac-ros/ubuntu/main focal main' /etc/apt/sources.list || \ - echo 'deb https://isaac.download.nvidia.com/isaac-ros/ubuntu/main focal main' | tee -a /etc/apt/sources.list - -# Basics -RUN apt-get update && apt-get install -y \ - curl \ - gnupg \ - lsb-release \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean +RUN --mount=type=cache,target=/var/cache/apt \ + curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null \ + && apt-get update # ROS fundamentals -RUN apt-get update && apt-get install -y \ - build-essential \ - git \ - libyaml-cpp-dev=0.7.0+dfsg-8backport \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + devscripts \ + dh-make \ + fakeroot \ + libxtensor-dev \ + python3-bloom \ python3-colcon-common-extensions \ python3-pip \ python3-pybind11 \ @@ -57,9 +51,7 @@ RUN apt-get update && apt-get install -y \ python3-rosdep \ python3-rosinstall-generator \ python3-vcstool \ - wget \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + quilt # ROS Python fundamentals RUN python3 -m pip install -U \ @@ -71,24 +63,16 @@ RUN python3 -m pip install -U \ flake8-docstrings \ flake8-import-order \ flake8-quotes \ - pytest-repeat \ - pytest-rerunfailures \ - pytest \ + numpy>=1.24.4 \ + matplotlib \ + pandas \ + rosbags \ setuptools==65.7.0 -# Basics -RUN apt-get update && apt-get install -y \ - curl \ - gnupg \ - locales \ - lsb-release \ - python3-bloom \ - libxtensor-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - # Install ROS 2 Humble -RUN apt-get update && apt-get install -y ros-humble-ros-base \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + ros-humble-ros-base \ ros-humble-angles \ ros-humble-apriltag \ ros-humble-behaviortree-cpp-v3 \ @@ -100,6 +84,7 @@ RUN apt-get update && apt-get install -y ros-humble-ros-base \ ros-humble-cv-bridge \ ros-humble-demo-nodes-cpp \ ros-humble-demo-nodes-py \ + ros-humble-diagnostic-aggregator \ ros-humble-diagnostic-updater \ ros-humble-example-interfaces \ ros-humble-foxglove-bridge \ @@ -114,12 +99,22 @@ RUN apt-get update && apt-get install -y ros-humble-ros-base \ ros-humble-nav2-bringup \ ros-humble-nav2-msgs \ ros-humble-nav2-mppi-controller \ + ros-humble-nav2-graceful-controller \ ros-humble-navigation2 \ ros-humble-ompl \ ros-humble-resource-retriever \ + ros-humble-rmw-cyclonedds-cpp \ + ros-humble-rmw-fastrtps-cpp \ + ros-humble-rosbag2 \ + ros-humble-rosbag2-compression-zstd \ + ros-humble-rosbag2-cpp \ + ros-humble-rosbag2-py \ + ros-humble-rosbag2-storage-mcap \ + ros-humble-rosbridge-suite \ ros-humble-rqt-graph \ - ros-humble-rqt-reconfigure \ ros-humble-rqt-image-view \ + ros-humble-rqt-reconfigure \ + ros-humble-rqt-robot-monitor \ ros-humble-rviz2 \ ros-humble-rviz-common \ ros-humble-rviz-default-plugins \ @@ -128,56 +123,32 @@ RUN apt-get update && apt-get install -y ros-humble-ros-base \ ros-humble-v4l2-camera \ ros-humble-vision-opencv \ ros-humble-vision-msgs \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Build Essentials -RUN apt-get update && apt-get install -y \ - build-essential \ - devscripts \ - dh-make \ - quilt \ - fakeroot \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + ros-humble-vision-msgs-rviz-plugins # Setup rosdep -RUN rosdep init \ - && mkdir -p /etc/ros/rosdep/sources.list.d/ \ - && curl -o /etc/ros/rosdep/sources.list.d/nvidia-isaac.yaml https://isaac.download.nvidia.com/isaac-ros/extra_rosdeps.yaml \ +COPY rosdep/extra_rosdeps.yaml /etc/ros/rosdep/sources.list.d/nvidia-isaac.yaml +RUN --mount=type=cache,target=/var/cache/apt \ + rosdep init \ && echo "yaml file:///etc/ros/rosdep/sources.list.d/nvidia-isaac.yaml" | tee /etc/ros/rosdep/sources.list.d/00-nvidia-isaac.list \ && rosdep update ####### -- Install updated packages over installed debians # Install negotiated from source -RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ && git clone https://github.com/osrf/negotiated && cd negotiated && git checkout master \ && source ${ROS_ROOT}/setup.bash \ && cd negotiated_interfaces && bloom-generate rosdebian && fakeroot debian/rules binary \ && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ && cd negotiated && bloom-generate rosdebian && fakeroot debian/rules binary \ - && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install vda5050_msgs from source -RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ - && git clone https://github.com/ipa320/vda5050_msgs.git vda5050_root \ - && cd vda5050_root && git checkout ros2 && cd .. \ - && mv vda5050_root/vda5050_msgs/ vda5050_msgs \ - && rm -rf vda5050_root \ - && source ${ROS_ROOT}/setup.bash \ - && cd vda5050_msgs && bloom-generate rosdebian && fakeroot debian/rules binary \ - && cd ../ && apt-get install -y ./*.deb \ - && cd ../ && rm -Rf src build log \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb # Install image_proc from 55bf2a38 with backported resize node fix # https://github.com/ros-perception/image_pipeline/pull/786/commits/969d6c763df99b42844742946f7a70c605a72a15 # Revert breaking QoS changes in https://github.com/ros-perception/image_pipeline/pull/814 -RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ && git clone https://github.com/ros-perception/image_pipeline.git && cd image_pipeline && git checkout 55bf2a38c327b829c3da444f963a6c66bfe0598f \ && git config user.email "builder@nvidia.com" && git config user.name "NVIDIA Builder" \ && git remote add fork https://github.com/schornakj/image_pipeline.git && git fetch fork && git cherry-pick 969d6c763df99b42844742946f7a70c605a72a15 \ @@ -185,15 +156,14 @@ RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ && cd image_proc && bloom-generate rosdebian && fakeroot debian/rules binary \ && cd ../ && apt-get install -y --allow-downgrades ./*.deb \ && echo "image_pipeline (image_proc) https://github.com/ros-perception/image_pipeline/pull/786/commits/969d6c763df99b42844742946f7a70c605a72a15 on 55bf2a38" >> ${ROS_ROOT}/VERSION \ - && cd ../ && rm -Rf src build log \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + && cd ../ && rm -Rf src build log # Install patched rclcpp package with backported multithreadedexecutor fix # https://github.com/ros2/rclcpp/commit/232262c02a1265830c7785b7547bd51e1124fcd8 COPY patches/rclcpp-disable-tests.patch /tmp/ -RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ - && export RCLCPP_VERSION="release/humble/rclcpp/$(apt-cache madison ros-humble-rclcpp | grep -m1 -oP 'ros-humble-rclcpp \| \K[^f]+(?=focal)')" \ +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ + && export RCLCPP_VERSION="release/humble/rclcpp/$(apt-cache madison ros-humble-rclcpp | grep -m1 -oP 'ros-humble-rclcpp \| \K[^j]+(?=jammy)')" \ && echo ${RCLCPP_VERSION} \ && git clone https://github.com/ros2-gbp/rclcpp-release.git && cd rclcpp-release && git checkout ${RCLCPP_VERSION} \ && patch -i /tmp/rclcpp-disable-tests.patch \ @@ -206,21 +176,107 @@ RUN apt-get update && mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ && cd rclcpp-release && bloom-generate rosdebian && fakeroot debian/rules binary \ && cd ../ && apt-get install -y --allow-downgrades ./*.deb \ && echo "rclcpp https://github.com/ros2/rclcpp/commit/232262c02a1265830c7785b7547bd51e1124fcd8" >> ${ROS_ROOT}/VERSION \ - && cd ../ && rm -Rf src build log \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + && cd ../ && rm -Rf src build log -# Install additional ROS packages -RUN apt-get update && apt-get install -y \ - ros-humble-camera-info-manager \ - ros-humble-rosbag2 \ - ros-humble-rosbag2-compression-zstd \ - ros-humble-rosbag2-cpp \ - ros-humble-rosbag2-py \ - ros-humble-rosbridge-suite \ - ros-humble-rqt-graph \ - ros-humble-rqt-reconfigure \ - ros-humble-rviz-common \ - ros-humble-rviz-default-plugins \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean +# Install Moveit 2 ROS packages +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + ros-humble-ament-cmake \ + ros-humble-ament-cmake-gtest \ + ros-humble-control-msgs \ + ros-humble-controller-manager \ + ros-humble-geometric-shapes \ + ros-humble-gripper-controllers \ + ros-humble-interactive-markers \ + ros-humble-joint-state-broadcaster \ + ros-humble-joint-state-publisher \ + ros-humble-joint-trajectory-controller \ + ros-humble-joy \ + ros-humble-launch-param-builder \ + ros-humble-moveit \ + ros-humble-moveit-common \ + ros-humble-moveit-configs-utils \ + ros-humble-moveit-core \ + ros-humble-moveit-msgs \ + ros-humble-moveit-ros-perception \ + ros-humble-moveit-ros-planning \ + ros-humble-moveit-ros-planning-interface \ + ros-humble-moveit-servo \ + ros-humble-moveit-visual-tools \ + ros-humble-pluginlib \ + ros-humble-robot-state-publisher \ + ros-humble-ros2-control \ + ros-humble-rviz-visual-tools \ + ros-humble-rviz2 \ + ros-humble-srdfdom \ + ros-humble-tf2-eigen \ + ros-humble-tf2-geometry-msgs \ + ros-humble-tf2-ros \ + ros-humble-topic-based-ros2-control \ + ros-humble-ur-description \ + ros-humble-ur-moveit-config \ + ros-humble-ur-msgs \ + ros-humble-xacro + +# Install various moveit_resources packages from source. +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ + && git clone https://github.com/ros-planning/moveit_resources.git -b humble \ + && cd moveit_resources && source ${ROS_ROOT}/setup.bash \ + && cd fanuc_description && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb \ + && cd fanuc_moveit_config && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb \ + && cd panda_description && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb \ + && cd panda_moveit_config && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb \ + && cd pr2_description && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb \ + && cd moveit_resources && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd .. && apt-get install -y ./*.deb && rm *.deb + +# Install MoveIt task constructor from source. The "demo" package depends on moveit_resources_panda_moveit_config, +# installed from source above. +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ + && git clone https://github.com/ros-planning/moveit_task_constructor.git -b humble \ + && cd moveit_task_constructor && source ${ROS_ROOT}/setup.bash \ + && cd msgs && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ + && cd rviz_marker_tools && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ + && cd core && bloom-generate rosdebian && fakeroot debian/rules binary DEB_BUILD_OPTIONS=nocheck \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ + && cd capabilities && bloom-generate rosdebian && fakeroot debian/rules binary DEB_BUILD_OPTIONS=nocheck \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ + && cd visualization && bloom-generate rosdebian && fakeroot debian/rules binary DEB_BUILD_OPTIONS=nocheck \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb \ + && cd demo && bloom-generate rosdebian && fakeroot debian/rules binary DEB_BUILD_OPTIONS=nocheck \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb + +# MoveIt 2's hybrid planning package depends on moveit_resources_panda_moveit_config, installed from source above. +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + ros-humble-moveit-hybrid-planning + +# Install moveit2_tutorials from source (depends on moveit_hybrid_planning). +RUN --mount=type=cache,target=/var/cache/apt \ + mkdir -p ${ROS_ROOT}/src && cd ${ROS_ROOT}/src \ + && git clone https://github.com/ros-planning/moveit2_tutorials.git -b humble \ + && cd moveit2_tutorials && source ${ROS_ROOT}/setup.bash \ + && bloom-generate rosdebian && fakeroot debian/rules binary \ + && cd ../ && apt-get install -y ./*.deb && rm ./*.deb + +# Install paho-mqtt for isaac_ros_mission_client +RUN python3 -m pip install -U \ + paho-mqtt==1.6.1 + +# Patch gtest to make it work with CXX 17 +RUN sudo sed -i '917i #ifdef GTEST_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL' /usr/src/googletest/googletest/include/gtest/internal/gtest-internal.h \ + && sudo sed -i '920i #endif' /usr/src/googletest/googletest/include/gtest/internal/gtest-internal.h \ + && sudo sed -i '2392i #if defined(GTEST_INTERNAL_CPLUSPLUS_LANG) && \\\n GTEST_INTERNAL_CPLUSPLUS_LANG < 201703L\n#define GTEST_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL 1\n#endif' \ + /usr/src/googletest/googletest/include/gtest/internal/gtest-port.h + +# Store list of packages (must be last) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/ros2_humble-end-packages.csv diff --git a/docker/Dockerfile.user b/docker/Dockerfile.user index 1c85b74d..fc0baa66 100644 --- a/docker/Dockerfile.user +++ b/docker/Dockerfile.user @@ -15,11 +15,10 @@ ARG USER_UID=1000 ARG USER_GID=1000 # Install prerequisites -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ sudo \ - udev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + udev # Reuse triton-server user as 'admin' user if exists RUN if [ $(getent group triton-server) ]; then \ @@ -27,12 +26,14 @@ RUN if [ $(getent group triton-server) ]; then \ usermod -l ${USERNAME} -u ${USER_UID} -m -d /home/${USERNAME} triton-server ; \ mkdir -p /home/${USERNAME} ; \ sudo chown ${USERNAME}:${USERNAME} /home/${USERNAME} ; \ + # Wipe files that may create issues for users with large uid numbers. + rm -f /var/log/lastlog /var/log/faillog ; \ fi # Create the 'admin' user if not already exists RUN if [ ! $(getent passwd ${USERNAME}) ]; then \ groupadd --gid ${USER_GID} ${USERNAME} ; \ - useradd --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} ; \ + useradd --no-log-init --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} ; \ fi # Update 'admin' user @@ -52,3 +53,9 @@ COPY middleware_profiles/*profile.xml /usr/local/share/middleware_profiles/ ENV USERNAME=${USERNAME} ENV USER_GID=${USER_GID} ENV USER_UID=${USER_UID} + +# Switch to non-root user and return to root +USER ${USERNAME} +RUN --mount=type=cache,target=/var/cache/apt \ + rosdep update +USER root \ No newline at end of file diff --git a/docker/Dockerfile.x86_64 b/docker/Dockerfile.x86_64 index afada05e..5fc2f78c 100644 --- a/docker/Dockerfile.x86_64 +++ b/docker/Dockerfile.x86_64 @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved. # # NVIDIA CORPORATION and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation @@ -9,32 +9,34 @@ # Docker file to build on x86_64 # https://docs.nvidia.com/deeplearning/frameworks/user-guide/index.html # https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html -ARG BASE_IMAGE=nvcr.io/nvidia/tritonserver:22.09-py3 +ARG BASE_IMAGE=nvcr.io/nvidia/tritonserver:23.10-py3 FROM ${BASE_IMAGE} +# Store list of packages (must be first) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/x86_64-start-packages.csv + # disable terminal interaction for apt ENV DEBIAN_FRONTEND=noninteractive ENV SHELL /bin/bash SHELL ["/bin/bash", "-c"] -# NVIDIA repository keys: https://developer.nvidia.com/blog/updating-the-cuda-linux-gpg-repository-key/ -RUN apt-key del 7fa2af80 && mkdir -p /tmp && cd /tmp \ - && wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb \ - && dpkg -i cuda-keyring_1.0-1_all.deb \ - && rm cuda-keyring_1.0-1_all.deb \ - && add-apt-repository --remove 'deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' +# Ensure we have universe +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + software-properties-common \ +&& add-apt-repository universe \ +&& apt-get update # Add Isaac apt repository -RUN wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | apt-key add - -RUN echo 'deb https://isaac.download.nvidia.com/isaac-ros/ubuntu/main focal main' | tee -a /etc/apt/sources.list - -# Ensure we have universe -RUN apt-get update \ - && apt-get install -y software-properties-common \ - && add-apt-repository universe +RUN --mount=type=cache,target=/var/cache/apt \ + wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | apt-key add - && \ + grep -qxF "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" /etc/apt/sources.list || \ + echo "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" | tee -a /etc/apt/sources.list \ + && apt-get update # Fundamentals -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ apt-transport-https \ bash-completion \ build-essential \ @@ -43,6 +45,7 @@ RUN apt-get update && apt-get install -y \ cmake \ curl \ git \ + git-lfs \ gnupg2 \ iputils-ping \ locales \ @@ -53,41 +56,40 @@ RUN apt-get update && apt-get install -y \ vim \ unzip \ mlocate \ - libgoogle-glog-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Set Python3 as default -RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 + libgoogle-glog-dev # Python basics -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ python3-pip \ python3-pybind11 \ - python3-pytest-cov \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Video utilities -RUN apt-get update && apt-get install -y \ - v4l-utils \ - mesa-utils \ - libcanberra-gtk-module \ - libcanberra-gtk3-module \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + python3-pytest \ + python3-pytest-repeat \ + python3-pytest-rerunfailures \ + python3-pytest-cov + +# Set Python3 as default +RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 # Core dev libraries -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + ffmpeg \ libasio-dev \ libbullet-dev \ libtinyxml2-dev \ libcunit1-dev \ + libmnl0 \ + libmnl-dev \ + libv4l-dev \ libyaml-cpp-dev \ libopencv-dev \ + libpython3.10 \ + libx264-dev \ + kmod \ + patchelf \ python3-opencv \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean + nlohmann-json3-dev # Python3 (PIP) RUN python3 -m pip install -U \ @@ -103,117 +105,71 @@ RUN python3 -m pip install -U \ flake8-import-order \ flake8-quotes \ onnx \ - pytest-repeat \ - pytest-rerunfailures \ - pytest \ pydocstyle \ - scikit-learn - -# Install Git-LFS -RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ - apt-get update && apt-get install -y \ - git-lfs \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Upgrade cmake to 3.22.1 to match Ubuntu 22.04 -# Key rotation 2024-01-10 -RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null \ - && echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null \ - && apt-get update \ - && apt-get remove -y cmake && apt-get purge -y cmake && apt-get remove -y cmake-data && apt-get purge -y cmake-data \ - && apt-get install -y cmake=3.22.1-0kitware1ubuntu20.04.1 cmake-data=3.22.1-0kitware1ubuntu20.04.1 \ - && cmake --version \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Pytorch -RUN python3 -m pip install -U --extra-index-url https://download.pytorch.org/whl/cu113 \ - torch \ - torchvision \ - torchaudio + scikit-learn \ + ninja \ + networkx \ + numpy \ + numpy-quaternion \ + pyyaml \ + setuptools_scm>=6.2 \ + trimesh \ + yourdfpy>=0.0.53 \ + warp-lang>=0.9.0 \ + scipy>=1.7.0 \ + tqdm \ + importlib_resources + +# Install nvv4l2 for GXF Multimedia h264 codec +RUN --mount=type=cache,target=/var/cache/apt \ +apt-get update && apt-get install -y \ + nvv4l2 \ +&& ln -s /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so \ +&& ln -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so # Install VPI packages ARG HAS_GPU="true" -RUN if [ "$HAS_GPU" = "true" ]; then \ +RUN --mount=type=cache,target=/var/cache/apt \ + if [ "$HAS_GPU" = "true" ]; then \ set -e ; \ apt-key adv --fetch-key https://repo.download.nvidia.com/jetson/jetson-ota-public.asc ; \ - add-apt-repository 'deb http://repo.download.nvidia.com/jetson/x86_64/focal r35.4 main' ; \ + add-apt-repository "deb http://repo.download.nvidia.com/jetson/x86_64/$(lsb_release -cs) r36.3 main" ; \ apt-get update ; \ - apt-get install libnvvpi2 vpi2-dev ; \ - rm -rf /var/lib/apt/lists/* ; \ - apt-get clean ; \ + apt-get install libnvvpi3 vpi3-dev ; \ fi +# Pytorch +RUN python3 -m pip install -U --extra-index-url https://download.pytorch.org/whl/cu121 \ + torch \ + torchvision \ + torchaudio + # Install Tao converter -RUN mkdir -p /opt/nvidia/tao && \ - cd /opt/nvidia/tao && \ - wget https://developer.nvidia.com/tao-converter-80 && \ - unzip tao-converter-80 && \ - chmod 755 $(find /opt/nvidia/tao -name "tao-converter") && \ - ln -sf $(find /opt/nvidia/tao -name "tao-converter") /opt/nvidia/tao/tao-converter && \ - rm tao-converter-80 +RUN mkdir -p /opt/nvidia/tao && cd /opt/nvidia/tao && \ + wget --content-disposition 'https://api.ngc.nvidia.com/v2/resources/org/nvidia/team/tao/tao-converter/v5.1.0_8.6.3.1_x86/files?redirect=true&path=tao-converter' -O tao-converter && \ + chmod 755 tao-converter ENV PATH="${PATH}:/opt/nvidia/tao" +ENV TRT_LIB_PATH="/usr/lib/x86_64-linux-gnu" +ENV TRT_INC_PATH="/usr/include/x86_64-linux-gnu" # Update environment ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/tritonserver/lib" -# Add MQTT binaries and libraries -RUN apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ - && apt-get update \ - && apt-get install -y mosquitto mosquitto-clients \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean +# Install CV-CUDA +RUN --mount=type=cache,target=/var/cache/apt \ + cd /tmp && \ + wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-lib-0.5.0_beta-cuda12-x86_64-linux.deb && \ + dpkg -i nvcv-lib-0.5.0_beta-cuda12-x86_64-linux.deb && \ + wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-dev-0.5.0_beta-cuda12-x86_64-linux.deb && \ + dpkg -i nvcv-dev-0.5.0_beta-cuda12-x86_64-linux.deb -RUN python3 -m pip install -U \ - paho-mqtt - -# Compression dependencies -RUN apt-get update && apt-get install -y \ - libv4l-dev \ - kmod \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Install NVIDIA v4l2 extensions for h264 support -RUN apt-get update && apt-get install -y nvv4l2 - -# Upgrade libc to resolve vulnerabilities including CVE-2019-11477 -RUN apt-get update && apt-get install -y --only-upgrade \ - linux-libc-dev \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -# Downgrade protobuf -RUN python3 -m pip install \ - protobuf==3.20.1 - -# GPU usage monitoring on x86 -RUN python3 -m pip install \ - gpustat==0.6.0 - -# Python3 (PIP) -RUN python3 -m pip install -U \ - mailcap-fix - -# Resolve vulnerability in mailcap.py by removing it (CVE-2015-20107) -RUN rm -f /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.8/mailcap.py - -# Remove any platform entangling dependencies -RUN touch \ - /usr/lib/x86_64-linux-gnu/libcuda.so \ - /usr/lib/x86_64-linux-gnu/libnvcuvid.so \ - /usr/lib/x86_64-linux-gnu/libnvidia.so \ - /usr/lib/firmware \ - /usr/local/cuda/compat/lib || true - -RUN rm -rf \ - /usr/lib/x86_64-linux-gnu/libcuda.so* \ - /usr/lib/x86_64-linux-gnu/libnvcuvid.so* \ - /usr/lib/x86_64-linux-gnu/libnvidia-*.so* \ - /usr/lib/firmware \ - /usr/local/cuda/compat/lib || true - -# Restore symlink for nvencode -RUN ln -f -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so +# Add MQTT binaries and libraries +RUN --mount=type=cache,target=/var/cache/apt \ +apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ +&& apt-get update && apt-get install -y \ + mosquitto \ + mosquitto-clients + +# Store list of packages (must be last) +RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/x86_64-end-packages.csv \ No newline at end of file diff --git a/docker/Dockerfile.x86_64.ros2_humble b/docker/Dockerfile.x86_64.ros2_humble deleted file mode 100644 index cb883ddc..00000000 --- a/docker/Dockerfile.x86_64.ros2_humble +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. - -FROM nvcr.io/nvidia/isaac/ros:x86_64-ros2_humble_bcf535ea3b9d16a854aaeb1701ab5a86 diff --git a/docker/Dockerfile.zed b/docker/Dockerfile.zed deleted file mode 100644 index 3cfaca0c..00000000 --- a/docker/Dockerfile.zed +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. - -ARG BASE_IMAGE -FROM ${BASE_IMAGE} - -ARG ZED_SDK_MAJOR=4 -ARG ZED_SDK_MINOR=0 - -# zed-ros2-wrapper dependencies -RUN apt-get update && apt-get install -y \ - libgeographic-dev \ - ros-humble-geographic-info \ - ros-humble-nmea-msgs \ - ros-humble-robot-localization \ - ros-humble-xacro \ -&& rm -rf /var/lib/apt/lists/* \ -&& apt-get clean - -RUN mkdir -p /opt/zed/ - -# The zed installation script expects to be run as non-root user and needs the USER ENV variable to be set -ENV USER=${USERNAME} -USER ${USERNAME} - -COPY scripts/install-zed-x86_64.sh /opt/zed/install-zed-x86_64.sh -COPY scripts/install-zed-aarch64.sh /opt/zed/install-zed-aarch64.sh - -RUN sudo chmod +x /opt/zed/install-zed-x86_64.sh -RUN sudo chmod +x /opt/zed/install-zed-aarch64.sh - -RUN if [ "$(uname -m)" = "x86_64" ]; then \ - /opt/zed/install-zed-x86_64.sh; \ - else \ - /opt/zed/install-zed-aarch64.sh; \ - fi - -# Revert to root user -USER root diff --git a/docker/patches/libcudacxx_aarch64_cuda_11_4.diff b/docker/patches/libcudacxx_aarch64_cuda_11_4.diff deleted file mode 100644 index 17bd4df5..00000000 --- a/docker/patches/libcudacxx_aarch64_cuda_11_4.diff +++ /dev/null @@ -1,28 +0,0 @@ -""" - SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - SPDX-License-Identifier: Apache-2.0 - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -""" - ---- usr/local/cuda-11.4/targets/aarch64-linux/include/cuda/std/detail/libcxx/include/cmath 2022-11-09 12:28:48.381859565 -0800 -+++ usr/local/cuda-11.4/targets/aarch64-linux/include/cuda/std/detail/libcxx/include/cmath 2022-11-09 12:28:58.021653123 -0800 -@@ -565,7 +565,7 @@ - using ::truncl; - #endif - --#if _LIBCUDACXX_STD_VER > 14 && (defined(_LIBCUDACXX_NO_HOST_CPP17_HYPOT) || !defined(_LIBCUDACXX_COMPILER_NVCC)) -+#if _LIBCUDACXX_STD_VER > 14 && !defined(__cuda_std__) - inline _LIBCUDACXX_INLINE_VISIBILITY float hypot( float x, float y, float z ) { return sqrt(x*x + y*y + z*z); } - inline _LIBCUDACXX_INLINE_VISIBILITY double hypot( double x, double y, double z ) { return sqrt(x*x + y*y + z*z); } - #ifdef _LIBCUDACXX_HAS_COMPLEX_LONG_DOUBLE diff --git a/docker/rosdep/extra_rosdeps.yaml b/docker/rosdep/extra_rosdeps.yaml new file mode 100644 index 00000000..6879c967 --- /dev/null +++ b/docker/rosdep/extra_rosdeps.yaml @@ -0,0 +1,9091 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +aandd_ekew_driver_py: + ubuntu: + focal: [ros-humble-aandd-ekew-driver-py] + jammy: [ros-humble-aandd-ekew-driver-py] +acado_vendor: + ubuntu: + focal: [ros-humble-acado-vendor] + jammy: [ros-humble-acado-vendor] +acado_vendor_dbgsym: + ubuntu: + focal: [ros-humble-acado-vendor-dbgsym] + jammy: [ros-humble-acado-vendor-dbgsym] +ackermann_msgs: + ubuntu: + focal: [ros-humble-ackermann-msgs] + jammy: [ros-humble-ackermann-msgs] +ackermann_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ackermann-msgs-dbgsym] + jammy: [ros-humble-ackermann-msgs-dbgsym] +ackermann_steering_controller: + ubuntu: + focal: [ros-humble-ackermann-steering-controller] + jammy: [ros-humble-ackermann-steering-controller] +ackermann_steering_controller_dbgsym: + ubuntu: + focal: [ros-humble-ackermann-steering-controller-dbgsym] + jammy: [ros-humble-ackermann-steering-controller-dbgsym] +action_msgs: + ubuntu: + focal: [ros-humble-action-msgs] + jammy: [ros-humble-action-msgs] +action_msgs_dbgsym: + ubuntu: + focal: [ros-humble-action-msgs-dbgsym] + jammy: [ros-humble-action-msgs-dbgsym] +action_tutorials_cpp: + ubuntu: + focal: [ros-humble-action-tutorials-cpp] + jammy: [ros-humble-action-tutorials-cpp] +action_tutorials_cpp_dbgsym: + ubuntu: + focal: [ros-humble-action-tutorials-cpp-dbgsym] + jammy: [ros-humble-action-tutorials-cpp-dbgsym] +action_tutorials_interfaces: + ubuntu: + focal: [ros-humble-action-tutorials-interfaces] + jammy: [ros-humble-action-tutorials-interfaces] +action_tutorials_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-action-tutorials-interfaces-dbgsym] + jammy: [ros-humble-action-tutorials-interfaces-dbgsym] +action_tutorials_py: + ubuntu: + focal: [ros-humble-action-tutorials-py] + jammy: [ros-humble-action-tutorials-py] +actionlib_msgs: + ubuntu: + focal: [ros-humble-actionlib-msgs] + jammy: [ros-humble-actionlib-msgs] +actionlib_msgs_dbgsym: + ubuntu: + focal: [ros-humble-actionlib-msgs-dbgsym] + jammy: [ros-humble-actionlib-msgs-dbgsym] +actuator_msgs: + ubuntu: + focal: [ros-humble-actuator-msgs] + jammy: [ros-humble-actuator-msgs] +actuator_msgs_dbgsym: + ubuntu: + focal: [ros-humble-actuator-msgs-dbgsym] + jammy: [ros-humble-actuator-msgs-dbgsym] +adaptive_component: + ubuntu: + focal: [ros-humble-adaptive-component] + jammy: [ros-humble-adaptive-component] +adaptive_component_dbgsym: + ubuntu: + focal: [ros-humble-adaptive-component-dbgsym] + jammy: [ros-humble-adaptive-component-dbgsym] +admittance_controller: + ubuntu: + focal: [ros-humble-admittance-controller] + jammy: [ros-humble-admittance-controller] +admittance_controller_dbgsym: + ubuntu: + focal: [ros-humble-admittance-controller-dbgsym] + jammy: [ros-humble-admittance-controller-dbgsym] +affordance_primitives: + ubuntu: + focal: [ros-humble-affordance-primitives] + jammy: [ros-humble-affordance-primitives] +affordance_primitives_dbgsym: + ubuntu: + focal: [ros-humble-affordance-primitives-dbgsym] + jammy: [ros-humble-affordance-primitives-dbgsym] +ament_acceleration: + ubuntu: + focal: [ros-humble-ament-acceleration] + jammy: [ros-humble-ament-acceleration] +ament_black: + ubuntu: + focal: [ros-humble-ament-black] + jammy: [ros-humble-ament-black] +ament_clang_format: + ubuntu: + focal: [ros-humble-ament-clang-format] + jammy: [ros-humble-ament-clang-format] +ament_clang_tidy: + ubuntu: + focal: [ros-humble-ament-clang-tidy] + jammy: [ros-humble-ament-clang-tidy] +ament_cmake: + ubuntu: + focal: [ros-humble-ament-cmake] + jammy: [ros-humble-ament-cmake] +ament_cmake_auto: + ubuntu: + focal: [ros-humble-ament-cmake-auto] + jammy: [ros-humble-ament-cmake-auto] +ament_cmake_black: + ubuntu: + focal: [ros-humble-ament-cmake-black] + jammy: [ros-humble-ament-cmake-black] +ament_cmake_catch2: + ubuntu: + focal: [ros-humble-ament-cmake-catch2] + jammy: [ros-humble-ament-cmake-catch2] +ament_cmake_clang_format: + ubuntu: + focal: [ros-humble-ament-cmake-clang-format] + jammy: [ros-humble-ament-cmake-clang-format] +ament_cmake_clang_tidy: + ubuntu: + focal: [ros-humble-ament-cmake-clang-tidy] + jammy: [ros-humble-ament-cmake-clang-tidy] +ament_cmake_copyright: + ubuntu: + focal: [ros-humble-ament-cmake-copyright] + jammy: [ros-humble-ament-cmake-copyright] +ament_cmake_core: + ubuntu: + focal: [ros-humble-ament-cmake-core] + jammy: [ros-humble-ament-cmake-core] +ament_cmake_cppcheck: + ubuntu: + focal: [ros-humble-ament-cmake-cppcheck] + jammy: [ros-humble-ament-cmake-cppcheck] +ament_cmake_cpplint: + ubuntu: + focal: [ros-humble-ament-cmake-cpplint] + jammy: [ros-humble-ament-cmake-cpplint] +ament_cmake_export_definitions: + ubuntu: + focal: [ros-humble-ament-cmake-export-definitions] + jammy: [ros-humble-ament-cmake-export-definitions] +ament_cmake_export_dependencies: + ubuntu: + focal: [ros-humble-ament-cmake-export-dependencies] + jammy: [ros-humble-ament-cmake-export-dependencies] +ament_cmake_export_include_directories: + ubuntu: + focal: [ros-humble-ament-cmake-export-include-directories] + jammy: [ros-humble-ament-cmake-export-include-directories] +ament_cmake_export_interfaces: + ubuntu: + focal: [ros-humble-ament-cmake-export-interfaces] + jammy: [ros-humble-ament-cmake-export-interfaces] +ament_cmake_export_libraries: + ubuntu: + focal: [ros-humble-ament-cmake-export-libraries] + jammy: [ros-humble-ament-cmake-export-libraries] +ament_cmake_export_link_flags: + ubuntu: + focal: [ros-humble-ament-cmake-export-link-flags] + jammy: [ros-humble-ament-cmake-export-link-flags] +ament_cmake_export_targets: + ubuntu: + focal: [ros-humble-ament-cmake-export-targets] + jammy: [ros-humble-ament-cmake-export-targets] +ament_cmake_flake8: + ubuntu: + focal: [ros-humble-ament-cmake-flake8] + jammy: [ros-humble-ament-cmake-flake8] +ament_cmake_gen_version_h: + ubuntu: + focal: [ros-humble-ament-cmake-gen-version-h] + jammy: [ros-humble-ament-cmake-gen-version-h] +ament_cmake_gmock: + ubuntu: + focal: [ros-humble-ament-cmake-gmock] + jammy: [ros-humble-ament-cmake-gmock] +ament_cmake_google_benchmark: + ubuntu: + focal: [ros-humble-ament-cmake-google-benchmark] + jammy: [ros-humble-ament-cmake-google-benchmark] +ament_cmake_gtest: + ubuntu: + focal: [ros-humble-ament-cmake-gtest] + jammy: [ros-humble-ament-cmake-gtest] +ament_cmake_include_directories: + ubuntu: + focal: [ros-humble-ament-cmake-include-directories] + jammy: [ros-humble-ament-cmake-include-directories] +ament_cmake_libraries: + ubuntu: + focal: [ros-humble-ament-cmake-libraries] + jammy: [ros-humble-ament-cmake-libraries] +ament_cmake_lint_cmake: + ubuntu: + focal: [ros-humble-ament-cmake-lint-cmake] + jammy: [ros-humble-ament-cmake-lint-cmake] +ament_cmake_mypy: + ubuntu: + focal: [ros-humble-ament-cmake-mypy] + jammy: [ros-humble-ament-cmake-mypy] +ament_cmake_nose: + ubuntu: + focal: [ros-humble-ament-cmake-nose] + jammy: [ros-humble-ament-cmake-nose] +ament_cmake_pclint: + ubuntu: + focal: [ros-humble-ament-cmake-pclint] + jammy: [ros-humble-ament-cmake-pclint] +ament_cmake_pep257: + ubuntu: + focal: [ros-humble-ament-cmake-pep257] + jammy: [ros-humble-ament-cmake-pep257] +ament_cmake_pycodestyle: + ubuntu: + focal: [ros-humble-ament-cmake-pycodestyle] + jammy: [ros-humble-ament-cmake-pycodestyle] +ament_cmake_pyflakes: + ubuntu: + focal: [ros-humble-ament-cmake-pyflakes] + jammy: [ros-humble-ament-cmake-pyflakes] +ament_cmake_pytest: + ubuntu: + focal: [ros-humble-ament-cmake-pytest] + jammy: [ros-humble-ament-cmake-pytest] +ament_cmake_python: + ubuntu: + focal: [ros-humble-ament-cmake-python] + jammy: [ros-humble-ament-cmake-python] +ament_cmake_ros: + ubuntu: + focal: [ros-humble-ament-cmake-ros] + jammy: [ros-humble-ament-cmake-ros] +ament_cmake_target_dependencies: + ubuntu: + focal: [ros-humble-ament-cmake-target-dependencies] + jammy: [ros-humble-ament-cmake-target-dependencies] +ament_cmake_test: + ubuntu: + focal: [ros-humble-ament-cmake-test] + jammy: [ros-humble-ament-cmake-test] +ament_cmake_uncrustify: + ubuntu: + focal: [ros-humble-ament-cmake-uncrustify] + jammy: [ros-humble-ament-cmake-uncrustify] +ament_cmake_vendor_package: + ubuntu: + focal: [ros-humble-ament-cmake-vendor-package] + jammy: [ros-humble-ament-cmake-vendor-package] +ament_cmake_version: + ubuntu: + focal: [ros-humble-ament-cmake-version] + jammy: [ros-humble-ament-cmake-version] +ament_cmake_xmllint: + ubuntu: + focal: [ros-humble-ament-cmake-xmllint] + jammy: [ros-humble-ament-cmake-xmllint] +ament_copyright: + ubuntu: + focal: [ros-humble-ament-copyright] + jammy: [ros-humble-ament-copyright] +ament_cppcheck: + ubuntu: + focal: [ros-humble-ament-cppcheck] + jammy: [ros-humble-ament-cppcheck] +ament_cpplint: + ubuntu: + focal: [ros-humble-ament-cpplint] + jammy: [ros-humble-ament-cpplint] +ament_download: + ubuntu: + focal: [ros-humble-ament-download] + jammy: [ros-humble-ament-download] +ament_flake8: + ubuntu: + focal: [ros-humble-ament-flake8] + jammy: [ros-humble-ament-flake8] +ament_index_cpp: + ubuntu: + focal: [ros-humble-ament-index-cpp] + jammy: [ros-humble-ament-index-cpp] +ament_index_cpp_dbgsym: + ubuntu: + focal: [ros-humble-ament-index-cpp-dbgsym] + jammy: [ros-humble-ament-index-cpp-dbgsym] +ament_index_python: + ubuntu: + focal: [ros-humble-ament-index-python] + jammy: [ros-humble-ament-index-python] +ament_lint: + ubuntu: + focal: [ros-humble-ament-lint] + jammy: [ros-humble-ament-lint] +ament_lint_auto: + ubuntu: + focal: [ros-humble-ament-lint-auto] + jammy: [ros-humble-ament-lint-auto] +ament_lint_cmake: + ubuntu: + focal: [ros-humble-ament-lint-cmake] + jammy: [ros-humble-ament-lint-cmake] +ament_lint_common: + ubuntu: + focal: [ros-humble-ament-lint-common] + jammy: [ros-humble-ament-lint-common] +ament_mypy: + ubuntu: + focal: [ros-humble-ament-mypy] + jammy: [ros-humble-ament-mypy] +ament_nodl: + ubuntu: + focal: [ros-humble-ament-nodl] + jammy: [ros-humble-ament-nodl] +ament_package: + ubuntu: + focal: [ros-humble-ament-package] + jammy: [ros-humble-ament-package] +ament_pclint: + ubuntu: + focal: [ros-humble-ament-pclint] + jammy: [ros-humble-ament-pclint] +ament_pep257: + ubuntu: + focal: [ros-humble-ament-pep257] + jammy: [ros-humble-ament-pep257] +ament_pycodestyle: + ubuntu: + focal: [ros-humble-ament-pycodestyle] + jammy: [ros-humble-ament-pycodestyle] +ament_pyflakes: + ubuntu: + focal: [ros-humble-ament-pyflakes] + jammy: [ros-humble-ament-pyflakes] +ament_python: + ubuntu: [] +ament_uncrustify: + ubuntu: + focal: [ros-humble-ament-uncrustify] + jammy: [ros-humble-ament-uncrustify] +ament_vitis: + ubuntu: + focal: [ros-humble-ament-vitis] + jammy: [ros-humble-ament-vitis] +ament_xmllint: + ubuntu: + focal: [ros-humble-ament-xmllint] + jammy: [ros-humble-ament-xmllint] +angles: + ubuntu: + focal: [ros-humble-angles] + jammy: [ros-humble-angles] +apex_containers: + ubuntu: + focal: [ros-humble-apex-containers] + jammy: [ros-humble-apex-containers] +apex_containers_dbgsym: + ubuntu: + focal: [ros-humble-apex-containers-dbgsym] + jammy: [ros-humble-apex-containers-dbgsym] +apex_test_tools: + ubuntu: + focal: [ros-humble-apex-test-tools] + jammy: [ros-humble-apex-test-tools] +apriltag: + ubuntu: + focal: [ros-humble-apriltag] + jammy: [ros-humble-apriltag] +apriltag_dbgsym: + ubuntu: + focal: [ros-humble-apriltag-dbgsym] + jammy: [ros-humble-apriltag-dbgsym] +apriltag_msgs: + ubuntu: + focal: [ros-humble-apriltag-msgs] + jammy: [ros-humble-apriltag-msgs] +apriltag_msgs_dbgsym: + ubuntu: + focal: [ros-humble-apriltag-msgs-dbgsym] + jammy: [ros-humble-apriltag-msgs-dbgsym] +apriltag_ros: + ubuntu: + focal: [ros-humble-apriltag-ros] + jammy: [ros-humble-apriltag-ros] +apriltag_ros_dbgsym: + ubuntu: + focal: [ros-humble-apriltag-ros-dbgsym] + jammy: [ros-humble-apriltag-ros-dbgsym] +aruco: + ubuntu: + focal: [ros-humble-aruco] + jammy: [ros-humble-aruco] +aruco_dbgsym: + ubuntu: + focal: [ros-humble-aruco-dbgsym] + jammy: [ros-humble-aruco-dbgsym] +aruco_msgs: + ubuntu: + focal: [ros-humble-aruco-msgs] + jammy: [ros-humble-aruco-msgs] +aruco_msgs_dbgsym: + ubuntu: + focal: [ros-humble-aruco-msgs-dbgsym] + jammy: [ros-humble-aruco-msgs-dbgsym] +aruco_opencv: + ubuntu: + focal: [ros-humble-aruco-opencv] + jammy: [ros-humble-aruco-opencv] +aruco_opencv_dbgsym: + ubuntu: + focal: [ros-humble-aruco-opencv-dbgsym] + jammy: [ros-humble-aruco-opencv-dbgsym] +aruco_opencv_msgs: + ubuntu: + focal: [ros-humble-aruco-opencv-msgs] + jammy: [ros-humble-aruco-opencv-msgs] +aruco_opencv_msgs_dbgsym: + ubuntu: + focal: [ros-humble-aruco-opencv-msgs-dbgsym] + jammy: [ros-humble-aruco-opencv-msgs-dbgsym] +aruco_ros: + ubuntu: + focal: [ros-humble-aruco-ros] + jammy: [ros-humble-aruco-ros] +aruco_ros_dbgsym: + ubuntu: + focal: [ros-humble-aruco-ros-dbgsym] + jammy: [ros-humble-aruco-ros-dbgsym] +as2_alphanumeric_viewer: + ubuntu: + focal: [ros-humble-as2-alphanumeric-viewer] + jammy: [ros-humble-as2-alphanumeric-viewer] +as2_alphanumeric_viewer_dbgsym: + ubuntu: + focal: [ros-humble-as2-alphanumeric-viewer-dbgsym] + jammy: [ros-humble-as2-alphanumeric-viewer-dbgsym] +as2_behavior: + ubuntu: + focal: [ros-humble-as2-behavior] + jammy: [ros-humble-as2-behavior] +as2_behavior_dbgsym: + ubuntu: + focal: [ros-humble-as2-behavior-dbgsym] + jammy: [ros-humble-as2-behavior-dbgsym] +as2_behavior_tree: + ubuntu: + focal: [ros-humble-as2-behavior-tree] + jammy: [ros-humble-as2-behavior-tree] +as2_behavior_tree_dbgsym: + ubuntu: + focal: [ros-humble-as2-behavior-tree-dbgsym] + jammy: [ros-humble-as2-behavior-tree-dbgsym] +as2_behaviors_motion: + ubuntu: + focal: [ros-humble-as2-behaviors-motion] + jammy: [ros-humble-as2-behaviors-motion] +as2_behaviors_motion_dbgsym: + ubuntu: + focal: [ros-humble-as2-behaviors-motion-dbgsym] + jammy: [ros-humble-as2-behaviors-motion-dbgsym] +as2_behaviors_perception: + ubuntu: + focal: [ros-humble-as2-behaviors-perception] + jammy: [ros-humble-as2-behaviors-perception] +as2_behaviors_perception_dbgsym: + ubuntu: + focal: [ros-humble-as2-behaviors-perception-dbgsym] + jammy: [ros-humble-as2-behaviors-perception-dbgsym] +as2_behaviors_platform: + ubuntu: + focal: [ros-humble-as2-behaviors-platform] + jammy: [ros-humble-as2-behaviors-platform] +as2_behaviors_platform_dbgsym: + ubuntu: + focal: [ros-humble-as2-behaviors-platform-dbgsym] + jammy: [ros-humble-as2-behaviors-platform-dbgsym] +as2_behaviors_trajectory_generation: + ubuntu: + focal: [ros-humble-as2-behaviors-trajectory-generation] + jammy: [ros-humble-as2-behaviors-trajectory-generation] +as2_behaviors_trajectory_generation_dbgsym: + ubuntu: + focal: [ros-humble-as2-behaviors-trajectory-generation-dbgsym] + jammy: [ros-humble-as2-behaviors-trajectory-generation-dbgsym] +as2_cli: + ubuntu: + focal: [ros-humble-as2-cli] + jammy: [ros-humble-as2-cli] +as2_core: + ubuntu: + focal: [ros-humble-as2-core] + jammy: [ros-humble-as2-core] +as2_gazebo_classic_assets: + ubuntu: + focal: [ros-humble-as2-gazebo-classic-assets] + jammy: [ros-humble-as2-gazebo-classic-assets] +as2_ign_gazebo_assets: + ubuntu: + focal: [ros-humble-as2-ign-gazebo-assets] + jammy: [ros-humble-as2-ign-gazebo-assets] +as2_ign_gazebo_assets_dbgsym: + ubuntu: + focal: [ros-humble-as2-ign-gazebo-assets-dbgsym] + jammy: [ros-humble-as2-ign-gazebo-assets-dbgsym] +as2_motion_controller: + ubuntu: + focal: [ros-humble-as2-motion-controller] + jammy: [ros-humble-as2-motion-controller] +as2_motion_controller_dbgsym: + ubuntu: + focal: [ros-humble-as2-motion-controller-dbgsym] + jammy: [ros-humble-as2-motion-controller-dbgsym] +as2_motion_reference_handlers: + ubuntu: + focal: [ros-humble-as2-motion-reference-handlers] + jammy: [ros-humble-as2-motion-reference-handlers] +as2_msgs: + ubuntu: + focal: [ros-humble-as2-msgs] + jammy: [ros-humble-as2-msgs] +as2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-as2-msgs-dbgsym] + jammy: [ros-humble-as2-msgs-dbgsym] +as2_platform_crazyflie: + ubuntu: + focal: [ros-humble-as2-platform-crazyflie] + jammy: [ros-humble-as2-platform-crazyflie] +as2_platform_crazyflie_dbgsym: + ubuntu: + focal: [ros-humble-as2-platform-crazyflie-dbgsym] + jammy: [ros-humble-as2-platform-crazyflie-dbgsym] +as2_platform_ign_gazebo: + ubuntu: + focal: [ros-humble-as2-platform-ign-gazebo] + jammy: [ros-humble-as2-platform-ign-gazebo] +as2_platform_ign_gazebo_dbgsym: + ubuntu: + focal: [ros-humble-as2-platform-ign-gazebo-dbgsym] + jammy: [ros-humble-as2-platform-ign-gazebo-dbgsym] +as2_platform_tello: + ubuntu: + focal: [ros-humble-as2-platform-tello] + jammy: [ros-humble-as2-platform-tello] +as2_platform_tello_dbgsym: + ubuntu: + focal: [ros-humble-as2-platform-tello-dbgsym] + jammy: [ros-humble-as2-platform-tello-dbgsym] +as2_realsense_interface: + ubuntu: + focal: [ros-humble-as2-realsense-interface] + jammy: [ros-humble-as2-realsense-interface] +as2_realsense_interface_dbgsym: + ubuntu: + focal: [ros-humble-as2-realsense-interface-dbgsym] + jammy: [ros-humble-as2-realsense-interface-dbgsym] +as2_state_estimator: + ubuntu: + focal: [ros-humble-as2-state-estimator] + jammy: [ros-humble-as2-state-estimator] +as2_state_estimator_dbgsym: + ubuntu: + focal: [ros-humble-as2-state-estimator-dbgsym] + jammy: [ros-humble-as2-state-estimator-dbgsym] +as2_usb_camera_interface: + ubuntu: + focal: [ros-humble-as2-usb-camera-interface] + jammy: [ros-humble-as2-usb-camera-interface] +as2_usb_camera_interface_dbgsym: + ubuntu: + focal: [ros-humble-as2-usb-camera-interface-dbgsym] + jammy: [ros-humble-as2-usb-camera-interface-dbgsym] +asio_cmake_module: + ubuntu: + focal: [ros-humble-asio-cmake-module] + jammy: [ros-humble-asio-cmake-module] +async_web_server_cpp: + ubuntu: + focal: [ros-humble-async-web-server-cpp] + jammy: [ros-humble-async-web-server-cpp] +async_web_server_cpp_dbgsym: + ubuntu: + focal: [ros-humble-async-web-server-cpp-dbgsym] + jammy: [ros-humble-async-web-server-cpp-dbgsym] +automotive_autonomy_msgs: + ubuntu: + focal: [ros-humble-automotive-autonomy-msgs] + jammy: [ros-humble-automotive-autonomy-msgs] +automotive_navigation_msgs: + ubuntu: + focal: [ros-humble-automotive-navigation-msgs] + jammy: [ros-humble-automotive-navigation-msgs] +automotive_navigation_msgs_dbgsym: + ubuntu: + focal: [ros-humble-automotive-navigation-msgs-dbgsym] + jammy: [ros-humble-automotive-navigation-msgs-dbgsym] +automotive_platform_msgs: + ubuntu: + focal: [ros-humble-automotive-platform-msgs] + jammy: [ros-humble-automotive-platform-msgs] +automotive_platform_msgs_dbgsym: + ubuntu: + focal: [ros-humble-automotive-platform-msgs-dbgsym] + jammy: [ros-humble-automotive-platform-msgs-dbgsym] +autoware_auto_msgs: + ubuntu: + focal: [ros-humble-autoware-auto-msgs] + jammy: [ros-humble-autoware-auto-msgs] +autoware_auto_msgs_dbgsym: + ubuntu: + focal: [ros-humble-autoware-auto-msgs-dbgsym] + jammy: [ros-humble-autoware-auto-msgs-dbgsym] +avt_vimba_camera: + ubuntu: + focal: [ros-humble-avt-vimba-camera] + jammy: [ros-humble-avt-vimba-camera] +avt_vimba_camera_dbgsym: + ubuntu: + focal: [ros-humble-avt-vimba-camera-dbgsym] + jammy: [ros-humble-avt-vimba-camera-dbgsym] +aws_sdk_cpp_vendor: + ubuntu: + focal: [ros-humble-aws-sdk-cpp-vendor] + jammy: [ros-humble-aws-sdk-cpp-vendor] +aws_sdk_cpp_vendor_dbgsym: + ubuntu: + focal: [ros-humble-aws-sdk-cpp-vendor-dbgsym] + jammy: [ros-humble-aws-sdk-cpp-vendor-dbgsym] +backward_ros: + ubuntu: + focal: [ros-humble-backward-ros] + jammy: [ros-humble-backward-ros] +backward_ros_dbgsym: + ubuntu: + focal: [ros-humble-backward-ros-dbgsym] + jammy: [ros-humble-backward-ros-dbgsym] +bag2_to_image: + ubuntu: + focal: [ros-humble-bag2-to-image] + jammy: [ros-humble-bag2-to-image] +bag2_to_image_dbgsym: + ubuntu: + focal: [ros-humble-bag2-to-image-dbgsym] + jammy: [ros-humble-bag2-to-image-dbgsym] +base2d_kinematics: + ubuntu: + focal: [ros-humble-base2d-kinematics] + jammy: [ros-humble-base2d-kinematics] +base2d_kinematics_dbgsym: + ubuntu: + focal: [ros-humble-base2d-kinematics-dbgsym] + jammy: [ros-humble-base2d-kinematics-dbgsym] +base2d_kinematics_msgs: + ubuntu: + focal: [ros-humble-base2d-kinematics-msgs] + jammy: [ros-humble-base2d-kinematics-msgs] +base2d_kinematics_msgs_dbgsym: + ubuntu: + focal: [ros-humble-base2d-kinematics-msgs-dbgsym] + jammy: [ros-humble-base2d-kinematics-msgs-dbgsym] +behaviortree_cpp: + ubuntu: + focal: [ros-humble-behaviortree-cpp] + jammy: [ros-humble-behaviortree-cpp] +behaviortree_cpp_dbgsym: + ubuntu: + focal: [ros-humble-behaviortree-cpp-dbgsym] + jammy: [ros-humble-behaviortree-cpp-dbgsym] +behaviortree_cpp_v3: + ubuntu: + focal: [ros-humble-behaviortree-cpp-v3] + jammy: [ros-humble-behaviortree-cpp-v3] +behaviortree_cpp_v3_dbgsym: + ubuntu: + focal: [ros-humble-behaviortree-cpp-v3-dbgsym] + jammy: [ros-humble-behaviortree-cpp-v3-dbgsym] +bicycle_steering_controller: + ubuntu: + focal: [ros-humble-bicycle-steering-controller] + jammy: [ros-humble-bicycle-steering-controller] +bicycle_steering_controller_dbgsym: + ubuntu: + focal: [ros-humble-bicycle-steering-controller-dbgsym] + jammy: [ros-humble-bicycle-steering-controller-dbgsym] +bno055: + ubuntu: + focal: [ros-humble-bno055] + jammy: [ros-humble-bno055] +bond: + ubuntu: + focal: [ros-humble-bond] + jammy: [ros-humble-bond] +bond_core: + ubuntu: + focal: [ros-humble-bond-core] + jammy: [ros-humble-bond-core] +bond_dbgsym: + ubuntu: + focal: [ros-humble-bond-dbgsym] + jammy: [ros-humble-bond-dbgsym] +bondcpp: + ubuntu: + focal: [ros-humble-bondcpp] + jammy: [ros-humble-bondcpp] +bondcpp_dbgsym: + ubuntu: + focal: [ros-humble-bondcpp-dbgsym] + jammy: [ros-humble-bondcpp-dbgsym] +boost_geometry_util: + ubuntu: + focal: [ros-humble-boost-geometry-util] + jammy: [ros-humble-boost-geometry-util] +boost_geometry_util_dbgsym: + ubuntu: + focal: [ros-humble-boost-geometry-util-dbgsym] + jammy: [ros-humble-boost-geometry-util-dbgsym] +boost_plugin_loader: + ubuntu: + focal: [ros-humble-boost-plugin-loader] + jammy: [ros-humble-boost-plugin-loader] +boost_plugin_loader_dbgsym: + ubuntu: + focal: [ros-humble-boost-plugin-loader-dbgsym] + jammy: [ros-humble-boost-plugin-loader-dbgsym] +builtin_interfaces: + ubuntu: + focal: [ros-humble-builtin-interfaces] + jammy: [ros-humble-builtin-interfaces] +builtin_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-builtin-interfaces-dbgsym] + jammy: [ros-humble-builtin-interfaces-dbgsym] +camera_calibration: + ubuntu: + focal: [ros-humble-camera-calibration] + jammy: [ros-humble-camera-calibration] +camera_calibration_parsers: + ubuntu: + focal: [ros-humble-camera-calibration-parsers] + jammy: [ros-humble-camera-calibration-parsers] +camera_calibration_parsers_dbgsym: + ubuntu: + focal: [ros-humble-camera-calibration-parsers-dbgsym] + jammy: [ros-humble-camera-calibration-parsers-dbgsym] +camera_info_manager: + ubuntu: + focal: [ros-humble-camera-info-manager] + jammy: [ros-humble-camera-info-manager] +camera_info_manager_dbgsym: + ubuntu: + focal: [ros-humble-camera-info-manager-dbgsym] + jammy: [ros-humble-camera-info-manager-dbgsym] +camera_ros: + ubuntu: + focal: [ros-humble-camera-ros] + jammy: [ros-humble-camera-ros] +camera_ros_dbgsym: + ubuntu: + focal: [ros-humble-camera-ros-dbgsym] + jammy: [ros-humble-camera-ros-dbgsym] +can_msgs: + ubuntu: + focal: [ros-humble-can-msgs] + jammy: [ros-humble-can-msgs] +can_msgs_dbgsym: + ubuntu: + focal: [ros-humble-can-msgs-dbgsym] + jammy: [ros-humble-can-msgs-dbgsym] +can_utils: + ubuntu: + focal: [can-utils] + jammy: [can-utils] +carter_navigation: + ubuntu: + focal: [ros-humble-carter-navigation] + jammy: [ros-humble-carter-navigation] +cartographer: + ubuntu: + focal: [ros-humble-cartographer] + jammy: [ros-humble-cartographer] +cartographer_dbgsym: + ubuntu: + focal: [ros-humble-cartographer-dbgsym] + jammy: [ros-humble-cartographer-dbgsym] +cartographer_ros: + ubuntu: + focal: [ros-humble-cartographer-ros] + jammy: [ros-humble-cartographer-ros] +cartographer_ros_dbgsym: + ubuntu: + focal: [ros-humble-cartographer-ros-dbgsym] + jammy: [ros-humble-cartographer-ros-dbgsym] +cartographer_ros_msgs: + ubuntu: + focal: [ros-humble-cartographer-ros-msgs] + jammy: [ros-humble-cartographer-ros-msgs] +cartographer_ros_msgs_dbgsym: + ubuntu: + focal: [ros-humble-cartographer-ros-msgs-dbgsym] + jammy: [ros-humble-cartographer-ros-msgs-dbgsym] +cartographer_rviz: + ubuntu: + focal: [ros-humble-cartographer-rviz] + jammy: [ros-humble-cartographer-rviz] +cartographer_rviz_dbgsym: + ubuntu: + focal: [ros-humble-cartographer-rviz-dbgsym] + jammy: [ros-humble-cartographer-rviz-dbgsym] +cascade_lifecycle_msgs: + ubuntu: + focal: [ros-humble-cascade-lifecycle-msgs] + jammy: [ros-humble-cascade-lifecycle-msgs] +cascade_lifecycle_msgs_dbgsym: + ubuntu: + focal: [ros-humble-cascade-lifecycle-msgs-dbgsym] + jammy: [ros-humble-cascade-lifecycle-msgs-dbgsym] +catch_ros2: + ubuntu: + focal: [ros-humble-catch-ros2] + jammy: [ros-humble-catch-ros2] +catch_ros2_dbgsym: + ubuntu: + focal: [ros-humble-catch-ros2-dbgsym] + jammy: [ros-humble-catch-ros2-dbgsym] +catkin: + ubuntu: + focal: [ros-noetic-catkin] + jammy: [ros-noetic-catkin] +chomp_motion_planner: + ubuntu: + focal: [ros-humble-chomp-motion-planner] + jammy: [ros-humble-chomp-motion-planner] +chomp_motion_planner_dbgsym: + ubuntu: + focal: [ros-humble-chomp-motion-planner-dbgsym] + jammy: [ros-humble-chomp-motion-planner-dbgsym] +class_loader: + ubuntu: + focal: [ros-humble-class-loader] + jammy: [ros-humble-class-loader] +class_loader_dbgsym: + ubuntu: + focal: [ros-humble-class-loader-dbgsym] + jammy: [ros-humble-class-loader-dbgsym] +classic_bags: + ubuntu: + focal: [ros-humble-classic-bags] + jammy: [ros-humble-classic-bags] +clearpath_common: + ubuntu: + focal: [ros-humble-clearpath-common] + jammy: [ros-humble-clearpath-common] +clearpath_config: + ubuntu: + focal: [ros-humble-clearpath-config] + jammy: [ros-humble-clearpath-config] +clearpath_config_live: + ubuntu: + focal: [ros-humble-clearpath-config-live] + jammy: [ros-humble-clearpath-config-live] +clearpath_control: + ubuntu: + focal: [ros-humble-clearpath-control] + jammy: [ros-humble-clearpath-control] +clearpath_description: + ubuntu: + focal: [ros-humble-clearpath-description] + jammy: [ros-humble-clearpath-description] +clearpath_desktop: + ubuntu: + focal: [ros-humble-clearpath-desktop] + jammy: [ros-humble-clearpath-desktop] +clearpath_generator_common: + ubuntu: + focal: [ros-humble-clearpath-generator-common] + jammy: [ros-humble-clearpath-generator-common] +clearpath_generator_gz: + ubuntu: + focal: [ros-humble-clearpath-generator-gz] + jammy: [ros-humble-clearpath-generator-gz] +clearpath_gz: + ubuntu: + focal: [ros-humble-clearpath-gz] + jammy: [ros-humble-clearpath-gz] +clearpath_mounts_description: + ubuntu: + focal: [ros-humble-clearpath-mounts-description] + jammy: [ros-humble-clearpath-mounts-description] +clearpath_msgs: + ubuntu: + focal: [ros-humble-clearpath-msgs] + jammy: [ros-humble-clearpath-msgs] +clearpath_nav2_demos: + ubuntu: + focal: [ros-humble-clearpath-nav2-demos] + jammy: [ros-humble-clearpath-nav2-demos] +clearpath_platform: + ubuntu: + focal: [ros-humble-clearpath-platform] + jammy: [ros-humble-clearpath-platform] +clearpath_platform_dbgsym: + ubuntu: + focal: [ros-humble-clearpath-platform-dbgsym] + jammy: [ros-humble-clearpath-platform-dbgsym] +clearpath_platform_description: + ubuntu: + focal: [ros-humble-clearpath-platform-description] + jammy: [ros-humble-clearpath-platform-description] +clearpath_platform_msgs: + ubuntu: + focal: [ros-humble-clearpath-platform-msgs] + jammy: [ros-humble-clearpath-platform-msgs] +clearpath_platform_msgs_dbgsym: + ubuntu: + focal: [ros-humble-clearpath-platform-msgs-dbgsym] + jammy: [ros-humble-clearpath-platform-msgs-dbgsym] +clearpath_sensors_description: + ubuntu: + focal: [ros-humble-clearpath-sensors-description] + jammy: [ros-humble-clearpath-sensors-description] +clearpath_simulator: + ubuntu: + focal: [ros-humble-clearpath-simulator] + jammy: [ros-humble-clearpath-simulator] +clearpath_viz: + ubuntu: + focal: [ros-humble-clearpath-viz] + jammy: [ros-humble-clearpath-viz] +color_names: + ubuntu: + focal: [ros-humble-color-names] + jammy: [ros-humble-color-names] +color_names_dbgsym: + ubuntu: + focal: [ros-humble-color-names-dbgsym] + jammy: [ros-humble-color-names-dbgsym] +color_util: + ubuntu: + focal: [ros-humble-color-util] + jammy: [ros-humble-color-util] +commander: + ubuntu: + focal: [ros-humble-commander] + jammy: [ros-humble-commander] +common_interfaces: + ubuntu: + focal: [ros-humble-common-interfaces] + jammy: [ros-humble-common-interfaces] +composition: + ubuntu: + focal: [ros-humble-composition] + jammy: [ros-humble-composition] +composition_dbgsym: + ubuntu: + focal: [ros-humble-composition-dbgsym] + jammy: [ros-humble-composition-dbgsym] +composition_interfaces: + ubuntu: + focal: [ros-humble-composition-interfaces] + jammy: [ros-humble-composition-interfaces] +composition_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-composition-interfaces-dbgsym] + jammy: [ros-humble-composition-interfaces-dbgsym] +compressed_depth_image_transport: + ubuntu: + focal: [ros-humble-compressed-depth-image-transport] + jammy: [ros-humble-compressed-depth-image-transport] +compressed_depth_image_transport_dbgsym: + ubuntu: + focal: [ros-humble-compressed-depth-image-transport-dbgsym] + jammy: [ros-humble-compressed-depth-image-transport-dbgsym] +compressed_image_transport: + ubuntu: + focal: [ros-humble-compressed-image-transport] + jammy: [ros-humble-compressed-image-transport] +compressed_image_transport_dbgsym: + ubuntu: + focal: [ros-humble-compressed-image-transport-dbgsym] + jammy: [ros-humble-compressed-image-transport-dbgsym] +console_bridge_vendor: + ubuntu: + focal: [ros-humble-console-bridge-vendor] + jammy: [ros-humble-console-bridge-vendor] +console_bridge_vendor_dbgsym: + ubuntu: + focal: [ros-humble-console-bridge-vendor-dbgsym] + jammy: [ros-humble-console-bridge-vendor-dbgsym] +control_box_rst: + ubuntu: + focal: [ros-humble-control-box-rst] + jammy: [ros-humble-control-box-rst] +control_msgs: + ubuntu: + focal: [ros-humble-control-msgs] + jammy: [ros-humble-control-msgs] +control_msgs_dbgsym: + ubuntu: + focal: [ros-humble-control-msgs-dbgsym] + jammy: [ros-humble-control-msgs-dbgsym] +control_toolbox: + ubuntu: + focal: [ros-humble-control-toolbox] + jammy: [ros-humble-control-toolbox] +control_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-control-toolbox-dbgsym] + jammy: [ros-humble-control-toolbox-dbgsym] +controller_interface: + ubuntu: + focal: [ros-humble-controller-interface] + jammy: [ros-humble-controller-interface] +controller_interface_dbgsym: + ubuntu: + focal: [ros-humble-controller-interface-dbgsym] + jammy: [ros-humble-controller-interface-dbgsym] +controller_manager: + ubuntu: + focal: [ros-humble-controller-manager] + jammy: [ros-humble-controller-manager] +controller_manager_dbgsym: + ubuntu: + focal: [ros-humble-controller-manager-dbgsym] + jammy: [ros-humble-controller-manager-dbgsym] +controller_manager_msgs: + ubuntu: + focal: [ros-humble-controller-manager-msgs] + jammy: [ros-humble-controller-manager-msgs] +controller_manager_msgs_dbgsym: + ubuntu: + focal: [ros-humble-controller-manager-msgs-dbgsym] + jammy: [ros-humble-controller-manager-msgs-dbgsym] +costmap_queue: + ubuntu: + focal: [ros-humble-costmap-queue] + jammy: [ros-humble-costmap-queue] +crane_plus_moveit_config: + ubuntu: + focal: [ros-humble-crane-plus-moveit-config] + jammy: [ros-humble-crane-plus-moveit-config] +create_bringup: + ubuntu: + focal: [ros-humble-create-bringup] + jammy: [ros-humble-create-bringup] +create_description: + ubuntu: + focal: [ros-humble-create-description] + jammy: [ros-humble-create-description] +create_driver: + ubuntu: + focal: [ros-humble-create-driver] + jammy: [ros-humble-create-driver] +create_driver_dbgsym: + ubuntu: + focal: [ros-humble-create-driver-dbgsym] + jammy: [ros-humble-create-driver-dbgsym] +create_msgs: + ubuntu: + focal: [ros-humble-create-msgs] + jammy: [ros-humble-create-msgs] +create_msgs_dbgsym: + ubuntu: + focal: [ros-humble-create-msgs-dbgsym] + jammy: [ros-humble-create-msgs-dbgsym] +create_robot: + ubuntu: + focal: [ros-humble-create-robot] + jammy: [ros-humble-create-robot] +cudnn_cmake_module: + ubuntu: + focal: [ros-humble-cudnn-cmake-module] + jammy: [ros-humble-cudnn-cmake-module] +curobo_core: + ubuntu: + focal: [ros-humble-curobo-core] + jammy: [ros-humble-curobo-core] +custom_nitros_dnn_image_encoder: + ubuntu: + focal: [ros-humble-custom-nitros-dnn-image-encoder] + jammy: [ros-humble-custom-nitros-dnn-image-encoder] +custom_nitros_image: + ubuntu: + focal: [ros-humble-custom-nitros-image] + jammy: [ros-humble-custom-nitros-image] +custom_nitros_message_filter: + ubuntu: + focal: [ros-humble-custom-nitros-message-filter] + jammy: [ros-humble-custom-nitros-message-filter] +custom_nitros_message_filter_interfaces: + ubuntu: + focal: [ros-humble-custom-nitros-message-filter-interfaces] + jammy: [ros-humble-custom-nitros-message-filter-interfaces] +custom_nitros_string: + ubuntu: + focal: [ros-humble-custom-nitros-string] + jammy: [ros-humble-custom-nitros-string] +cv_bridge: + ubuntu: + focal: [ros-humble-cv-bridge] + jammy: [ros-humble-cv-bridge] +cv_bridge_dbgsym: + ubuntu: + focal: [ros-humble-cv-bridge-dbgsym] + jammy: [ros-humble-cv-bridge-dbgsym] +cyclonedds: + ubuntu: + focal: [ros-humble-cyclonedds] + jammy: [ros-humble-cyclonedds] +cyclonedds_dbgsym: + ubuntu: + focal: [ros-humble-cyclonedds-dbgsym] + jammy: [ros-humble-cyclonedds-dbgsym] +dataspeed_can: + ubuntu: + focal: [ros-humble-dataspeed-can] + jammy: [ros-humble-dataspeed-can] +dataspeed_can_msg_filters: + ubuntu: + focal: [ros-humble-dataspeed-can-msg-filters] + jammy: [ros-humble-dataspeed-can-msg-filters] +dataspeed_can_usb: + ubuntu: + focal: [ros-humble-dataspeed-can-usb] + jammy: [ros-humble-dataspeed-can-usb] +dataspeed_can_usb_dbgsym: + ubuntu: + focal: [ros-humble-dataspeed-can-usb-dbgsym] + jammy: [ros-humble-dataspeed-can-usb-dbgsym] +dataspeed_dbw_common: + ubuntu: + focal: [ros-humble-dataspeed-dbw-common] + jammy: [ros-humble-dataspeed-dbw-common] +dataspeed_dbw_gateway: + ubuntu: + focal: [ros-humble-dataspeed-dbw-gateway] + jammy: [ros-humble-dataspeed-dbw-gateway] +dataspeed_dbw_gateway_dbgsym: + ubuntu: + focal: [ros-humble-dataspeed-dbw-gateway-dbgsym] + jammy: [ros-humble-dataspeed-dbw-gateway-dbgsym] +dataspeed_dbw_msgs: + ubuntu: + focal: [ros-humble-dataspeed-dbw-msgs] + jammy: [ros-humble-dataspeed-dbw-msgs] +dataspeed_dbw_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dataspeed-dbw-msgs-dbgsym] + jammy: [ros-humble-dataspeed-dbw-msgs-dbgsym] +dataspeed_ulc: + ubuntu: + focal: [ros-humble-dataspeed-ulc] + jammy: [ros-humble-dataspeed-ulc] +dataspeed_ulc_can: + ubuntu: + focal: [ros-humble-dataspeed-ulc-can] + jammy: [ros-humble-dataspeed-ulc-can] +dataspeed_ulc_can_dbgsym: + ubuntu: + focal: [ros-humble-dataspeed-ulc-can-dbgsym] + jammy: [ros-humble-dataspeed-ulc-can-dbgsym] +dataspeed_ulc_msgs: + ubuntu: + focal: [ros-humble-dataspeed-ulc-msgs] + jammy: [ros-humble-dataspeed-ulc-msgs] +dataspeed_ulc_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dataspeed-ulc-msgs-dbgsym] + jammy: [ros-humble-dataspeed-ulc-msgs-dbgsym] +dbw_fca: + ubuntu: + focal: [ros-humble-dbw-fca] + jammy: [ros-humble-dbw-fca] +dbw_fca_can: + ubuntu: + focal: [ros-humble-dbw-fca-can] + jammy: [ros-humble-dbw-fca-can] +dbw_fca_can_dbgsym: + ubuntu: + focal: [ros-humble-dbw-fca-can-dbgsym] + jammy: [ros-humble-dbw-fca-can-dbgsym] +dbw_fca_description: + ubuntu: + focal: [ros-humble-dbw-fca-description] + jammy: [ros-humble-dbw-fca-description] +dbw_fca_joystick_demo: + ubuntu: + focal: [ros-humble-dbw-fca-joystick-demo] + jammy: [ros-humble-dbw-fca-joystick-demo] +dbw_fca_joystick_demo_dbgsym: + ubuntu: + focal: [ros-humble-dbw-fca-joystick-demo-dbgsym] + jammy: [ros-humble-dbw-fca-joystick-demo-dbgsym] +dbw_fca_msgs: + ubuntu: + focal: [ros-humble-dbw-fca-msgs] + jammy: [ros-humble-dbw-fca-msgs] +dbw_fca_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dbw-fca-msgs-dbgsym] + jammy: [ros-humble-dbw-fca-msgs-dbgsym] +dbw_ford: + ubuntu: + focal: [ros-humble-dbw-ford] + jammy: [ros-humble-dbw-ford] +dbw_ford_can: + ubuntu: + focal: [ros-humble-dbw-ford-can] + jammy: [ros-humble-dbw-ford-can] +dbw_ford_can_dbgsym: + ubuntu: + focal: [ros-humble-dbw-ford-can-dbgsym] + jammy: [ros-humble-dbw-ford-can-dbgsym] +dbw_ford_description: + ubuntu: + focal: [ros-humble-dbw-ford-description] + jammy: [ros-humble-dbw-ford-description] +dbw_ford_joystick_demo: + ubuntu: + focal: [ros-humble-dbw-ford-joystick-demo] + jammy: [ros-humble-dbw-ford-joystick-demo] +dbw_ford_joystick_demo_dbgsym: + ubuntu: + focal: [ros-humble-dbw-ford-joystick-demo-dbgsym] + jammy: [ros-humble-dbw-ford-joystick-demo-dbgsym] +dbw_ford_msgs: + ubuntu: + focal: [ros-humble-dbw-ford-msgs] + jammy: [ros-humble-dbw-ford-msgs] +dbw_ford_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dbw-ford-msgs-dbgsym] + jammy: [ros-humble-dbw-ford-msgs-dbgsym] +dbw_polaris: + ubuntu: + focal: [ros-humble-dbw-polaris] + jammy: [ros-humble-dbw-polaris] +dbw_polaris_can: + ubuntu: + focal: [ros-humble-dbw-polaris-can] + jammy: [ros-humble-dbw-polaris-can] +dbw_polaris_can_dbgsym: + ubuntu: + focal: [ros-humble-dbw-polaris-can-dbgsym] + jammy: [ros-humble-dbw-polaris-can-dbgsym] +dbw_polaris_description: + ubuntu: + focal: [ros-humble-dbw-polaris-description] + jammy: [ros-humble-dbw-polaris-description] +dbw_polaris_joystick_demo: + ubuntu: + focal: [ros-humble-dbw-polaris-joystick-demo] + jammy: [ros-humble-dbw-polaris-joystick-demo] +dbw_polaris_joystick_demo_dbgsym: + ubuntu: + focal: [ros-humble-dbw-polaris-joystick-demo-dbgsym] + jammy: [ros-humble-dbw-polaris-joystick-demo-dbgsym] +dbw_polaris_msgs: + ubuntu: + focal: [ros-humble-dbw-polaris-msgs] + jammy: [ros-humble-dbw-polaris-msgs] +dbw_polaris_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dbw-polaris-msgs-dbgsym] + jammy: [ros-humble-dbw-polaris-msgs-dbgsym] +delphi_esr_msgs: + ubuntu: + focal: [ros-humble-delphi-esr-msgs] + jammy: [ros-humble-delphi-esr-msgs] +delphi_esr_msgs_dbgsym: + ubuntu: + focal: [ros-humble-delphi-esr-msgs-dbgsym] + jammy: [ros-humble-delphi-esr-msgs-dbgsym] +delphi_mrr_msgs: + ubuntu: + focal: [ros-humble-delphi-mrr-msgs] + jammy: [ros-humble-delphi-mrr-msgs] +delphi_mrr_msgs_dbgsym: + ubuntu: + focal: [ros-humble-delphi-mrr-msgs-dbgsym] + jammy: [ros-humble-delphi-mrr-msgs-dbgsym] +delphi_srr_msgs: + ubuntu: + focal: [ros-humble-delphi-srr-msgs] + jammy: [ros-humble-delphi-srr-msgs] +delphi_srr_msgs_dbgsym: + ubuntu: + focal: [ros-humble-delphi-srr-msgs-dbgsym] + jammy: [ros-humble-delphi-srr-msgs-dbgsym] +demo_nodes_cpp: + ubuntu: + focal: [ros-humble-demo-nodes-cpp] + jammy: [ros-humble-demo-nodes-cpp] +demo_nodes_cpp_dbgsym: + ubuntu: + focal: [ros-humble-demo-nodes-cpp-dbgsym] + jammy: [ros-humble-demo-nodes-cpp-dbgsym] +demo_nodes_cpp_native: + ubuntu: + focal: [ros-humble-demo-nodes-cpp-native] + jammy: [ros-humble-demo-nodes-cpp-native] +demo_nodes_cpp_native_dbgsym: + ubuntu: + focal: [ros-humble-demo-nodes-cpp-native-dbgsym] + jammy: [ros-humble-demo-nodes-cpp-native-dbgsym] +demo_nodes_py: + ubuntu: + focal: [ros-humble-demo-nodes-py] + jammy: [ros-humble-demo-nodes-py] +depth_image_proc: + ubuntu: + focal: [ros-humble-depth-image-proc] + jammy: [ros-humble-depth-image-proc] +depth_image_proc_dbgsym: + ubuntu: + focal: [ros-humble-depth-image-proc-dbgsym] + jammy: [ros-humble-depth-image-proc-dbgsym] +depthai: + ubuntu: + focal: [ros-humble-depthai] + jammy: [ros-humble-depthai] +depthai_bridge: + ubuntu: + focal: [ros-humble-depthai-bridge] + jammy: [ros-humble-depthai-bridge] +depthai_bridge_dbgsym: + ubuntu: + focal: [ros-humble-depthai-bridge-dbgsym] + jammy: [ros-humble-depthai-bridge-dbgsym] +depthai_dbgsym: + ubuntu: + focal: [ros-humble-depthai-dbgsym] + jammy: [ros-humble-depthai-dbgsym] +depthai_descriptions: + ubuntu: + focal: [ros-humble-depthai-descriptions] + jammy: [ros-humble-depthai-descriptions] +depthai_examples: + ubuntu: + focal: [ros-humble-depthai-examples] + jammy: [ros-humble-depthai-examples] +depthai_examples_dbgsym: + ubuntu: + focal: [ros-humble-depthai-examples-dbgsym] + jammy: [ros-humble-depthai-examples-dbgsym] +depthai_filters: + ubuntu: + focal: [ros-humble-depthai-filters] + jammy: [ros-humble-depthai-filters] +depthai_filters_dbgsym: + ubuntu: + focal: [ros-humble-depthai-filters-dbgsym] + jammy: [ros-humble-depthai-filters-dbgsym] +depthai_ros: + ubuntu: + focal: [ros-humble-depthai-ros] + jammy: [ros-humble-depthai-ros] +depthai_ros_driver: + ubuntu: + focal: [ros-humble-depthai-ros-driver] + jammy: [ros-humble-depthai-ros-driver] +depthai_ros_driver_dbgsym: + ubuntu: + focal: [ros-humble-depthai-ros-driver-dbgsym] + jammy: [ros-humble-depthai-ros-driver-dbgsym] +depthai_ros_msgs: + ubuntu: + focal: [ros-humble-depthai-ros-msgs] + jammy: [ros-humble-depthai-ros-msgs] +depthai_ros_msgs_dbgsym: + ubuntu: + focal: [ros-humble-depthai-ros-msgs-dbgsym] + jammy: [ros-humble-depthai-ros-msgs-dbgsym] +depthimage_to_laserscan: + ubuntu: + focal: [ros-humble-depthimage-to-laserscan] + jammy: [ros-humble-depthimage-to-laserscan] +depthimage_to_laserscan_dbgsym: + ubuntu: + focal: [ros-humble-depthimage-to-laserscan-dbgsym] + jammy: [ros-humble-depthimage-to-laserscan-dbgsym] +derived_object_msgs: + ubuntu: + focal: [ros-humble-derived-object-msgs] + jammy: [ros-humble-derived-object-msgs] +derived_object_msgs_dbgsym: + ubuntu: + focal: [ros-humble-derived-object-msgs-dbgsym] + jammy: [ros-humble-derived-object-msgs-dbgsym] +desktop: + ubuntu: + focal: [ros-humble-desktop] + jammy: [ros-humble-desktop] +desktop_full: + ubuntu: + focal: [ros-humble-desktop-full] + jammy: [ros-humble-desktop-full] +diagnostic_aggregator: + ubuntu: + focal: [ros-humble-diagnostic-aggregator] + jammy: [ros-humble-diagnostic-aggregator] +diagnostic_aggregator_dbgsym: + ubuntu: + focal: [ros-humble-diagnostic-aggregator-dbgsym] + jammy: [ros-humble-diagnostic-aggregator-dbgsym] +diagnostic_common_diagnostics: + ubuntu: + focal: [ros-humble-diagnostic-common-diagnostics] + jammy: [ros-humble-diagnostic-common-diagnostics] +diagnostic_msgs: + ubuntu: + focal: [ros-humble-diagnostic-msgs] + jammy: [ros-humble-diagnostic-msgs] +diagnostic_msgs_dbgsym: + ubuntu: + focal: [ros-humble-diagnostic-msgs-dbgsym] + jammy: [ros-humble-diagnostic-msgs-dbgsym] +diagnostic_updater: + ubuntu: + focal: [ros-humble-diagnostic-updater] + jammy: [ros-humble-diagnostic-updater] +diagnostic_updater_dbgsym: + ubuntu: + focal: [ros-humble-diagnostic-updater-dbgsym] + jammy: [ros-humble-diagnostic-updater-dbgsym] +diagnostics: + ubuntu: + focal: [ros-humble-diagnostics] + jammy: [ros-humble-diagnostics] +diff_drive_controller: + ubuntu: + focal: [ros-humble-diff-drive-controller] + jammy: [ros-humble-diff-drive-controller] +diff_drive_controller_dbgsym: + ubuntu: + focal: [ros-humble-diff-drive-controller-dbgsym] + jammy: [ros-humble-diff-drive-controller-dbgsym] +dolly_follow: + ubuntu: + focal: [ros-humble-dolly-follow] + jammy: [ros-humble-dolly-follow] +dolly_follow_dbgsym: + ubuntu: + focal: [ros-humble-dolly-follow-dbgsym] + jammy: [ros-humble-dolly-follow-dbgsym] +dolly_ignition: + ubuntu: + focal: [ros-humble-dolly-ignition] + jammy: [ros-humble-dolly-ignition] +domain_bridge: + ubuntu: + focal: [ros-humble-domain-bridge] + jammy: [ros-humble-domain-bridge] +domain_bridge_dbgsym: + ubuntu: + focal: [ros-humble-domain-bridge-dbgsym] + jammy: [ros-humble-domain-bridge-dbgsym] +domain_coordinator: + ubuntu: + focal: [ros-humble-domain-coordinator] + jammy: [ros-humble-domain-coordinator] +dummy_map_server: + ubuntu: + focal: [ros-humble-dummy-map-server] + jammy: [ros-humble-dummy-map-server] +dummy_map_server_dbgsym: + ubuntu: + focal: [ros-humble-dummy-map-server-dbgsym] + jammy: [ros-humble-dummy-map-server-dbgsym] +dummy_robot_bringup: + ubuntu: + focal: [ros-humble-dummy-robot-bringup] + jammy: [ros-humble-dummy-robot-bringup] +dummy_sensors: + ubuntu: + focal: [ros-humble-dummy-sensors] + jammy: [ros-humble-dummy-sensors] +dummy_sensors_dbgsym: + ubuntu: + focal: [ros-humble-dummy-sensors-dbgsym] + jammy: [ros-humble-dummy-sensors-dbgsym] +dwb_core: + ubuntu: + focal: [ros-humble-dwb-core] + jammy: [ros-humble-dwb-core] +dwb_core_dbgsym: + ubuntu: + focal: [ros-humble-dwb-core-dbgsym] + jammy: [ros-humble-dwb-core-dbgsym] +dwb_critics: + ubuntu: + focal: [ros-humble-dwb-critics] + jammy: [ros-humble-dwb-critics] +dwb_critics_dbgsym: + ubuntu: + focal: [ros-humble-dwb-critics-dbgsym] + jammy: [ros-humble-dwb-critics-dbgsym] +dwb_msgs: + ubuntu: + focal: [ros-humble-dwb-msgs] + jammy: [ros-humble-dwb-msgs] +dwb_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dwb-msgs-dbgsym] + jammy: [ros-humble-dwb-msgs-dbgsym] +dwb_plugins: + ubuntu: + focal: [ros-humble-dwb-plugins] + jammy: [ros-humble-dwb-plugins] +dwb_plugins_dbgsym: + ubuntu: + focal: [ros-humble-dwb-plugins-dbgsym] + jammy: [ros-humble-dwb-plugins-dbgsym] +dynamic_edt_3d: + ubuntu: + focal: [ros-humble-dynamic-edt-3d] + jammy: [ros-humble-dynamic-edt-3d] +dynamic_edt_3d_dbgsym: + ubuntu: + focal: [ros-humble-dynamic-edt-3d-dbgsym] + jammy: [ros-humble-dynamic-edt-3d-dbgsym] +dynamixel_sdk: + ubuntu: + focal: [ros-humble-dynamixel-sdk] + jammy: [ros-humble-dynamixel-sdk] +dynamixel_sdk_custom_interfaces: + ubuntu: + focal: [ros-humble-dynamixel-sdk-custom-interfaces] + jammy: [ros-humble-dynamixel-sdk-custom-interfaces] +dynamixel_sdk_custom_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-dynamixel-sdk-custom-interfaces-dbgsym] + jammy: [ros-humble-dynamixel-sdk-custom-interfaces-dbgsym] +dynamixel_sdk_dbgsym: + ubuntu: + focal: [ros-humble-dynamixel-sdk-dbgsym] + jammy: [ros-humble-dynamixel-sdk-dbgsym] +dynamixel_sdk_examples: + ubuntu: + focal: [ros-humble-dynamixel-sdk-examples] + jammy: [ros-humble-dynamixel-sdk-examples] +dynamixel_sdk_examples_dbgsym: + ubuntu: + focal: [ros-humble-dynamixel-sdk-examples-dbgsym] + jammy: [ros-humble-dynamixel-sdk-examples-dbgsym] +dynamixel_workbench: + ubuntu: + focal: [ros-humble-dynamixel-workbench] + jammy: [ros-humble-dynamixel-workbench] +dynamixel_workbench_msgs: + ubuntu: + focal: [ros-humble-dynamixel-workbench-msgs] + jammy: [ros-humble-dynamixel-workbench-msgs] +dynamixel_workbench_msgs_dbgsym: + ubuntu: + focal: [ros-humble-dynamixel-workbench-msgs-dbgsym] + jammy: [ros-humble-dynamixel-workbench-msgs-dbgsym] +dynamixel_workbench_toolbox: + ubuntu: + focal: [ros-humble-dynamixel-workbench-toolbox] + jammy: [ros-humble-dynamixel-workbench-toolbox] +dynamixel_workbench_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-dynamixel-workbench-toolbox-dbgsym] + jammy: [ros-humble-dynamixel-workbench-toolbox-dbgsym] +ecal: + ubuntu: + focal: [ros-humble-ecal] + jammy: [ros-humble-ecal] +ecal_dbgsym: + ubuntu: + focal: [ros-humble-ecal-dbgsym] + jammy: [ros-humble-ecal-dbgsym] +ecl_build: + ubuntu: + focal: [ros-humble-ecl-build] + jammy: [ros-humble-ecl-build] +ecl_license: + ubuntu: + focal: [ros-humble-ecl-license] + jammy: [ros-humble-ecl-license] +ecl_tools: + ubuntu: + focal: [ros-humble-ecl-tools] + jammy: [ros-humble-ecl-tools] +effort_controllers: + ubuntu: + focal: [ros-humble-effort-controllers] + jammy: [ros-humble-effort-controllers] +effort_controllers_dbgsym: + ubuntu: + focal: [ros-humble-effort-controllers-dbgsym] + jammy: [ros-humble-effort-controllers-dbgsym] +eigen3_cmake_module: + ubuntu: + focal: [ros-humble-eigen3-cmake-module] + jammy: [ros-humble-eigen3-cmake-module] +eigen_stl_containers: + ubuntu: + focal: [ros-humble-eigen-stl-containers] + jammy: [ros-humble-eigen-stl-containers] +eigenpy: + ubuntu: + focal: [ros-humble-eigenpy] + jammy: [ros-humble-eigenpy] +eigenpy_dbgsym: + ubuntu: + focal: [ros-humble-eigenpy-dbgsym] + jammy: [ros-humble-eigenpy-dbgsym] +evaluator: + ubuntu: + focal: [ros-humble-evaluator] + jammy: [ros-humble-evaluator] +event_camera_codecs: + ubuntu: + focal: [ros-humble-event-camera-codecs] + jammy: [ros-humble-event-camera-codecs] +event_camera_codecs_dbgsym: + ubuntu: + focal: [ros-humble-event-camera-codecs-dbgsym] + jammy: [ros-humble-event-camera-codecs-dbgsym] +event_camera_msgs: + ubuntu: + focal: [ros-humble-event-camera-msgs] + jammy: [ros-humble-event-camera-msgs] +event_camera_msgs_dbgsym: + ubuntu: + focal: [ros-humble-event-camera-msgs-dbgsym] + jammy: [ros-humble-event-camera-msgs-dbgsym] +event_camera_py: + ubuntu: + focal: [ros-humble-event-camera-py] + jammy: [ros-humble-event-camera-py] +event_camera_renderer: + ubuntu: + focal: [ros-humble-event-camera-renderer] + jammy: [ros-humble-event-camera-renderer] +event_camera_renderer_dbgsym: + ubuntu: + focal: [ros-humble-event-camera-renderer-dbgsym] + jammy: [ros-humble-event-camera-renderer-dbgsym] +example_interfaces: + ubuntu: + focal: [ros-humble-example-interfaces] + jammy: [ros-humble-example-interfaces] +example_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-example-interfaces-dbgsym] + jammy: [ros-humble-example-interfaces-dbgsym] +examples_rclcpp_async_client: + ubuntu: + focal: [ros-humble-examples-rclcpp-async-client] + jammy: [ros-humble-examples-rclcpp-async-client] +examples_rclcpp_async_client_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-async-client-dbgsym] + jammy: [ros-humble-examples-rclcpp-async-client-dbgsym] +examples_rclcpp_cbg_executor: + ubuntu: + focal: [ros-humble-examples-rclcpp-cbg-executor] + jammy: [ros-humble-examples-rclcpp-cbg-executor] +examples_rclcpp_cbg_executor_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-cbg-executor-dbgsym] + jammy: [ros-humble-examples-rclcpp-cbg-executor-dbgsym] +examples_rclcpp_minimal_action_client: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-action-client] + jammy: [ros-humble-examples-rclcpp-minimal-action-client] +examples_rclcpp_minimal_action_client_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-action-client-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-action-client-dbgsym] +examples_rclcpp_minimal_action_server: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-action-server] + jammy: [ros-humble-examples-rclcpp-minimal-action-server] +examples_rclcpp_minimal_action_server_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-action-server-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-action-server-dbgsym] +examples_rclcpp_minimal_client: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-client] + jammy: [ros-humble-examples-rclcpp-minimal-client] +examples_rclcpp_minimal_client_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-client-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-client-dbgsym] +examples_rclcpp_minimal_composition: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-composition] + jammy: [ros-humble-examples-rclcpp-minimal-composition] +examples_rclcpp_minimal_composition_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-composition-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-composition-dbgsym] +examples_rclcpp_minimal_publisher: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-publisher] + jammy: [ros-humble-examples-rclcpp-minimal-publisher] +examples_rclcpp_minimal_publisher_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-publisher-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-publisher-dbgsym] +examples_rclcpp_minimal_service: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-service] + jammy: [ros-humble-examples-rclcpp-minimal-service] +examples_rclcpp_minimal_service_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-service-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-service-dbgsym] +examples_rclcpp_minimal_subscriber: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-subscriber] + jammy: [ros-humble-examples-rclcpp-minimal-subscriber] +examples_rclcpp_minimal_subscriber_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-subscriber-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-subscriber-dbgsym] +examples_rclcpp_minimal_timer: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-timer] + jammy: [ros-humble-examples-rclcpp-minimal-timer] +examples_rclcpp_minimal_timer_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-minimal-timer-dbgsym] + jammy: [ros-humble-examples-rclcpp-minimal-timer-dbgsym] +examples_rclcpp_multithreaded_executor: + ubuntu: + focal: [ros-humble-examples-rclcpp-multithreaded-executor] + jammy: [ros-humble-examples-rclcpp-multithreaded-executor] +examples_rclcpp_multithreaded_executor_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-multithreaded-executor-dbgsym] + jammy: [ros-humble-examples-rclcpp-multithreaded-executor-dbgsym] +examples_rclcpp_wait_set: + ubuntu: + focal: [ros-humble-examples-rclcpp-wait-set] + jammy: [ros-humble-examples-rclcpp-wait-set] +examples_rclcpp_wait_set_dbgsym: + ubuntu: + focal: [ros-humble-examples-rclcpp-wait-set-dbgsym] + jammy: [ros-humble-examples-rclcpp-wait-set-dbgsym] +examples_rclpy_executors: + ubuntu: + focal: [ros-humble-examples-rclpy-executors] + jammy: [ros-humble-examples-rclpy-executors] +examples_rclpy_guard_conditions: + ubuntu: + focal: [ros-humble-examples-rclpy-guard-conditions] + jammy: [ros-humble-examples-rclpy-guard-conditions] +examples_rclpy_minimal_action_client: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-action-client] + jammy: [ros-humble-examples-rclpy-minimal-action-client] +examples_rclpy_minimal_action_server: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-action-server] + jammy: [ros-humble-examples-rclpy-minimal-action-server] +examples_rclpy_minimal_client: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-client] + jammy: [ros-humble-examples-rclpy-minimal-client] +examples_rclpy_minimal_publisher: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-publisher] + jammy: [ros-humble-examples-rclpy-minimal-publisher] +examples_rclpy_minimal_service: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-service] + jammy: [ros-humble-examples-rclpy-minimal-service] +examples_rclpy_minimal_subscriber: + ubuntu: + focal: [ros-humble-examples-rclpy-minimal-subscriber] + jammy: [ros-humble-examples-rclpy-minimal-subscriber] +examples_rclpy_pointcloud_publisher: + ubuntu: + focal: [ros-humble-examples-rclpy-pointcloud-publisher] + jammy: [ros-humble-examples-rclpy-pointcloud-publisher] +examples_tf2_py: + ubuntu: + focal: [ros-humble-examples-tf2-py] + jammy: [ros-humble-examples-tf2-py] +executive_smach: + ubuntu: + focal: [ros-humble-executive-smach] + jammy: [ros-humble-executive-smach] +fadecandy_driver: + ubuntu: + focal: [ros-humble-fadecandy-driver] + jammy: [ros-humble-fadecandy-driver] +fadecandy_driver_dbgsym: + ubuntu: + focal: [ros-humble-fadecandy-driver-dbgsym] + jammy: [ros-humble-fadecandy-driver-dbgsym] +fadecandy_msgs: + ubuntu: + focal: [ros-humble-fadecandy-msgs] + jammy: [ros-humble-fadecandy-msgs] +fadecandy_msgs_dbgsym: + ubuntu: + focal: [ros-humble-fadecandy-msgs-dbgsym] + jammy: [ros-humble-fadecandy-msgs-dbgsym] +fastcdr: + ubuntu: + focal: [ros-humble-fastcdr] + jammy: [ros-humble-fastcdr] +fastcdr_dbgsym: + ubuntu: + focal: [ros-humble-fastcdr-dbgsym] + jammy: [ros-humble-fastcdr-dbgsym] +fastrtps: + ubuntu: + focal: [ros-humble-fastrtps] + jammy: [ros-humble-fastrtps] +fastrtps_cmake_module: + ubuntu: + focal: [ros-humble-fastrtps-cmake-module] + jammy: [ros-humble-fastrtps-cmake-module] +fastrtps_dbgsym: + ubuntu: + focal: [ros-humble-fastrtps-dbgsym] + jammy: [ros-humble-fastrtps-dbgsym] +filters: + ubuntu: + focal: [ros-humble-filters] + jammy: [ros-humble-filters] +filters_dbgsym: + ubuntu: + focal: [ros-humble-filters-dbgsym] + jammy: [ros-humble-filters-dbgsym] +find_object_2d: + ubuntu: + focal: [ros-humble-find-object-2d] + jammy: [ros-humble-find-object-2d] +find_object_2d_dbgsym: + ubuntu: + focal: [ros-humble-find-object-2d-dbgsym] + jammy: [ros-humble-find-object-2d-dbgsym] +flexbe_behavior_engine: + ubuntu: + focal: [ros-humble-flexbe-behavior-engine] + jammy: [ros-humble-flexbe-behavior-engine] +flexbe_core: + ubuntu: + focal: [ros-humble-flexbe-core] + jammy: [ros-humble-flexbe-core] +flexbe_input: + ubuntu: + focal: [ros-humble-flexbe-input] + jammy: [ros-humble-flexbe-input] +flexbe_mirror: + ubuntu: + focal: [ros-humble-flexbe-mirror] + jammy: [ros-humble-flexbe-mirror] +flexbe_msgs: + ubuntu: + focal: [ros-humble-flexbe-msgs] + jammy: [ros-humble-flexbe-msgs] +flexbe_msgs_dbgsym: + ubuntu: + focal: [ros-humble-flexbe-msgs-dbgsym] + jammy: [ros-humble-flexbe-msgs-dbgsym] +flexbe_onboard: + ubuntu: + focal: [ros-humble-flexbe-onboard] + jammy: [ros-humble-flexbe-onboard] +flexbe_states: + ubuntu: + focal: [ros-humble-flexbe-states] + jammy: [ros-humble-flexbe-states] +flexbe_testing: + ubuntu: + focal: [ros-humble-flexbe-testing] + jammy: [ros-humble-flexbe-testing] +flexbe_widget: + ubuntu: + focal: [ros-humble-flexbe-widget] + jammy: [ros-humble-flexbe-widget] +flir_camera_description: + ubuntu: + focal: [ros-humble-flir-camera-description] + jammy: [ros-humble-flir-camera-description] +flir_camera_msgs: + ubuntu: + focal: [ros-humble-flir-camera-msgs] + jammy: [ros-humble-flir-camera-msgs] +flir_camera_msgs_dbgsym: + ubuntu: + focal: [ros-humble-flir-camera-msgs-dbgsym] + jammy: [ros-humble-flir-camera-msgs-dbgsym] +fluent_rviz: + ubuntu: + focal: [ros-humble-fluent-rviz] + jammy: [ros-humble-fluent-rviz] +fmi_adapter: + ubuntu: + focal: [ros-humble-fmi-adapter] + jammy: [ros-humble-fmi-adapter] +fmi_adapter_dbgsym: + ubuntu: + focal: [ros-humble-fmi-adapter-dbgsym] + jammy: [ros-humble-fmi-adapter-dbgsym] +fmi_adapter_examples: + ubuntu: + focal: [ros-humble-fmi-adapter-examples] + jammy: [ros-humble-fmi-adapter-examples] +fmilibrary_vendor: + ubuntu: + focal: [ros-humble-fmilibrary-vendor] + jammy: [ros-humble-fmilibrary-vendor] +fmilibrary_vendor_dbgsym: + ubuntu: + focal: [ros-humble-fmilibrary-vendor-dbgsym] + jammy: [ros-humble-fmilibrary-vendor-dbgsym] +fogros2: + ubuntu: + focal: [ros-humble-fogros2] + jammy: [ros-humble-fogros2] +fogros2_examples: + ubuntu: + focal: [ros-humble-fogros2-examples] + jammy: [ros-humble-fogros2-examples] +foonathan_memory_vendor: + ubuntu: + focal: [ros-humble-foonathan-memory-vendor] + jammy: [ros-humble-foonathan-memory-vendor] +force_torque_sensor_broadcaster: + ubuntu: + focal: [ros-humble-force-torque-sensor-broadcaster] + jammy: [ros-humble-force-torque-sensor-broadcaster] +force_torque_sensor_broadcaster_dbgsym: + ubuntu: + focal: [ros-humble-force-torque-sensor-broadcaster-dbgsym] + jammy: [ros-humble-force-torque-sensor-broadcaster-dbgsym] +foros: + ubuntu: + focal: [ros-humble-foros] + jammy: [ros-humble-foros] +foros_dbgsym: + ubuntu: + focal: [ros-humble-foros-dbgsym] + jammy: [ros-humble-foros-dbgsym] +foros_examples: + ubuntu: + focal: [ros-humble-foros-examples] + jammy: [ros-humble-foros-examples] +foros_examples_dbgsym: + ubuntu: + focal: [ros-humble-foros-examples-dbgsym] + jammy: [ros-humble-foros-examples-dbgsym] +foros_inspector: + ubuntu: + focal: [ros-humble-foros-inspector] + jammy: [ros-humble-foros-inspector] +foros_inspector_dbgsym: + ubuntu: + focal: [ros-humble-foros-inspector-dbgsym] + jammy: [ros-humble-foros-inspector-dbgsym] +foros_msgs: + ubuntu: + focal: [ros-humble-foros-msgs] + jammy: [ros-humble-foros-msgs] +foros_msgs_dbgsym: + ubuntu: + focal: [ros-humble-foros-msgs-dbgsym] + jammy: [ros-humble-foros-msgs-dbgsym] +forward_command_controller: + ubuntu: + focal: [ros-humble-forward-command-controller] + jammy: [ros-humble-forward-command-controller] +forward_command_controller_dbgsym: + ubuntu: + focal: [ros-humble-forward-command-controller-dbgsym] + jammy: [ros-humble-forward-command-controller-dbgsym] +four_wheel_steering_msgs: + ubuntu: + focal: [ros-humble-four-wheel-steering-msgs] + jammy: [ros-humble-four-wheel-steering-msgs] +four_wheel_steering_msgs_dbgsym: + ubuntu: + focal: [ros-humble-four-wheel-steering-msgs-dbgsym] + jammy: [ros-humble-four-wheel-steering-msgs-dbgsym] +foxglove_bridge: + ubuntu: + focal: [ros-humble-foxglove-bridge] + jammy: [ros-humble-foxglove-bridge] +foxglove_bridge_dbgsym: + ubuntu: + focal: [ros-humble-foxglove-bridge-dbgsym] + jammy: [ros-humble-foxglove-bridge-dbgsym] +foxglove_msgs: + ubuntu: + focal: [ros-humble-foxglove-msgs] + jammy: [ros-humble-foxglove-msgs] +foxglove_msgs_dbgsym: + ubuntu: + focal: [ros-humble-foxglove-msgs-dbgsym] + jammy: [ros-humble-foxglove-msgs-dbgsym] +gazebo_dev: + ubuntu: + focal: [ros-humble-gazebo-dev] + jammy: [ros-humble-gazebo-dev] +gazebo_msgs: + ubuntu: + focal: [ros-humble-gazebo-msgs] + jammy: [ros-humble-gazebo-msgs] +gazebo_msgs_dbgsym: + ubuntu: + focal: [ros-humble-gazebo-msgs-dbgsym] + jammy: [ros-humble-gazebo-msgs-dbgsym] +gc_spl_2022: + ubuntu: + focal: [ros-humble-gc-spl-2022] + jammy: [ros-humble-gc-spl-2022] +generate_parameter_library: + ubuntu: + focal: [ros-humble-generate-parameter-library] + jammy: [ros-humble-generate-parameter-library] +generate_parameter_library_example: + ubuntu: + focal: [ros-humble-generate-parameter-library-example] + jammy: [ros-humble-generate-parameter-library-example] +generate_parameter_library_example_dbgsym: + ubuntu: + focal: [ros-humble-generate-parameter-library-example-dbgsym] + jammy: [ros-humble-generate-parameter-library-example-dbgsym] +generate_parameter_library_py: + ubuntu: + focal: [ros-humble-generate-parameter-library-py] + jammy: [ros-humble-generate-parameter-library-py] +generate_parameter_module_example: + ubuntu: + focal: [ros-humble-generate-parameter-module-example] + jammy: [ros-humble-generate-parameter-module-example] +geodesy: + ubuntu: + focal: [ros-humble-geodesy] + jammy: [ros-humble-geodesy] +geographic_info: + ubuntu: + focal: [ros-humble-geographic-info] + jammy: [ros-humble-geographic-info] +geographic_msgs: + ubuntu: + focal: [ros-humble-geographic-msgs] + jammy: [ros-humble-geographic-msgs] +geographic_msgs_dbgsym: + ubuntu: + focal: [ros-humble-geographic-msgs-dbgsym] + jammy: [ros-humble-geographic-msgs-dbgsym] +geometric_shapes: + ubuntu: + focal: [ros-humble-geometric-shapes] + jammy: [ros-humble-geometric-shapes] +geometric_shapes_dbgsym: + ubuntu: + focal: [ros-humble-geometric-shapes-dbgsym] + jammy: [ros-humble-geometric-shapes-dbgsym] +geometry2: + ubuntu: + focal: [ros-humble-geometry2] + jammy: [ros-humble-geometry2] +geometry_msgs: + ubuntu: + focal: [ros-humble-geometry-msgs] + jammy: [ros-humble-geometry-msgs] +geometry_msgs_dbgsym: + ubuntu: + focal: [ros-humble-geometry-msgs-dbgsym] + jammy: [ros-humble-geometry-msgs-dbgsym] +geometry_tutorials: + ubuntu: + focal: [ros-humble-geometry-tutorials] + jammy: [ros-humble-geometry-tutorials] +gmock_vendor: + ubuntu: + focal: [ros-humble-gmock-vendor] + jammy: [ros-humble-gmock-vendor] +google_benchmark_vendor: + ubuntu: + focal: [ros-humble-google-benchmark-vendor] + jammy: [ros-humble-google-benchmark-vendor] +google_benchmark_vendor_dbgsym: + ubuntu: + focal: [ros-humble-google-benchmark-vendor-dbgsym] + jammy: [ros-humble-google-benchmark-vendor-dbgsym] +gps_msgs: + ubuntu: + focal: [ros-humble-gps-msgs] + jammy: [ros-humble-gps-msgs] +gps_msgs_dbgsym: + ubuntu: + focal: [ros-humble-gps-msgs-dbgsym] + jammy: [ros-humble-gps-msgs-dbgsym] +gps_tools: + ubuntu: + focal: [ros-humble-gps-tools] + jammy: [ros-humble-gps-tools] +gps_tools_dbgsym: + ubuntu: + focal: [ros-humble-gps-tools-dbgsym] + jammy: [ros-humble-gps-tools-dbgsym] +gps_umd: + ubuntu: + focal: [ros-humble-gps-umd] + jammy: [ros-humble-gps-umd] +gpsd_client: + ubuntu: + focal: [ros-humble-gpsd-client] + jammy: [ros-humble-gpsd-client] +gpsd_client_dbgsym: + ubuntu: + focal: [ros-humble-gpsd-client-dbgsym] + jammy: [ros-humble-gpsd-client-dbgsym] +graph_msgs: + ubuntu: + focal: [ros-humble-graph-msgs] + jammy: [ros-humble-graph-msgs] +graph_msgs_dbgsym: + ubuntu: + focal: [ros-humble-graph-msgs-dbgsym] + jammy: [ros-humble-graph-msgs-dbgsym] +grasping_msgs: + ubuntu: + focal: [ros-humble-grasping-msgs] + jammy: [ros-humble-grasping-msgs] +grasping_msgs_dbgsym: + ubuntu: + focal: [ros-humble-grasping-msgs-dbgsym] + jammy: [ros-humble-grasping-msgs-dbgsym] +grbl_msgs: + ubuntu: + focal: [ros-humble-grbl-msgs] + jammy: [ros-humble-grbl-msgs] +grbl_msgs_dbgsym: + ubuntu: + focal: [ros-humble-grbl-msgs-dbgsym] + jammy: [ros-humble-grbl-msgs-dbgsym] +grbl_ros: + ubuntu: + focal: [ros-humble-grbl-ros] + jammy: [ros-humble-grbl-ros] +grid_map: + ubuntu: + focal: [ros-humble-grid-map] + jammy: [ros-humble-grid-map] +grid_map_cmake_helpers: + ubuntu: + focal: [ros-humble-grid-map-cmake-helpers] + jammy: [ros-humble-grid-map-cmake-helpers] +grid_map_core: + ubuntu: + focal: [ros-humble-grid-map-core] + jammy: [ros-humble-grid-map-core] +grid_map_costmap_2d: + ubuntu: + focal: [ros-humble-grid-map-costmap-2d] + jammy: [ros-humble-grid-map-costmap-2d] +grid_map_cv: + ubuntu: + focal: [ros-humble-grid-map-cv] + jammy: [ros-humble-grid-map-cv] +grid_map_cv_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-cv-dbgsym] + jammy: [ros-humble-grid-map-cv-dbgsym] +grid_map_demos: + ubuntu: + focal: [ros-humble-grid-map-demos] + jammy: [ros-humble-grid-map-demos] +grid_map_demos_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-demos-dbgsym] + jammy: [ros-humble-grid-map-demos-dbgsym] +grid_map_filters: + ubuntu: + focal: [ros-humble-grid-map-filters] + jammy: [ros-humble-grid-map-filters] +grid_map_filters_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-filters-dbgsym] + jammy: [ros-humble-grid-map-filters-dbgsym] +grid_map_loader: + ubuntu: + focal: [ros-humble-grid-map-loader] + jammy: [ros-humble-grid-map-loader] +grid_map_loader_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-loader-dbgsym] + jammy: [ros-humble-grid-map-loader-dbgsym] +grid_map_msgs: + ubuntu: + focal: [ros-humble-grid-map-msgs] + jammy: [ros-humble-grid-map-msgs] +grid_map_msgs_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-msgs-dbgsym] + jammy: [ros-humble-grid-map-msgs-dbgsym] +grid_map_octomap: + ubuntu: + focal: [ros-humble-grid-map-octomap] + jammy: [ros-humble-grid-map-octomap] +grid_map_pcl: + ubuntu: + focal: [ros-humble-grid-map-pcl] + jammy: [ros-humble-grid-map-pcl] +grid_map_pcl_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-pcl-dbgsym] + jammy: [ros-humble-grid-map-pcl-dbgsym] +grid_map_ros: + ubuntu: + focal: [ros-humble-grid-map-ros] + jammy: [ros-humble-grid-map-ros] +grid_map_ros_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-ros-dbgsym] + jammy: [ros-humble-grid-map-ros-dbgsym] +grid_map_rviz_plugin: + ubuntu: + focal: [ros-humble-grid-map-rviz-plugin] + jammy: [ros-humble-grid-map-rviz-plugin] +grid_map_rviz_plugin_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-rviz-plugin-dbgsym] + jammy: [ros-humble-grid-map-rviz-plugin-dbgsym] +grid_map_sdf: + ubuntu: + focal: [ros-humble-grid-map-sdf] + jammy: [ros-humble-grid-map-sdf] +grid_map_visualization: + ubuntu: + focal: [ros-humble-grid-map-visualization] + jammy: [ros-humble-grid-map-visualization] +grid_map_visualization_dbgsym: + ubuntu: + focal: [ros-humble-grid-map-visualization-dbgsym] + jammy: [ros-humble-grid-map-visualization-dbgsym] +gripper_controllers: + ubuntu: + focal: [ros-humble-gripper-controllers] + jammy: [ros-humble-gripper-controllers] +gripper_controllers_dbgsym: + ubuntu: + focal: [ros-humble-gripper-controllers-dbgsym] + jammy: [ros-humble-gripper-controllers-dbgsym] +gscam: + ubuntu: + focal: [ros-humble-gscam] + jammy: [ros-humble-gscam] +gscam_dbgsym: + ubuntu: + focal: [ros-humble-gscam-dbgsym] + jammy: [ros-humble-gscam-dbgsym] +gtest_vendor: + ubuntu: + focal: [ros-humble-gtest-vendor] + jammy: [ros-humble-gtest-vendor] +gtsam: + ubuntu: + focal: [ros-humble-gtsam] + jammy: [ros-humble-gtsam] +gtsam_dbgsym: + ubuntu: + focal: [ros-humble-gtsam-dbgsym] + jammy: [ros-humble-gtsam-dbgsym] +gxf_isaac_argus: + ubuntu: + focal: [ros-humble-gxf-isaac-argus] + jammy: [ros-humble-gxf-isaac-argus] +gxf_isaac_atlas: + ubuntu: + focal: [ros-humble-gxf-isaac-atlas] + jammy: [ros-humble-gxf-isaac-atlas] +gxf_isaac_bi3d: + ubuntu: + focal: [ros-humble-gxf-isaac-bi3d] + jammy: [ros-humble-gxf-isaac-bi3d] +gxf_isaac_bmi088_imu: + ubuntu: + focal: [ros-humble-gxf-isaac-bmi088-imu] + jammy: [ros-humble-gxf-isaac-bmi088-imu] +gxf_isaac_camera_utils: + ubuntu: + focal: [ros-humble-gxf-isaac-camera-utils] + jammy: [ros-humble-gxf-isaac-camera-utils] +gxf_isaac_centerpose: + ubuntu: + focal: [ros-humble-gxf-isaac-centerpose] + jammy: [ros-humble-gxf-isaac-centerpose] +gxf_isaac_cuda: + ubuntu: + focal: [ros-humble-gxf-isaac-cuda] + jammy: [ros-humble-gxf-isaac-cuda] +gxf_isaac_depth_image_proc: + ubuntu: + focal: [ros-humble-gxf-isaac-depth-image-proc] + jammy: [ros-humble-gxf-isaac-depth-image-proc] +gxf_isaac_detectnet: + ubuntu: + focal: [ros-humble-gxf-isaac-detectnet] + jammy: [ros-humble-gxf-isaac-detectnet] +gxf_isaac_dope: + ubuntu: + focal: [ros-humble-gxf-isaac-dope] + jammy: [ros-humble-gxf-isaac-dope] +gxf_isaac_ess: + ubuntu: + focal: [ros-humble-gxf-isaac-ess] + jammy: [ros-humble-gxf-isaac-ess] +gxf_isaac_fiducials: + ubuntu: + focal: [ros-humble-gxf-isaac-fiducials] + jammy: [ros-humble-gxf-isaac-fiducials] +gxf_isaac_flatscan_localization: + ubuntu: + focal: [ros-humble-gxf-isaac-flatscan-localization] + jammy: [ros-humble-gxf-isaac-flatscan-localization] +gxf_isaac_foundationpose: + ubuntu: + focal: [ros-humble-gxf-isaac-foundationpose] + jammy: [ros-humble-gxf-isaac-foundationpose] +gxf_isaac_gems: + ubuntu: + focal: [ros-humble-gxf-isaac-gems] + jammy: [ros-humble-gxf-isaac-gems] +gxf_isaac_gxf_helpers: + ubuntu: + focal: [ros-humble-gxf-isaac-gxf-helpers] + jammy: [ros-humble-gxf-isaac-gxf-helpers] +gxf_isaac_hesai: + ubuntu: + focal: [ros-humble-gxf-isaac-hesai] + jammy: [ros-humble-gxf-isaac-hesai] +gxf_isaac_image_flip: + ubuntu: + focal: [ros-humble-gxf-isaac-image-flip] + jammy: [ros-humble-gxf-isaac-image-flip] +gxf_isaac_imu_utils: + ubuntu: + focal: [ros-humble-gxf-isaac-imu-utils] + jammy: [ros-humble-gxf-isaac-imu-utils] +gxf_isaac_localization: + ubuntu: + focal: [ros-humble-gxf-isaac-localization] + jammy: [ros-humble-gxf-isaac-localization] +gxf_isaac_message_compositor: + ubuntu: + focal: [ros-humble-gxf-isaac-message-compositor] + jammy: [ros-humble-gxf-isaac-message-compositor] +gxf_isaac_messages: + ubuntu: + focal: [ros-humble-gxf-isaac-messages] + jammy: [ros-humble-gxf-isaac-messages] +gxf_isaac_messages_throttler: + ubuntu: + focal: [ros-humble-gxf-isaac-messages-throttler] + jammy: [ros-humble-gxf-isaac-messages-throttler] +gxf_isaac_occupancy_grid_projector: + ubuntu: + focal: [ros-humble-gxf-isaac-occupancy-grid-projector] + jammy: [ros-humble-gxf-isaac-occupancy-grid-projector] +gxf_isaac_optimizer: + ubuntu: + focal: [ros-humble-gxf-isaac-optimizer] + jammy: [ros-humble-gxf-isaac-optimizer] +gxf_isaac_point_cloud: + ubuntu: + focal: [ros-humble-gxf-isaac-point-cloud] + jammy: [ros-humble-gxf-isaac-point-cloud] +gxf_isaac_range_scan_processing: + ubuntu: + focal: [ros-humble-gxf-isaac-range-scan-processing] + jammy: [ros-humble-gxf-isaac-range-scan-processing] +gxf_isaac_rectify: + ubuntu: + focal: [ros-humble-gxf-isaac-rectify] + jammy: [ros-humble-gxf-isaac-rectify] +gxf_isaac_ros_cuda: + ubuntu: + focal: [ros-humble-gxf-isaac-ros-cuda] + jammy: [ros-humble-gxf-isaac-ros-cuda] +gxf_isaac_ros_image_segmentation: + ubuntu: + focal: [ros-humble-gxf-isaac-ros-image-segmentation] + jammy: [ros-humble-gxf-isaac-ros-image-segmentation] +gxf_isaac_ros_messages: + ubuntu: + focal: [ros-humble-gxf-isaac-ros-messages] + jammy: [ros-humble-gxf-isaac-ros-messages] +gxf_isaac_ros_segment_anything: + ubuntu: + focal: [ros-humble-gxf-isaac-ros-segment-anything] + jammy: [ros-humble-gxf-isaac-ros-segment-anything] +gxf_isaac_ros_unet: + ubuntu: + focal: [ros-humble-gxf-isaac-ros-unet] + jammy: [ros-humble-gxf-isaac-ros-unet] +gxf_isaac_segway: + ubuntu: + focal: [ros-humble-gxf-isaac-segway] + jammy: [ros-humble-gxf-isaac-segway] +gxf_isaac_sgm: + ubuntu: + focal: [ros-humble-gxf-isaac-sgm] + jammy: [ros-humble-gxf-isaac-sgm] +gxf_isaac_sight: + ubuntu: + focal: [ros-humble-gxf-isaac-sight] + jammy: [ros-humble-gxf-isaac-sight] +gxf_isaac_synchronization: + ubuntu: + focal: [ros-humble-gxf-isaac-synchronization] + jammy: [ros-humble-gxf-isaac-synchronization] +gxf_isaac_tensor_rt: + ubuntu: + focal: [ros-humble-gxf-isaac-tensor-rt] + jammy: [ros-humble-gxf-isaac-tensor-rt] +gxf_isaac_tensorops: + ubuntu: + focal: [ros-humble-gxf-isaac-tensorops] + jammy: [ros-humble-gxf-isaac-tensorops] +gxf_isaac_timestamp_correlator: + ubuntu: + focal: [ros-humble-gxf-isaac-timestamp-correlator] + jammy: [ros-humble-gxf-isaac-timestamp-correlator] +gxf_isaac_triton: + ubuntu: + focal: [ros-humble-gxf-isaac-triton] + jammy: [ros-humble-gxf-isaac-triton] +gxf_isaac_utils: + ubuntu: + focal: [ros-humble-gxf-isaac-utils] + jammy: [ros-humble-gxf-isaac-utils] +gxf_isaac_video_buffer_utils: + ubuntu: + focal: [ros-humble-gxf-isaac-video-buffer-utils] + jammy: [ros-humble-gxf-isaac-video-buffer-utils] +h264_image_transport: + ubuntu: + focal: [ros-humble-h264-image-transport] + jammy: [ros-humble-h264-image-transport] +h264_msgs: + ubuntu: + focal: [ros-humble-h264-msgs] + jammy: [ros-humble-h264-msgs] +hardware_interface: + ubuntu: + focal: [ros-humble-hardware-interface] + jammy: [ros-humble-hardware-interface] +hardware_interface_dbgsym: + ubuntu: + focal: [ros-humble-hardware-interface-dbgsym] + jammy: [ros-humble-hardware-interface-dbgsym] +hash_library_vendor: + ubuntu: + focal: [ros-humble-hash-library-vendor] + jammy: [ros-humble-hash-library-vendor] +hash_library_vendor_dbgsym: + ubuntu: + focal: [ros-humble-hash-library-vendor-dbgsym] + jammy: [ros-humble-hash-library-vendor-dbgsym] +hawk_description: + ubuntu: + focal: [ros-humble-hawk-description] + jammy: [ros-humble-hawk-description] +heaphook: + ubuntu: + focal: [ros-humble-heaphook] + jammy: [ros-humble-heaphook] +heaphook_dbgsym: + ubuntu: + focal: [ros-humble-heaphook-dbgsym] + jammy: [ros-humble-heaphook-dbgsym] +hesai_ros_driver: + ubuntu: + focal: [ros-humble-hesai-ros-driver] + jammy: [ros-humble-hesai-ros-driver] +hey5_description: + ubuntu: + focal: [ros-humble-hey5-description] + jammy: [ros-humble-hey5-description] +hls_lfcd_lds_driver: + ubuntu: + focal: [ros-humble-hls-lfcd-lds-driver] + jammy: [ros-humble-hls-lfcd-lds-driver] +hls_lfcd_lds_driver_dbgsym: + ubuntu: + focal: [ros-humble-hls-lfcd-lds-driver-dbgsym] + jammy: [ros-humble-hls-lfcd-lds-driver-dbgsym] +hpp_fcl: + ubuntu: + focal: [ros-humble-hpp-fcl] + jammy: [ros-humble-hpp-fcl] +hpp_fcl_dbgsym: + ubuntu: + focal: [ros-humble-hpp-fcl-dbgsym] + jammy: [ros-humble-hpp-fcl-dbgsym] +ibeo_msgs: + ubuntu: + focal: [ros-humble-ibeo-msgs] + jammy: [ros-humble-ibeo-msgs] +ibeo_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ibeo-msgs-dbgsym] + jammy: [ros-humble-ibeo-msgs-dbgsym] +iceoryx_binding_c: + ubuntu: + focal: [ros-humble-iceoryx-binding-c] + jammy: [ros-humble-iceoryx-binding-c] +iceoryx_binding_c_dbgsym: + ubuntu: + focal: [ros-humble-iceoryx-binding-c-dbgsym] + jammy: [ros-humble-iceoryx-binding-c-dbgsym] +iceoryx_hoofs: + ubuntu: + focal: [ros-humble-iceoryx-hoofs] + jammy: [ros-humble-iceoryx-hoofs] +iceoryx_hoofs_dbgsym: + ubuntu: + focal: [ros-humble-iceoryx-hoofs-dbgsym] + jammy: [ros-humble-iceoryx-hoofs-dbgsym] +iceoryx_posh: + ubuntu: + focal: [ros-humble-iceoryx-posh] + jammy: [ros-humble-iceoryx-posh] +iceoryx_posh_dbgsym: + ubuntu: + focal: [ros-humble-iceoryx-posh-dbgsym] + jammy: [ros-humble-iceoryx-posh-dbgsym] +ifm3d_core: + ubuntu: + focal: [ros-humble-ifm3d-core] + jammy: [ros-humble-ifm3d-core] +ign_ros2_control: + ubuntu: + focal: [ros-humble-ign-ros2-control] + jammy: [ros-humble-ign-ros2-control] +ign_ros2_control_dbgsym: + ubuntu: + focal: [ros-humble-ign-ros2-control-dbgsym] + jammy: [ros-humble-ign-ros2-control-dbgsym] +ign_ros2_control_demos: + ubuntu: + focal: [ros-humble-ign-ros2-control-demos] + jammy: [ros-humble-ign-ros2-control-demos] +ign_ros2_control_demos_dbgsym: + ubuntu: + focal: [ros-humble-ign-ros2-control-demos-dbgsym] + jammy: [ros-humble-ign-ros2-control-demos-dbgsym] +ignition_cmake2_vendor: + ubuntu: + focal: [ros-humble-ignition-cmake2-vendor] + jammy: [ros-humble-ignition-cmake2-vendor] +ignition_math6_vendor: + ubuntu: + focal: [ros-humble-ignition-math6-vendor] + jammy: [ros-humble-ignition-math6-vendor] +image_common: + ubuntu: + focal: [ros-humble-image-common] + jammy: [ros-humble-image-common] +image_geometry: + ubuntu: + focal: [ros-humble-image-geometry] + jammy: [ros-humble-image-geometry] +image_geometry_dbgsym: + ubuntu: + focal: [ros-humble-image-geometry-dbgsym] + jammy: [ros-humble-image-geometry-dbgsym] +image_pipeline: + ubuntu: + focal: [ros-humble-image-pipeline] + jammy: [ros-humble-image-pipeline] +image_proc: + ubuntu: + focal: [ros-humble-image-proc] + jammy: [ros-humble-image-proc] +image_proc_dbgsym: + ubuntu: + focal: [ros-humble-image-proc-dbgsym] + jammy: [ros-humble-image-proc-dbgsym] +image_publisher: + ubuntu: + focal: [ros-humble-image-publisher] + jammy: [ros-humble-image-publisher] +image_publisher_dbgsym: + ubuntu: + focal: [ros-humble-image-publisher-dbgsym] + jammy: [ros-humble-image-publisher-dbgsym] +image_rotate: + ubuntu: + focal: [ros-humble-image-rotate] + jammy: [ros-humble-image-rotate] +image_rotate_dbgsym: + ubuntu: + focal: [ros-humble-image-rotate-dbgsym] + jammy: [ros-humble-image-rotate-dbgsym] +image_tools: + ubuntu: + focal: [ros-humble-image-tools] + jammy: [ros-humble-image-tools] +image_tools_dbgsym: + ubuntu: + focal: [ros-humble-image-tools-dbgsym] + jammy: [ros-humble-image-tools-dbgsym] +image_transport: + ubuntu: + focal: [ros-humble-image-transport] + jammy: [ros-humble-image-transport] +image_transport_dbgsym: + ubuntu: + focal: [ros-humble-image-transport-dbgsym] + jammy: [ros-humble-image-transport-dbgsym] +image_transport_plugins: + ubuntu: + focal: [ros-humble-image-transport-plugins] + jammy: [ros-humble-image-transport-plugins] +image_view: + ubuntu: + focal: [ros-humble-image-view] + jammy: [ros-humble-image-view] +image_view_dbgsym: + ubuntu: + focal: [ros-humble-image-view-dbgsym] + jammy: [ros-humble-image-view-dbgsym] +imu_complementary_filter: + ubuntu: + focal: [ros-humble-imu-complementary-filter] + jammy: [ros-humble-imu-complementary-filter] +imu_complementary_filter_dbgsym: + ubuntu: + focal: [ros-humble-imu-complementary-filter-dbgsym] + jammy: [ros-humble-imu-complementary-filter-dbgsym] +imu_filter_madgwick: + ubuntu: + focal: [ros-humble-imu-filter-madgwick] + jammy: [ros-humble-imu-filter-madgwick] +imu_filter_madgwick_dbgsym: + ubuntu: + focal: [ros-humble-imu-filter-madgwick-dbgsym] + jammy: [ros-humble-imu-filter-madgwick-dbgsym] +imu_sensor_broadcaster: + ubuntu: + focal: [ros-humble-imu-sensor-broadcaster] + jammy: [ros-humble-imu-sensor-broadcaster] +imu_sensor_broadcaster_dbgsym: + ubuntu: + focal: [ros-humble-imu-sensor-broadcaster-dbgsym] + jammy: [ros-humble-imu-sensor-broadcaster-dbgsym] +imu_tools: + ubuntu: + focal: [ros-humble-imu-tools] + jammy: [ros-humble-imu-tools] +interactive_marker_twist_server: + ubuntu: + focal: [ros-humble-interactive-marker-twist-server] + jammy: [ros-humble-interactive-marker-twist-server] +interactive_marker_twist_server_dbgsym: + ubuntu: + focal: [ros-humble-interactive-marker-twist-server-dbgsym] + jammy: [ros-humble-interactive-marker-twist-server-dbgsym] +interactive_markers: + ubuntu: + focal: [ros-humble-interactive-markers] + jammy: [ros-humble-interactive-markers] +interactive_markers_dbgsym: + ubuntu: + focal: [ros-humble-interactive-markers-dbgsym] + jammy: [ros-humble-interactive-markers-dbgsym] +intra_process_demo: + ubuntu: + focal: [ros-humble-intra-process-demo] + jammy: [ros-humble-intra-process-demo] +intra_process_demo_dbgsym: + ubuntu: + focal: [ros-humble-intra-process-demo-dbgsym] + jammy: [ros-humble-intra-process-demo-dbgsym] +io_context: + ubuntu: + focal: [ros-humble-io-context] + jammy: [ros-humble-io-context] +io_context_dbgsym: + ubuntu: + focal: [ros-humble-io-context-dbgsym] + jammy: [ros-humble-io-context-dbgsym] +irobot_create_common_bringup: + ubuntu: + focal: [ros-humble-irobot-create-common-bringup] + jammy: [ros-humble-irobot-create-common-bringup] +irobot_create_control: + ubuntu: + focal: [ros-humble-irobot-create-control] + jammy: [ros-humble-irobot-create-control] +irobot_create_description: + ubuntu: + focal: [ros-humble-irobot-create-description] + jammy: [ros-humble-irobot-create-description] +irobot_create_ignition_bringup: + ubuntu: + focal: [ros-humble-irobot-create-ignition-bringup] + jammy: [ros-humble-irobot-create-ignition-bringup] +irobot_create_ignition_plugins: + ubuntu: + focal: [ros-humble-irobot-create-ignition-plugins] + jammy: [ros-humble-irobot-create-ignition-plugins] +irobot_create_ignition_plugins_dbgsym: + ubuntu: + focal: [ros-humble-irobot-create-ignition-plugins-dbgsym] + jammy: [ros-humble-irobot-create-ignition-plugins-dbgsym] +irobot_create_ignition_sim: + ubuntu: + focal: [ros-humble-irobot-create-ignition-sim] + jammy: [ros-humble-irobot-create-ignition-sim] +irobot_create_ignition_toolbox: + ubuntu: + focal: [ros-humble-irobot-create-ignition-toolbox] + jammy: [ros-humble-irobot-create-ignition-toolbox] +irobot_create_ignition_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-irobot-create-ignition-toolbox-dbgsym] + jammy: [ros-humble-irobot-create-ignition-toolbox-dbgsym] +irobot_create_msgs: + ubuntu: + focal: [ros-humble-irobot-create-msgs] + jammy: [ros-humble-irobot-create-msgs] +irobot_create_msgs_dbgsym: + ubuntu: + focal: [ros-humble-irobot-create-msgs-dbgsym] + jammy: [ros-humble-irobot-create-msgs-dbgsym] +irobot_create_nodes: + ubuntu: + focal: [ros-humble-irobot-create-nodes] + jammy: [ros-humble-irobot-create-nodes] +irobot_create_nodes_dbgsym: + ubuntu: + focal: [ros-humble-irobot-create-nodes-dbgsym] + jammy: [ros-humble-irobot-create-nodes-dbgsym] +irobot_create_toolbox: + ubuntu: + focal: [ros-humble-irobot-create-toolbox] + jammy: [ros-humble-irobot-create-toolbox] +irobot_create_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-irobot-create-toolbox-dbgsym] + jammy: [ros-humble-irobot-create-toolbox-dbgsym] +isaac_manipulator_bringup: + ubuntu: + focal: [ros-humble-isaac-manipulator-bringup] + jammy: [ros-humble-isaac-manipulator-bringup] +isaac_mapping_and_localization: + ubuntu: + focal: [ros-humble-isaac-mapping-and-localization] + jammy: [ros-humble-isaac-mapping-and-localization] +isaac_ros_apriltag: + ubuntu: + focal: [ros-humble-isaac-ros-apriltag] + jammy: [ros-humble-isaac-ros-apriltag] +isaac_ros_apriltag_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-apriltag-benchmark] + jammy: [ros-humble-isaac-ros-apriltag-benchmark] +isaac_ros_apriltag_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-apriltag-interfaces] + jammy: [ros-humble-isaac-ros-apriltag-interfaces] +isaac_ros_apriltag_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-apriltag-msgs] + jammy: [ros-noetic-isaac-ros-apriltag-msgs] +isaac_ros_argus_camera: + ubuntu: + focal: [ros-humble-isaac-ros-argus-camera] + jammy: [ros-humble-isaac-ros-argus-camera] +isaac_ros_argus_camera_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-argus-camera-benchmark] + jammy: [ros-humble-isaac-ros-argus-camera-benchmark] +isaac_ros_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-benchmark] + jammy: [ros-humble-isaac-ros-benchmark] +isaac_ros_bi3d: + ubuntu: + focal: [ros-humble-isaac-ros-bi3d] + jammy: [ros-humble-isaac-ros-bi3d] +isaac_ros_bi3d_freespace: + ubuntu: + focal: [ros-humble-isaac-ros-bi3d-freespace] + jammy: [ros-humble-isaac-ros-bi3d-freespace] +isaac_ros_bi3d_freespace_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-bi3d-freespace-benchmark] + jammy: [ros-humble-isaac-ros-bi3d-freespace-benchmark] +isaac_ros_bi3d_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-bi3d-interfaces] + jammy: [ros-humble-isaac-ros-bi3d-interfaces] +isaac_ros_bi3d_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-bi3d-msgs] + jammy: [ros-noetic-isaac-ros-bi3d-msgs] +isaac_ros_camera_localization: + ubuntu: + focal: [ros-humble-isaac-ros-camera-localization] + jammy: [ros-humble-isaac-ros-camera-localization] +isaac_ros_centerpose: + ubuntu: + focal: [ros-humble-isaac-ros-centerpose] + jammy: [ros-humble-isaac-ros-centerpose] +isaac_ros_centerpose_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-centerpose-benchmark] + jammy: [ros-humble-isaac-ros-centerpose-benchmark] +isaac_ros_common: + ubuntu: + focal: [ros-humble-isaac-ros-common] + jammy: [ros-humble-isaac-ros-common] +isaac_ros_correlated_timestamp_driver: + ubuntu: + focal: [ros-humble-isaac-ros-correlated-timestamp-driver] + jammy: [ros-humble-isaac-ros-correlated-timestamp-driver] +isaac_ros_cumotion: + ubuntu: + focal: [ros-humble-isaac-ros-cumotion] + jammy: [ros-humble-isaac-ros-cumotion] +isaac_ros_cumotion_examples: + ubuntu: + focal: [ros-humble-isaac-ros-cumotion-examples] + jammy: [ros-humble-isaac-ros-cumotion-examples] +isaac_ros_cumotion_moveit: + ubuntu: + focal: [ros-humble-isaac-ros-cumotion-moveit] + jammy: [ros-humble-isaac-ros-cumotion-moveit] +isaac_ros_cumotion_robot_description: + ubuntu: + focal: [ros-humble-isaac-ros-cumotion-robot-description] + jammy: [ros-humble-isaac-ros-cumotion-robot-description] +isaac_ros_data_recorder: + ubuntu: + focal: [ros-humble-isaac-ros-data-recorder] + jammy: [ros-humble-isaac-ros-data-recorder] +isaac_ros_data_recorder_nova_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-data-recorder-nova-benchmark] + jammy: [ros-humble-isaac-ros-data-recorder-nova-benchmark] +isaac_ros_data_replayer: + ubuntu: + focal: [ros-humble-isaac-ros-data-replayer] + jammy: [ros-humble-isaac-ros-data-replayer] +isaac_ros_data_validation: + ubuntu: + focal: [ros-humble-isaac-ros-data-validation] + jammy: [ros-humble-isaac-ros-data-validation] +isaac_ros_deepmap_data_converter: + ubuntu: + focal: [ros-humble-isaac-ros-deepmap-data-converter] + jammy: [ros-humble-isaac-ros-deepmap-data-converter] +isaac_ros_depth_image_proc: + ubuntu: + focal: [ros-humble-isaac-ros-depth-image-proc] + jammy: [ros-humble-isaac-ros-depth-image-proc] +isaac_ros_detectnet: + ubuntu: + focal: [ros-humble-isaac-ros-detectnet] + jammy: [ros-humble-isaac-ros-detectnet] +isaac_ros_detectnet_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-detectnet-benchmark] + jammy: [ros-humble-isaac-ros-detectnet-benchmark] +isaac_ros_dnn_image_encoder: + ubuntu: + focal: [ros-humble-isaac-ros-dnn-image-encoder] + jammy: [ros-humble-isaac-ros-dnn-image-encoder] +isaac_ros_dnn_image_encoder_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-dnn-image-encoder-benchmark] + jammy: [ros-humble-isaac-ros-dnn-image-encoder-benchmark] +isaac_ros_dnn_inference_test: + ubuntu: + focal: [ros-humble-isaac-ros-dnn-inference-test] + jammy: [ros-humble-isaac-ros-dnn-inference-test] +isaac_ros_dope: + ubuntu: + focal: [ros-humble-isaac-ros-dope] + jammy: [ros-humble-isaac-ros-dope] +isaac_ros_dope_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-dope-benchmark] + jammy: [ros-humble-isaac-ros-dope-benchmark] +isaac_ros_ess: + ubuntu: + focal: [ros-humble-isaac-ros-ess] + jammy: [ros-humble-isaac-ros-ess] +isaac_ros_ess_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-ess-benchmark] + jammy: [ros-humble-isaac-ros-ess-benchmark] +isaac_ros_ess_models_install: + ubuntu: + focal: [ros-humble-isaac-ros-ess-models-install] + jammy: [ros-humble-isaac-ros-ess-models-install] +isaac_ros_ess_nova_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-ess-nova-benchmark] + jammy: [ros-humble-isaac-ros-ess-nova-benchmark] +isaac_ros_examples: + ubuntu: + focal: [ros-humble-isaac-ros-examples] + jammy: [ros-humble-isaac-ros-examples] +isaac_ros_goal_setter_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-goal-setter-interfaces] + jammy: [ros-humble-isaac-ros-goal-setter-interfaces] +isaac_ros_usb_cam: + ubuntu: + focal: [ros-humble-isaac-ros-usb-cam] + jammy: [ros-humble-isaac-ros-usb-cam] +isaac_ros_realsense: + ubuntu: + focal: [ros-humble-isaac-ros-realsense] + jammy: [ros-humble-isaac-ros-realsense] +isaac_ros_foundationpose: + ubuntu: + focal: [ros-humble-isaac-ros-foundationpose] + jammy: [ros-humble-isaac-ros-foundationpose] +isaac_ros_foundationpose_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-foundationpose-benchmark] + jammy: [ros-humble-isaac-ros-foundationpose-benchmark] +isaac_ros_gxf: + ubuntu: + focal: [ros-humble-isaac-ros-gxf] + jammy: [ros-humble-isaac-ros-gxf] +isaac_ros_h264_decoder: + ubuntu: + focal: [ros-humble-isaac-ros-h264-decoder] + jammy: [ros-humble-isaac-ros-h264-decoder] +isaac_ros_h264_decoder_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-h264-decoder-benchmark] + jammy: [ros-humble-isaac-ros-h264-decoder-benchmark] +isaac_ros_h264_encoder: + ubuntu: + focal: [ros-humble-isaac-ros-h264-encoder] + jammy: [ros-humble-isaac-ros-h264-encoder] +isaac_ros_h264_encoder_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-h264-encoder-benchmark] + jammy: [ros-humble-isaac-ros-h264-encoder-benchmark] +isaac_ros_hawk: + ubuntu: + focal: [ros-humble-isaac-ros-hawk] + jammy: [ros-humble-isaac-ros-hawk] +isaac_ros_hawk_nova_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-hawk-nova-benchmark] + jammy: [ros-humble-isaac-ros-hawk-nova-benchmark] +isaac_ros_hesai: + ubuntu: + focal: [ros-humble-isaac-ros-hesai] + jammy: [ros-humble-isaac-ros-hesai] +isaac_ros_image_pipeline: + ubuntu: + focal: [ros-humble-isaac-ros-image-pipeline] + jammy: [ros-humble-isaac-ros-image-pipeline] +isaac_ros_image_proc: + ubuntu: + focal: [ros-humble-isaac-ros-image-proc] + jammy: [ros-humble-isaac-ros-image-proc] +isaac_ros_image_proc_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-image-proc-benchmark] + jammy: [ros-humble-isaac-ros-image-proc-benchmark] +isaac_ros_imu_bmi088: + ubuntu: + focal: [ros-humble-isaac-ros-imu-bmi088] + jammy: [ros-humble-isaac-ros-imu-bmi088] +isaac_ros_integration_test: + ubuntu: + focal: [ros-humble-isaac-ros-integration-test] + jammy: [ros-humble-isaac-ros-integration-test] +isaac_ros_integration_test_control_node: + ubuntu: + focal: [ros-humble-isaac-ros-integration-test-control-node] + jammy: [ros-humble-isaac-ros-integration-test-control-node] +isaac_ros_integration_test_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-integration-test-interfaces] + jammy: [ros-humble-isaac-ros-integration-test-interfaces] +isaac_ros_integration_test_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-integration-test-msgs] + jammy: [ros-noetic-isaac-ros-integration-test-msgs] +isaac_ros_jetson_stats: + ubuntu: + focal: [ros-humble-isaac-ros-jetson-stats] + jammy: [ros-humble-isaac-ros-jetson-stats] +isaac_ros_jetson_stats_services: + ubuntu: + focal: [ros-humble-isaac-ros-jetson-stats-services] + jammy: [ros-humble-isaac-ros-jetson-stats-services] +isaac_ros_json_info_generator: + ubuntu: + focal: [ros-humble-isaac-ros-json-info-generator] + jammy: [ros-humble-isaac-ros-json-info-generator] +isaac_ros_launch_utils: + ubuntu: + focal: [ros-humble-isaac-ros-launch-utils] + jammy: [ros-humble-isaac-ros-launch-utils] +isaac_ros_managed_nitros: + ubuntu: + focal: [ros-humble-isaac-ros-managed-nitros] + jammy: [ros-humble-isaac-ros-managed-nitros] +isaac_ros_mission_client: + ubuntu: + focal: [ros-humble-isaac-ros-mission-client] + jammy: [ros-humble-isaac-ros-mission-client] +isaac_ros_moveit_goal_setter: + ubuntu: + focal: [ros-humble-isaac-ros-moveit-goal-setter] + jammy: [ros-humble-isaac-ros-moveit-goal-setter] +isaac_ros_mqtt_bridge: + ubuntu: + focal: [ros-humble-isaac-ros-mqtt-bridge] + jammy: [ros-humble-isaac-ros-mqtt-bridge] +isaac_ros_nav_goal_generator: + ubuntu: + focal: [ros-humble-isaac-ros-nav-goal-generator] + jammy: [ros-humble-isaac-ros-nav-goal-generator] +isaac_ros_nitros: + ubuntu: + focal: [ros-humble-isaac-ros-nitros] + jammy: [ros-humble-isaac-ros-nitros] +isaac_ros_nitros_april_tag_detection_array_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-april-tag-detection-array-type] + jammy: [ros-humble-isaac-ros-nitros-april-tag-detection-array-type] +isaac_ros_nitros_battery_state_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-battery-state-type] + jammy: [ros-humble-isaac-ros-nitros-battery-state-type] +isaac_ros_nitros_bi3d_inference_param_array_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-bi3d-inference-param-array-type] + jammy: [ros-humble-isaac-ros-nitros-bi3d-inference-param-array-type] +isaac_ros_nitros_bridge_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-bridge-benchmark] + jammy: [ros-humble-isaac-ros-nitros-bridge-benchmark] +isaac_ros_nitros_bridge_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-bridge-interfaces] + jammy: [ros-humble-isaac-ros-nitros-bridge-interfaces] +isaac_ros_nitros_bridge_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-nitros-bridge-msgs] + jammy: [ros-noetic-isaac-ros-nitros-bridge-msgs] +isaac_ros_nitros_bridge_ros1: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-bridge-ros1] + jammy: [ros-humble-isaac-ros-nitros-bridge-ros1] +isaac_ros_nitros_bridge_ros2: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-bridge-ros2] + jammy: [ros-humble-isaac-ros-nitros-bridge-ros2] +isaac_ros_nitros_camera_info_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-camera-info-type] + jammy: [ros-humble-isaac-ros-nitros-camera-info-type] +isaac_ros_nitros_compressed_image_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-compressed-image-type] + jammy: [ros-humble-isaac-ros-nitros-compressed-image-type] +isaac_ros_nitros_compressed_video_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-compressed-video-type] + jammy: [ros-humble-isaac-ros-nitros-compressed-video-type] +isaac_ros_nitros_correlated_timestamp_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-correlated-timestamp-type] + jammy: [ros-humble-isaac-ros-nitros-correlated-timestamp-type] +isaac_ros_nitros_detection2_d_array_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-detection2-d-array-type] + jammy: [ros-humble-isaac-ros-nitros-detection2-d-array-type] +isaac_ros_nitros_detection3_d_array_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-detection3-d-array-type] + jammy: [ros-humble-isaac-ros-nitros-detection3-d-array-type] +isaac_ros_nitros_disparity_image_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-disparity-image-type] + jammy: [ros-humble-isaac-ros-nitros-disparity-image-type] +isaac_ros_nitros_encoder_ticks_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-encoder-ticks-type] + jammy: [ros-humble-isaac-ros-nitros-encoder-ticks-type] +isaac_ros_nitros_flat_scan_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-flat-scan-type] + jammy: [ros-humble-isaac-ros-nitros-flat-scan-type] +isaac_ros_nitros_image_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-image-type] + jammy: [ros-humble-isaac-ros-nitros-image-type] +isaac_ros_nitros_imu_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-imu-type] + jammy: [ros-humble-isaac-ros-nitros-imu-type] +isaac_ros_nitros_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-interfaces] + jammy: [ros-humble-isaac-ros-nitros-interfaces] +isaac_ros_nitros_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-nitros-msgs] + jammy: [ros-noetic-isaac-ros-nitros-msgs] +isaac_ros_nitros_occupancy_grid_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-occupancy-grid-type] + jammy: [ros-humble-isaac-ros-nitros-occupancy-grid-type] +isaac_ros_nitros_odometry_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-odometry-type] + jammy: [ros-humble-isaac-ros-nitros-odometry-type] +isaac_ros_nitros_point_cloud_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-point-cloud-type] + jammy: [ros-humble-isaac-ros-nitros-point-cloud-type] +isaac_ros_nitros_pose_array_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-pose-array-type] + jammy: [ros-humble-isaac-ros-nitros-pose-array-type] +isaac_ros_nitros_pose_cov_stamped_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-pose-cov-stamped-type] + jammy: [ros-humble-isaac-ros-nitros-pose-cov-stamped-type] +isaac_ros_nitros_std_msg_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-std-msg-type] + jammy: [ros-humble-isaac-ros-nitros-std-msg-type] +isaac_ros_nitros_tensor_list_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-tensor-list-type] + jammy: [ros-humble-isaac-ros-nitros-tensor-list-type] +isaac_ros_nitros_topic_tools: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-topic-tools] + jammy: [ros-humble-isaac-ros-nitros-topic-tools] +isaac_ros_nitros_twist_type: + ubuntu: + focal: [ros-humble-isaac-ros-nitros-twist-type] + jammy: [ros-humble-isaac-ros-nitros-twist-type] +isaac_ros_nova_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-nova-interfaces] + jammy: [ros-humble-isaac-ros-nova-interfaces] +isaac_ros_nvblox: + ubuntu: + focal: [ros-humble-isaac-ros-nvblox] + jammy: [ros-humble-isaac-ros-nvblox] +isaac_ros_nvblox_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-nvblox-benchmark] + jammy: [ros-humble-isaac-ros-nvblox-benchmark] +isaac_ros_nvblox_nova_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-nvblox-nova-benchmark] + jammy: [ros-humble-isaac-ros-nvblox-nova-benchmark] +isaac_ros_occupancy_grid_localizer: + ubuntu: + focal: [ros-humble-isaac-ros-occupancy-grid-localizer] + jammy: [ros-humble-isaac-ros-occupancy-grid-localizer] +isaac_ros_occupancy_grid_localizer_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-occupancy-grid-localizer-benchmark] + jammy: [ros-humble-isaac-ros-occupancy-grid-localizer-benchmark] +isaac_ros_occupancy_map_builder: + ubuntu: + focal: [ros-humble-isaac-ros-occupancy-map-builder] + jammy: [ros-humble-isaac-ros-occupancy-map-builder] +isaac_ros_owl: + ubuntu: + focal: [ros-humble-isaac-ros-owl] + jammy: [ros-humble-isaac-ros-owl] +isaac_ros_peoplesemseg_models_install: + ubuntu: + focal: [ros-humble-isaac-ros-peoplesemseg-models-install] + jammy: [ros-humble-isaac-ros-peoplesemseg-models-install] +isaac_ros_perceptor_constants: + ubuntu: + focal: [ros-humble-isaac-ros-perceptor-constants] + jammy: [ros-humble-isaac-ros-perceptor-constants] +isaac_ros_perceptor_bringup: + ubuntu: + focal: [ros-humble-isaac-ros-perceptor-bringup] + jammy: [ros-humble-isaac-ros-perceptor-bringup] +isaac_ros_perceptor_nova_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-perceptor-nova-benchmark] + jammy: [ros-humble-isaac-ros-perceptor-nova-benchmark] +isaac_ros_pod_recording: + ubuntu: + focal: [ros-humble-isaac-ros-pod-recording] + jammy: [ros-humble-isaac-ros-pod-recording] +isaac_ros_pointcloud_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-pointcloud-interfaces] + jammy: [ros-humble-isaac-ros-pointcloud-interfaces] +isaac_ros_pointcloud_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-pointcloud-msgs] + jammy: [ros-noetic-isaac-ros-pointcloud-msgs] +isaac_ros_pointcloud_utils: + ubuntu: + focal: [ros-humble-isaac-ros-pointcloud-utils] + jammy: [ros-humble-isaac-ros-pointcloud-utils] +isaac_ros_realsense_ess_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-realsense-ess-benchmark] + jammy: [ros-humble-isaac-ros-realsense-ess-benchmark] +isaac_ros_ros1_converter: + ubuntu: + focal: [ros-humble-isaac-ros-ros1-converter] + jammy: [ros-humble-isaac-ros-ros1-converter] +isaac_ros_ros1_forward: + ubuntu: + focal: [ros-humble-isaac-ros-ros1-forward] + jammy: [ros-humble-isaac-ros-ros1-forward] +isaac_ros_ros2_converter: + ubuntu: + focal: [ros-humble-isaac-ros-ros2-converter] + jammy: [ros-humble-isaac-ros-ros2-converter] +isaac_ros_rtdetr: + ubuntu: + focal: [ros-humble-isaac-ros-rtdetr] + jammy: [ros-humble-isaac-ros-rtdetr] +isaac_ros_rtdetr_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-rtdetr-benchmark] + jammy: [ros-humble-isaac-ros-rtdetr-benchmark] +isaac_ros_scene_recorder: + ubuntu: + focal: [ros-humble-isaac-ros-scene-recorder] + jammy: [ros-humble-isaac-ros-scene-recorder] +isaac_ros_segformer: + ubuntu: + focal: [ros-humble-isaac-ros-segformer] + jammy: [ros-humble-isaac-ros-segformer] +isaac_ros_segformer_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-segformer-benchmark] + jammy: [ros-humble-isaac-ros-segformer-benchmark] +isaac_ros_segment_anything: + ubuntu: + focal: [ros-humble-isaac-ros-segment-anything] + jammy: [ros-humble-isaac-ros-segment-anything] +isaac_ros_segment_anything_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-segment-anything-benchmark] + jammy: [ros-humble-isaac-ros-segment-anything-benchmark] +isaac_ros_segway_rmp: + ubuntu: + focal: [ros-humble-isaac-ros-segway-rmp] + jammy: [ros-humble-isaac-ros-segway-rmp] +isaac_ros_stereo_image_proc: + ubuntu: + focal: [ros-humble-isaac-ros-stereo-image-proc] + jammy: [ros-humble-isaac-ros-stereo-image-proc] +isaac_ros_stereo_image_proc_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-stereo-image-proc-benchmark] + jammy: [ros-humble-isaac-ros-stereo-image-proc-benchmark] +isaac_ros_tensor_inspector: + ubuntu: + focal: [ros-humble-isaac-ros-tensor-inspector] + jammy: [ros-humble-isaac-ros-tensor-inspector] +isaac_ros_tensor_list_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-tensor-list-interfaces] + jammy: [ros-humble-isaac-ros-tensor-list-interfaces] +isaac_ros_tensor_list_msgs: + ubuntu: + focal: [ros-noetic-tensor-list-msgs] + jammy: [ros-noetic-tensor-list-msgs] +isaac_ros_tensor_proc: + ubuntu: + focal: [ros-humble-isaac-ros-tensor-proc] + jammy: [ros-humble-isaac-ros-tensor-proc] +isaac_ros_tensor_rt: + ubuntu: + focal: [ros-humble-isaac-ros-tensor-rt] + jammy: [ros-humble-isaac-ros-tensor-rt] +isaac_ros_tensor_rt_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-tensor-rt-benchmark] + jammy: [ros-humble-isaac-ros-tensor-rt-benchmark] +isaac_ros_test: + ubuntu: + focal: [ros-humble-isaac-ros-test] + jammy: [ros-humble-isaac-ros-test] +isaac_ros_to_h264_msgs_packet: + ubuntu: + focal: [ros-humble-isaac-ros-to-h264-msgs-packet] + jammy: [ros-humble-isaac-ros-to-h264-msgs-packet] +isaac_ros_triton: + ubuntu: + focal: [ros-humble-isaac-ros-triton] + jammy: [ros-humble-isaac-ros-triton] +isaac_ros_triton_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-triton-benchmark] + jammy: [ros-humble-isaac-ros-triton-benchmark] +isaac_ros_unet: + ubuntu: + focal: [ros-humble-isaac-ros-unet] + jammy: [ros-humble-isaac-ros-unet] +isaac_ros_unet_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-unet-benchmark] + jammy: [ros-humble-isaac-ros-unet-benchmark] +isaac_ros_vda5050_nav2_client: + ubuntu: + focal: [ros-humble-isaac-ros-vda5050-nav2-client] + jammy: [ros-humble-isaac-ros-vda5050-nav2-client] +isaac_ros_vda5050_nav2_client_bringup: + ubuntu: + focal: [ros-humble-isaac-ros-vda5050-nav2-client-bringup] + jammy: [ros-humble-isaac-ros-vda5050-nav2-client-bringup] +isaac_ros_visual_slam: + ubuntu: + focal: [ros-humble-isaac-ros-visual-slam] + jammy: [ros-humble-isaac-ros-visual-slam] +isaac_ros_visual_slam_benchmark: + ubuntu: + focal: [ros-humble-isaac-ros-visual-slam-benchmark] + jammy: [ros-humble-isaac-ros-visual-slam-benchmark] +isaac_ros_visual_slam_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-visual-slam-interfaces] + jammy: [ros-humble-isaac-ros-visual-slam-interfaces] +isaac_ros_visual_slam_msgs: + ubuntu: + focal: [ros-noetic-isaac-ros-visual-slam-msgs] + jammy: [ros-noetic-isaac-ros-visual-slam-msgs] +isaac_ros_wifi_scan: + ubuntu: + focal: [ros-humble-isaac-ros-wifi-scan] + jammy: [ros-humble-isaac-ros-wifi-scan] +isaac_ros_wifi_scan_interfaces: + ubuntu: + focal: [ros-humble-isaac-ros-wifi-scan-interfaces] + jammy: [ros-humble-isaac-ros-wifi-scan-interfaces] +isaac_ros_yolov8: + ubuntu: + focal: [ros-humble-isaac-ros-yolov8] + jammy: [ros-humble-isaac-ros-yolov8] +isaac_ros_zed_test: + ubuntu: + focal: [ros-humble-isaac-ros-zed-test] + jammy: [ros-humble-isaac-ros-zed-test] +joint_limits: + ubuntu: + focal: [ros-humble-joint-limits] + jammy: [ros-humble-joint-limits] +joint_limits_dbgsym: + ubuntu: + focal: [ros-humble-joint-limits-dbgsym] + jammy: [ros-humble-joint-limits-dbgsym] +joint_state_broadcaster: + ubuntu: + focal: [ros-humble-joint-state-broadcaster] + jammy: [ros-humble-joint-state-broadcaster] +joint_state_broadcaster_dbgsym: + ubuntu: + focal: [ros-humble-joint-state-broadcaster-dbgsym] + jammy: [ros-humble-joint-state-broadcaster-dbgsym] +joint_state_publisher: + ubuntu: + focal: [ros-humble-joint-state-publisher] + jammy: [ros-humble-joint-state-publisher] +joint_state_publisher_gui: + ubuntu: + focal: [ros-humble-joint-state-publisher-gui] + jammy: [ros-humble-joint-state-publisher-gui] +joint_trajectory_controller: + ubuntu: + focal: [ros-humble-joint-trajectory-controller] + jammy: [ros-humble-joint-trajectory-controller] +joint_trajectory_controller_dbgsym: + ubuntu: + focal: [ros-humble-joint-trajectory-controller-dbgsym] + jammy: [ros-humble-joint-trajectory-controller-dbgsym] +joy: + ubuntu: + focal: [ros-humble-joy] + jammy: [ros-humble-joy] +joy_dbgsym: + ubuntu: + focal: [ros-humble-joy-dbgsym] + jammy: [ros-humble-joy-dbgsym] +joy_linux: + ubuntu: + focal: [ros-humble-joy-linux] + jammy: [ros-humble-joy-linux] +joy_linux_dbgsym: + ubuntu: + focal: [ros-humble-joy-linux-dbgsym] + jammy: [ros-humble-joy-linux-dbgsym] +joy_teleop: + ubuntu: + focal: [ros-humble-joy-teleop] + jammy: [ros-humble-joy-teleop] +joy_tester: + ubuntu: + focal: [ros-humble-joy-tester] + jammy: [ros-humble-joy-tester] +kartech_linear_actuator_msgs: + ubuntu: + focal: [ros-humble-kartech-linear-actuator-msgs] + jammy: [ros-humble-kartech-linear-actuator-msgs] +kartech_linear_actuator_msgs_dbgsym: + ubuntu: + focal: [ros-humble-kartech-linear-actuator-msgs-dbgsym] + jammy: [ros-humble-kartech-linear-actuator-msgs-dbgsym] +kdl_parser: + ubuntu: + focal: [ros-humble-kdl-parser] + jammy: [ros-humble-kdl-parser] +kdl_parser_dbgsym: + ubuntu: + focal: [ros-humble-kdl-parser-dbgsym] + jammy: [ros-humble-kdl-parser-dbgsym] +key_teleop: + ubuntu: + focal: [ros-humble-key-teleop] + jammy: [ros-humble-key-teleop] +keyboard_handler: + ubuntu: + focal: [ros-humble-keyboard-handler] + jammy: [ros-humble-keyboard-handler] +keyboard_handler_dbgsym: + ubuntu: + focal: [ros-humble-keyboard-handler-dbgsym] + jammy: [ros-humble-keyboard-handler-dbgsym] +kinematics_interface: + ubuntu: + focal: [ros-humble-kinematics-interface] + jammy: [ros-humble-kinematics-interface] +kinematics_interface_kdl: + ubuntu: + focal: [ros-humble-kinematics-interface-kdl] + jammy: [ros-humble-kinematics-interface-kdl] +kinematics_interface_kdl_dbgsym: + ubuntu: + focal: [ros-humble-kinematics-interface-kdl-dbgsym] + jammy: [ros-humble-kinematics-interface-kdl-dbgsym] +kinova_gen3_6dof_robotiq_2f_85_moveit_config: + ubuntu: + focal: [ros-humble-kinova-gen3-6dof-robotiq-2f-85-moveit-config] + jammy: [ros-humble-kinova-gen3-6dof-robotiq-2f-85-moveit-config] +kinova_gen3_7dof_robotiq_2f_85_moveit_config: + ubuntu: + focal: [ros-humble-kinova-gen3-7dof-robotiq-2f-85-moveit-config] + jammy: [ros-humble-kinova-gen3-7dof-robotiq-2f-85-moveit-config] +kobuki_ros_interfaces: + ubuntu: + focal: [ros-humble-kobuki-ros-interfaces] + jammy: [ros-humble-kobuki-ros-interfaces] +kobuki_ros_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-kobuki-ros-interfaces-dbgsym] + jammy: [ros-humble-kobuki-ros-interfaces-dbgsym] +kobuki_velocity_smoother: + ubuntu: + focal: [ros-humble-kobuki-velocity-smoother] + jammy: [ros-humble-kobuki-velocity-smoother] +kobuki_velocity_smoother_dbgsym: + ubuntu: + focal: [ros-humble-kobuki-velocity-smoother-dbgsym] + jammy: [ros-humble-kobuki-velocity-smoother-dbgsym] +kortex_api: + ubuntu: + focal: [ros-humble-kortex-api] + jammy: [ros-humble-kortex-api] +kortex_description: + ubuntu: + focal: [ros-humble-kortex-description] + jammy: [ros-humble-kortex-description] +kortex_driver: + ubuntu: + focal: [ros-humble-kortex-driver] + jammy: [ros-humble-kortex-driver] +kortex_driver_dbgsym: + ubuntu: + focal: [ros-humble-kortex-driver-dbgsym] + jammy: [ros-humble-kortex-driver-dbgsym] +lanelet2: + ubuntu: + focal: [ros-humble-lanelet2] + jammy: [ros-humble-lanelet2] +lanelet2_core: + ubuntu: + focal: [ros-humble-lanelet2-core] + jammy: [ros-humble-lanelet2-core] +lanelet2_core_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-core-dbgsym] + jammy: [ros-humble-lanelet2-core-dbgsym] +lanelet2_examples: + ubuntu: + focal: [ros-humble-lanelet2-examples] + jammy: [ros-humble-lanelet2-examples] +lanelet2_examples_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-examples-dbgsym] + jammy: [ros-humble-lanelet2-examples-dbgsym] +lanelet2_io: + ubuntu: + focal: [ros-humble-lanelet2-io] + jammy: [ros-humble-lanelet2-io] +lanelet2_io_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-io-dbgsym] + jammy: [ros-humble-lanelet2-io-dbgsym] +lanelet2_maps: + ubuntu: + focal: [ros-humble-lanelet2-maps] + jammy: [ros-humble-lanelet2-maps] +lanelet2_matching: + ubuntu: + focal: [ros-humble-lanelet2-matching] + jammy: [ros-humble-lanelet2-matching] +lanelet2_matching_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-matching-dbgsym] + jammy: [ros-humble-lanelet2-matching-dbgsym] +lanelet2_projection: + ubuntu: + focal: [ros-humble-lanelet2-projection] + jammy: [ros-humble-lanelet2-projection] +lanelet2_projection_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-projection-dbgsym] + jammy: [ros-humble-lanelet2-projection-dbgsym] +lanelet2_python: + ubuntu: + focal: [ros-humble-lanelet2-python] + jammy: [ros-humble-lanelet2-python] +lanelet2_python_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-python-dbgsym] + jammy: [ros-humble-lanelet2-python-dbgsym] +lanelet2_routing: + ubuntu: + focal: [ros-humble-lanelet2-routing] + jammy: [ros-humble-lanelet2-routing] +lanelet2_routing_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-routing-dbgsym] + jammy: [ros-humble-lanelet2-routing-dbgsym] +lanelet2_traffic_rules: + ubuntu: + focal: [ros-humble-lanelet2-traffic-rules] + jammy: [ros-humble-lanelet2-traffic-rules] +lanelet2_traffic_rules_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-traffic-rules-dbgsym] + jammy: [ros-humble-lanelet2-traffic-rules-dbgsym] +lanelet2_validation: + ubuntu: + focal: [ros-humble-lanelet2-validation] + jammy: [ros-humble-lanelet2-validation] +lanelet2_validation_dbgsym: + ubuntu: + focal: [ros-humble-lanelet2-validation-dbgsym] + jammy: [ros-humble-lanelet2-validation-dbgsym] +laser_filters: + ubuntu: + focal: [ros-humble-laser-filters] + jammy: [ros-humble-laser-filters] +laser_filters_dbgsym: + ubuntu: + focal: [ros-humble-laser-filters-dbgsym] + jammy: [ros-humble-laser-filters-dbgsym] +laser_geometry: + ubuntu: + focal: [ros-humble-laser-geometry] + jammy: [ros-humble-laser-geometry] +laser_geometry_dbgsym: + ubuntu: + focal: [ros-humble-laser-geometry-dbgsym] + jammy: [ros-humble-laser-geometry-dbgsym] +laser_proc: + ubuntu: + focal: [ros-humble-laser-proc] + jammy: [ros-humble-laser-proc] +laser_proc_dbgsym: + ubuntu: + focal: [ros-humble-laser-proc-dbgsym] + jammy: [ros-humble-laser-proc-dbgsym] +launch: + ubuntu: + focal: [ros-humble-launch] + jammy: [ros-humble-launch] +launch_pal: + ubuntu: + focal: [ros-humble-launch-pal] + jammy: [ros-humble-launch-pal] +launch_param_builder: + ubuntu: + focal: [ros-humble-launch-param-builder] + jammy: [ros-humble-launch-param-builder] +launch_pytest: + ubuntu: + focal: [ros-humble-launch-pytest] + jammy: [ros-humble-launch-pytest] +launch_ros: + ubuntu: + focal: [ros-humble-launch-ros] + jammy: [ros-humble-launch-ros] +launch_system_modes: + ubuntu: + focal: [ros-humble-launch-system-modes] + jammy: [ros-humble-launch-system-modes] +launch_testing: + ubuntu: + focal: [ros-humble-launch-testing] + jammy: [ros-humble-launch-testing] +launch_testing_ament_cmake: + ubuntu: + focal: [ros-humble-launch-testing-ament-cmake] + jammy: [ros-humble-launch-testing-ament-cmake] +launch_testing_examples: + ubuntu: + focal: [ros-humble-launch-testing-examples] + jammy: [ros-humble-launch-testing-examples] +launch_testing_ros: + ubuntu: + focal: [ros-humble-launch-testing-ros] + jammy: [ros-humble-launch-testing-ros] +launch_xml: + ubuntu: + focal: [ros-humble-launch-xml] + jammy: [ros-humble-launch-xml] +launch_yaml: + ubuntu: + focal: [ros-humble-launch-yaml] + jammy: [ros-humble-launch-yaml] +leo: + ubuntu: + focal: [ros-humble-leo] + jammy: [ros-humble-leo] +leo_bringup: + ubuntu: + focal: [ros-humble-leo-bringup] + jammy: [ros-humble-leo-bringup] +leo_description: + ubuntu: + focal: [ros-humble-leo-description] + jammy: [ros-humble-leo-description] +leo_desktop: + ubuntu: + focal: [ros-humble-leo-desktop] + jammy: [ros-humble-leo-desktop] +leo_fw: + ubuntu: + focal: [ros-humble-leo-fw] + jammy: [ros-humble-leo-fw] +leo_fw_dbgsym: + ubuntu: + focal: [ros-humble-leo-fw-dbgsym] + jammy: [ros-humble-leo-fw-dbgsym] +leo_msgs: + ubuntu: + focal: [ros-humble-leo-msgs] + jammy: [ros-humble-leo-msgs] +leo_msgs_dbgsym: + ubuntu: + focal: [ros-humble-leo-msgs-dbgsym] + jammy: [ros-humble-leo-msgs-dbgsym] +leo_robot: + ubuntu: + focal: [ros-humble-leo-robot] + jammy: [ros-humble-leo-robot] +leo_teleop: + ubuntu: + focal: [ros-humble-leo-teleop] + jammy: [ros-humble-leo-teleop] +leo_viz: + ubuntu: + focal: [ros-humble-leo-viz] + jammy: [ros-humble-leo-viz] +lgsvl_msgs: + ubuntu: + focal: [ros-humble-lgsvl-msgs] + jammy: [ros-humble-lgsvl-msgs] +lgsvl_msgs_dbgsym: + ubuntu: + focal: [ros-humble-lgsvl-msgs-dbgsym] + jammy: [ros-humble-lgsvl-msgs-dbgsym] +libcamera: + ubuntu: + focal: [ros-humble-libcamera] + jammy: [ros-humble-libcamera] +libcreate: + ubuntu: + focal: [ros-humble-libcreate] + jammy: [ros-humble-libcreate] +libcreate_dbgsym: + ubuntu: + focal: [ros-humble-libcreate-dbgsym] + jammy: [ros-humble-libcreate-dbgsym] +libcurl_vendor: + ubuntu: + focal: [ros-humble-libcurl-vendor] + jammy: [ros-humble-libcurl-vendor] +libg2o: + ubuntu: + focal: [ros-humble-libg2o] + jammy: [ros-humble-libg2o] +libg2o_dbgsym: + ubuntu: + focal: [ros-humble-libg2o-dbgsym] + jammy: [ros-humble-libg2o-dbgsym] +libmavconn: + ubuntu: + focal: [ros-humble-libmavconn] + jammy: [ros-humble-libmavconn] +libmavconn_dbgsym: + ubuntu: + focal: [ros-humble-libmavconn-dbgsym] + jammy: [ros-humble-libmavconn-dbgsym] +libnabo: + ubuntu: + focal: [ros-humble-libnabo] + jammy: [ros-humble-libnabo] +libopenvdb: + ubuntu: + jammy: [openvdb] +libopenvdb-dev: + ubuntu: + jammy: [libilmbase-dev] +libphidget22: + ubuntu: + focal: [ros-humble-libphidget22] + jammy: [ros-humble-libphidget22] +libphidget22_dbgsym: + ubuntu: + focal: [ros-humble-libphidget22-dbgsym] + jammy: [ros-humble-libphidget22-dbgsym] +libpointmatcher: + ubuntu: + focal: [ros-humble-libpointmatcher] + jammy: [ros-humble-libpointmatcher] +libpointmatcher_dbgsym: + ubuntu: + focal: [ros-humble-libpointmatcher-dbgsym] + jammy: [ros-humble-libpointmatcher-dbgsym] +librealsense2: + ubuntu: + focal: [ros-humble-librealsense2] + jammy: [ros-humble-librealsense2] +librealsense2_dbgsym: + ubuntu: + focal: [ros-humble-librealsense2-dbgsym] + jammy: [ros-humble-librealsense2-dbgsym] +libstatistics_collector: + ubuntu: + focal: [ros-humble-libstatistics-collector] + jammy: [ros-humble-libstatistics-collector] +libstatistics_collector_dbgsym: + ubuntu: + focal: [ros-humble-libstatistics-collector-dbgsym] + jammy: [ros-humble-libstatistics-collector-dbgsym] +libyaml_vendor: + ubuntu: + focal: [ros-humble-libyaml-vendor] + jammy: [ros-humble-libyaml-vendor] +libyaml_vendor_dbgsym: + ubuntu: + focal: [ros-humble-libyaml-vendor-dbgsym] + jammy: [ros-humble-libyaml-vendor-dbgsym] +lifecycle: + ubuntu: + focal: [ros-humble-lifecycle] + jammy: [ros-humble-lifecycle] +lifecycle_dbgsym: + ubuntu: + focal: [ros-humble-lifecycle-dbgsym] + jammy: [ros-humble-lifecycle-dbgsym] +lifecycle_msgs: + ubuntu: + focal: [ros-humble-lifecycle-msgs] + jammy: [ros-humble-lifecycle-msgs] +lifecycle_msgs_dbgsym: + ubuntu: + focal: [ros-humble-lifecycle-msgs-dbgsym] + jammy: [ros-humble-lifecycle-msgs-dbgsym] +lifecycle_py: + ubuntu: + focal: [ros-humble-lifecycle-py] + jammy: [ros-humble-lifecycle-py] +lms1xx: + ubuntu: + focal: [ros-humble-lms1xx] + jammy: [ros-humble-lms1xx] +lms1xx_dbgsym: + ubuntu: + focal: [ros-humble-lms1xx-dbgsym] + jammy: [ros-humble-lms1xx-dbgsym] +logging_demo: + ubuntu: + focal: [ros-humble-logging-demo] + jammy: [ros-humble-logging-demo] +logging_demo_dbgsym: + ubuntu: + focal: [ros-humble-logging-demo-dbgsym] + jammy: [ros-humble-logging-demo-dbgsym] +lsc_ros2_driver: + ubuntu: + focal: [ros-humble-lsc-ros2-driver] + jammy: [ros-humble-lsc-ros2-driver] +lsc_ros2_driver_dbgsym: + ubuntu: + focal: [ros-humble-lsc-ros2-driver-dbgsym] + jammy: [ros-humble-lsc-ros2-driver-dbgsym] +lusb: + ubuntu: + focal: [ros-humble-lusb] + jammy: [ros-humble-lusb] +lusb_dbgsym: + ubuntu: + focal: [ros-humble-lusb-dbgsym] + jammy: [ros-humble-lusb-dbgsym] +magic_enum: + ubuntu: + focal: [ros-humble-magic-enum] + jammy: [ros-humble-magic-enum] +magic_enum: + ubuntu: + focal: [ros-humble-magic-enum] + jammy: [ros-humble-magic-enum] +map_msgs: + ubuntu: + focal: [ros-humble-map-msgs] + jammy: [ros-humble-map-msgs] +map_msgs_dbgsym: + ubuntu: + focal: [ros-humble-map-msgs-dbgsym] + jammy: [ros-humble-map-msgs-dbgsym] +mapviz_interfaces: + ubuntu: + focal: [ros-humble-mapviz-interfaces] + jammy: [ros-humble-mapviz-interfaces] +mapviz_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-mapviz-interfaces-dbgsym] + jammy: [ros-humble-mapviz-interfaces-dbgsym] +marker_msgs: + ubuntu: + focal: [ros-humble-marker-msgs] + jammy: [ros-humble-marker-msgs] +marker_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marker-msgs-dbgsym] + jammy: [ros-humble-marker-msgs-dbgsym] +marti_can_msgs: + ubuntu: + focal: [ros-humble-marti-can-msgs] + jammy: [ros-humble-marti-can-msgs] +marti_can_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-can-msgs-dbgsym] + jammy: [ros-humble-marti-can-msgs-dbgsym] +marti_common_msgs: + ubuntu: + focal: [ros-humble-marti-common-msgs] + jammy: [ros-humble-marti-common-msgs] +marti_common_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-common-msgs-dbgsym] + jammy: [ros-humble-marti-common-msgs-dbgsym] +marti_dbw_msgs: + ubuntu: + focal: [ros-humble-marti-dbw-msgs] + jammy: [ros-humble-marti-dbw-msgs] +marti_dbw_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-dbw-msgs-dbgsym] + jammy: [ros-humble-marti-dbw-msgs-dbgsym] +marti_introspection_msgs: + ubuntu: + focal: [ros-humble-marti-introspection-msgs] + jammy: [ros-humble-marti-introspection-msgs] +marti_introspection_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-introspection-msgs-dbgsym] + jammy: [ros-humble-marti-introspection-msgs-dbgsym] +marti_nav_msgs: + ubuntu: + focal: [ros-humble-marti-nav-msgs] + jammy: [ros-humble-marti-nav-msgs] +marti_nav_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-nav-msgs-dbgsym] + jammy: [ros-humble-marti-nav-msgs-dbgsym] +marti_perception_msgs: + ubuntu: + focal: [ros-humble-marti-perception-msgs] + jammy: [ros-humble-marti-perception-msgs] +marti_perception_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-perception-msgs-dbgsym] + jammy: [ros-humble-marti-perception-msgs-dbgsym] +marti_sensor_msgs: + ubuntu: + focal: [ros-humble-marti-sensor-msgs] + jammy: [ros-humble-marti-sensor-msgs] +marti_sensor_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-sensor-msgs-dbgsym] + jammy: [ros-humble-marti-sensor-msgs-dbgsym] +marti_status_msgs: + ubuntu: + focal: [ros-humble-marti-status-msgs] + jammy: [ros-humble-marti-status-msgs] +marti_status_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-status-msgs-dbgsym] + jammy: [ros-humble-marti-status-msgs-dbgsym] +marti_visualization_msgs: + ubuntu: + focal: [ros-humble-marti-visualization-msgs] + jammy: [ros-humble-marti-visualization-msgs] +marti_visualization_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marti-visualization-msgs-dbgsym] + jammy: [ros-humble-marti-visualization-msgs-dbgsym] +marvelmind_ros2: + ubuntu: + focal: [ros-humble-marvelmind-ros2] + jammy: [ros-humble-marvelmind-ros2] +marvelmind_ros2_dbgsym: + ubuntu: + focal: [ros-humble-marvelmind-ros2-dbgsym] + jammy: [ros-humble-marvelmind-ros2-dbgsym] +marvelmind_ros2_msgs: + ubuntu: + focal: [ros-humble-marvelmind-ros2-msgs] + jammy: [ros-humble-marvelmind-ros2-msgs] +marvelmind_ros2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-marvelmind-ros2-msgs-dbgsym] + jammy: [ros-humble-marvelmind-ros2-msgs-dbgsym] +mavlink: + ubuntu: + focal: [ros-humble-mavlink] + jammy: [ros-humble-mavlink] +mavros: + ubuntu: + focal: [ros-humble-mavros] + jammy: [ros-humble-mavros] +mavros_dbgsym: + ubuntu: + focal: [ros-humble-mavros-dbgsym] + jammy: [ros-humble-mavros-dbgsym] +mavros_extras: + ubuntu: + focal: [ros-humble-mavros-extras] + jammy: [ros-humble-mavros-extras] +mavros_extras_dbgsym: + ubuntu: + focal: [ros-humble-mavros-extras-dbgsym] + jammy: [ros-humble-mavros-extras-dbgsym] +mavros_msgs: + ubuntu: + focal: [ros-humble-mavros-msgs] + jammy: [ros-humble-mavros-msgs] +mavros_msgs_dbgsym: + ubuntu: + focal: [ros-humble-mavros-msgs-dbgsym] + jammy: [ros-humble-mavros-msgs-dbgsym] +mcap_vendor: + ubuntu: + focal: [ros-humble-mcap-vendor] + jammy: [ros-humble-mcap-vendor] +mcap_vendor_dbgsym: + ubuntu: + focal: [ros-humble-mcap-vendor-dbgsym] + jammy: [ros-humble-mcap-vendor-dbgsym] +menge_vendor: + ubuntu: + focal: [ros-humble-menge-vendor] + jammy: [ros-humble-menge-vendor] +menge_vendor_dbgsym: + ubuntu: + focal: [ros-humble-menge-vendor-dbgsym] + jammy: [ros-humble-menge-vendor-dbgsym] +message_filters: + ubuntu: + focal: [ros-humble-message-filters] + jammy: [ros-humble-message-filters] +message_filters_dbgsym: + ubuntu: + focal: [ros-humble-message-filters-dbgsym] + jammy: [ros-humble-message-filters-dbgsym] +message_generation: + ubuntu: + focal: [ros-noetic-message-generation] + jammy: [ros-noetic-message-generation] +message_runtime: + ubuntu: + focal: [ros-noetic-message-runtime] + jammy: [ros-noetic-message-runtime] +message_tf_frame_transformer: + ubuntu: + focal: [ros-humble-message-tf-frame-transformer] + jammy: [ros-humble-message-tf-frame-transformer] +message_tf_frame_transformer_dbgsym: + ubuntu: + focal: [ros-humble-message-tf-frame-transformer-dbgsym] + jammy: [ros-humble-message-tf-frame-transformer-dbgsym] +metavision_driver: + ubuntu: + focal: [ros-humble-metavision-driver] + jammy: [ros-humble-metavision-driver] +metavision_driver_dbgsym: + ubuntu: + focal: [ros-humble-metavision-driver-dbgsym] + jammy: [ros-humble-metavision-driver-dbgsym] +metrics_plugins: + ubuntu: + focal: [ros-humble-metrics-plugins] + jammy: [ros-humble-metrics-plugins] +metrics_plugins: + ubuntu: + focal: [ros-humble-metrics-plugins] + jammy: [ros-humble-metrics-plugins] +micro_ros_diagnostic_bridge: + ubuntu: + focal: [ros-humble-micro-ros-diagnostic-bridge] + jammy: [ros-humble-micro-ros-diagnostic-bridge] +micro_ros_diagnostic_bridge_dbgsym: + ubuntu: + focal: [ros-humble-micro-ros-diagnostic-bridge-dbgsym] + jammy: [ros-humble-micro-ros-diagnostic-bridge-dbgsym] +micro_ros_diagnostic_msgs: + ubuntu: + focal: [ros-humble-micro-ros-diagnostic-msgs] + jammy: [ros-humble-micro-ros-diagnostic-msgs] +micro_ros_diagnostic_msgs_dbgsym: + ubuntu: + focal: [ros-humble-micro-ros-diagnostic-msgs-dbgsym] + jammy: [ros-humble-micro-ros-diagnostic-msgs-dbgsym] +micro_ros_msgs: + ubuntu: + focal: [ros-humble-micro-ros-msgs] + jammy: [ros-humble-micro-ros-msgs] +micro_ros_msgs_dbgsym: + ubuntu: + focal: [ros-humble-micro-ros-msgs-dbgsym] + jammy: [ros-humble-micro-ros-msgs-dbgsym] +microstrain_inertial_driver: + ubuntu: + focal: [ros-humble-microstrain-inertial-driver] + jammy: [ros-humble-microstrain-inertial-driver] +microstrain_inertial_driver_dbgsym: + ubuntu: + focal: [ros-humble-microstrain-inertial-driver-dbgsym] + jammy: [ros-humble-microstrain-inertial-driver-dbgsym] +microstrain_inertial_examples: + ubuntu: + focal: [ros-humble-microstrain-inertial-examples] + jammy: [ros-humble-microstrain-inertial-examples] +microstrain_inertial_examples_dbgsym: + ubuntu: + focal: [ros-humble-microstrain-inertial-examples-dbgsym] + jammy: [ros-humble-microstrain-inertial-examples-dbgsym] +microstrain_inertial_msgs: + ubuntu: + focal: [ros-humble-microstrain-inertial-msgs] + jammy: [ros-humble-microstrain-inertial-msgs] +microstrain_inertial_msgs_dbgsym: + ubuntu: + focal: [ros-humble-microstrain-inertial-msgs-dbgsym] + jammy: [ros-humble-microstrain-inertial-msgs-dbgsym] +microstrain_inertial_rqt: + ubuntu: + focal: [ros-humble-microstrain-inertial-rqt] + jammy: [ros-humble-microstrain-inertial-rqt] +mimick_vendor: + ubuntu: + focal: [ros-humble-mimick-vendor] + jammy: [ros-humble-mimick-vendor] +mobileye_560_660_msgs: + ubuntu: + focal: [ros-humble-mobileye-560-660-msgs] + jammy: [ros-humble-mobileye-560-660-msgs] +mobileye_560_660_msgs_dbgsym: + ubuntu: + focal: [ros-humble-mobileye-560-660-msgs-dbgsym] + jammy: [ros-humble-mobileye-560-660-msgs-dbgsym] +mod: + ubuntu: + focal: [ros-humble-mod] + jammy: [ros-humble-mod] +mod_dbgsym: + ubuntu: + focal: [ros-humble-mod-dbgsym] + jammy: [ros-humble-mod-dbgsym] +mola_common: + ubuntu: + focal: [ros-humble-mola-common] + jammy: [ros-humble-mola-common] +mola_demos: + ubuntu: + focal: [ros-humble-mola-demos] + jammy: [ros-humble-mola-demos] +mola_test_datasets: + ubuntu: + focal: [ros-humble-mola-test-datasets] + jammy: [ros-humble-mola-test-datasets] +mouse_teleop: + ubuntu: + focal: [ros-humble-mouse-teleop] + jammy: [ros-humble-mouse-teleop] +moveit: + ubuntu: + focal: [ros-humble-moveit] + jammy: [ros-humble-moveit] +moveit2_tutorials: + ubuntu: + focal: [ros-humble-moveit2-tutorials] + jammy: [ros-humble-moveit2-tutorials] +moveit_chomp_optimizer_adapter: + ubuntu: + focal: [ros-humble-moveit-chomp-optimizer-adapter] + jammy: [ros-humble-moveit-chomp-optimizer-adapter] +moveit_chomp_optimizer_adapter_dbgsym: + ubuntu: + focal: [ros-humble-moveit-chomp-optimizer-adapter-dbgsym] + jammy: [ros-humble-moveit-chomp-optimizer-adapter-dbgsym] +moveit_common: + ubuntu: + focal: [ros-humble-moveit-common] + jammy: [ros-humble-moveit-common] +moveit_configs_utils: + ubuntu: + focal: [ros-humble-moveit-configs-utils] + jammy: [ros-humble-moveit-configs-utils] +moveit_core: + ubuntu: + focal: [ros-humble-moveit-core] + jammy: [ros-humble-moveit-core] +moveit_core_dbgsym: + ubuntu: + focal: [ros-humble-moveit-core-dbgsym] + jammy: [ros-humble-moveit-core-dbgsym] +moveit_hybrid_planning: + ubuntu: + focal: [ros-humble-moveit-hybrid-planning] + jammy: [ros-humble-moveit-hybrid-planning] +moveit_hybrid_planning_dbgsym: + ubuntu: + focal: [ros-humble-moveit-hybrid-planning-dbgsym] + jammy: [ros-humble-moveit-hybrid-planning-dbgsym] +moveit_kinematics: + ubuntu: + focal: [ros-humble-moveit-kinematics] + jammy: [ros-humble-moveit-kinematics] +moveit_kinematics_dbgsym: + ubuntu: + focal: [ros-humble-moveit-kinematics-dbgsym] + jammy: [ros-humble-moveit-kinematics-dbgsym] +moveit_msgs: + ubuntu: + focal: [ros-humble-moveit-msgs] + jammy: [ros-humble-moveit-msgs] +moveit_msgs_dbgsym: + ubuntu: + focal: [ros-humble-moveit-msgs-dbgsym] + jammy: [ros-humble-moveit-msgs-dbgsym] +moveit_planners: + ubuntu: + focal: [ros-humble-moveit-planners] + jammy: [ros-humble-moveit-planners] +moveit_planners_chomp: + ubuntu: + focal: [ros-humble-moveit-planners-chomp] + jammy: [ros-humble-moveit-planners-chomp] +moveit_planners_chomp_dbgsym: + ubuntu: + focal: [ros-humble-moveit-planners-chomp-dbgsym] + jammy: [ros-humble-moveit-planners-chomp-dbgsym] +moveit_planners_ompl: + ubuntu: + focal: [ros-humble-moveit-planners-ompl] + jammy: [ros-humble-moveit-planners-ompl] +moveit_planners_ompl_dbgsym: + ubuntu: + focal: [ros-humble-moveit-planners-ompl-dbgsym] + jammy: [ros-humble-moveit-planners-ompl-dbgsym] +moveit_plugins: + ubuntu: + focal: [ros-humble-moveit-plugins] + jammy: [ros-humble-moveit-plugins] +moveit_resources: + ubuntu: + focal: [ros-humble-moveit-resources] + jammy: [ros-humble-moveit-resources] +moveit_resources_fanuc_description: + ubuntu: + focal: [ros-humble-moveit-resources-fanuc-description] + jammy: [ros-humble-moveit-resources-fanuc-description] +moveit_resources_fanuc_moveit_config: + ubuntu: + focal: [ros-humble-moveit-resources-fanuc-moveit-config] + jammy: [ros-humble-moveit-resources-fanuc-moveit-config] +moveit_resources_panda_description: + ubuntu: + focal: [ros-humble-moveit-resources-panda-description] + jammy: [ros-humble-moveit-resources-panda-description] +moveit_resources_panda_moveit_config: + ubuntu: + focal: [ros-humble-moveit-resources-panda-moveit-config] + jammy: [ros-humble-moveit-resources-panda-moveit-config] +moveit_resources_pr2_description: + ubuntu: + focal: [ros-humble-moveit-resources-pr2-description] + jammy: [ros-humble-moveit-resources-pr2-description] +moveit_resources_prbt_ikfast_manipulator_plugin: + ubuntu: + focal: [ros-humble-moveit-resources-prbt-ikfast-manipulator-plugin] + jammy: [ros-humble-moveit-resources-prbt-ikfast-manipulator-plugin] +moveit_resources_prbt_ikfast_manipulator_plugin_dbgsym: + ubuntu: + focal: [ros-humble-moveit-resources-prbt-ikfast-manipulator-plugin-dbgsym] + jammy: [ros-humble-moveit-resources-prbt-ikfast-manipulator-plugin-dbgsym] +moveit_resources_prbt_moveit_config: + ubuntu: + focal: [ros-humble-moveit-resources-prbt-moveit-config] + jammy: [ros-humble-moveit-resources-prbt-moveit-config] +moveit_resources_prbt_pg70_support: + ubuntu: + focal: [ros-humble-moveit-resources-prbt-pg70-support] + jammy: [ros-humble-moveit-resources-prbt-pg70-support] +moveit_resources_prbt_support: + ubuntu: + focal: [ros-humble-moveit-resources-prbt-support] + jammy: [ros-humble-moveit-resources-prbt-support] +moveit_ros: + ubuntu: + focal: [ros-humble-moveit-ros] + jammy: [ros-humble-moveit-ros] +moveit_ros_benchmarks: + ubuntu: + focal: [ros-humble-moveit-ros-benchmarks] + jammy: [ros-humble-moveit-ros-benchmarks] +moveit_ros_benchmarks_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-benchmarks-dbgsym] + jammy: [ros-humble-moveit-ros-benchmarks-dbgsym] +moveit_ros_control_interface: + ubuntu: + focal: [ros-humble-moveit-ros-control-interface] + jammy: [ros-humble-moveit-ros-control-interface] +moveit_ros_control_interface_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-control-interface-dbgsym] + jammy: [ros-humble-moveit-ros-control-interface-dbgsym] +moveit_ros_move_group: + ubuntu: + focal: [ros-humble-moveit-ros-move-group] + jammy: [ros-humble-moveit-ros-move-group] +moveit_ros_move_group_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-move-group-dbgsym] + jammy: [ros-humble-moveit-ros-move-group-dbgsym] +moveit_ros_occupancy_map_monitor: + ubuntu: + focal: [ros-humble-moveit-ros-occupancy-map-monitor] + jammy: [ros-humble-moveit-ros-occupancy-map-monitor] +moveit_ros_occupancy_map_monitor_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-occupancy-map-monitor-dbgsym] + jammy: [ros-humble-moveit-ros-occupancy-map-monitor-dbgsym] +moveit_ros_perception: + ubuntu: + focal: [ros-humble-moveit-ros-perception] + jammy: [ros-humble-moveit-ros-perception] +moveit_ros_perception_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-perception-dbgsym] + jammy: [ros-humble-moveit-ros-perception-dbgsym] +moveit_ros_planning: + ubuntu: + focal: [ros-humble-moveit-ros-planning] + jammy: [ros-humble-moveit-ros-planning] +moveit_ros_planning_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-planning-dbgsym] + jammy: [ros-humble-moveit-ros-planning-dbgsym] +moveit_ros_planning_interface: + ubuntu: + focal: [ros-humble-moveit-ros-planning-interface] + jammy: [ros-humble-moveit-ros-planning-interface] +moveit_ros_planning_interface_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-planning-interface-dbgsym] + jammy: [ros-humble-moveit-ros-planning-interface-dbgsym] +moveit_ros_robot_interaction: + ubuntu: + focal: [ros-humble-moveit-ros-robot-interaction] + jammy: [ros-humble-moveit-ros-robot-interaction] +moveit_ros_robot_interaction_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-robot-interaction-dbgsym] + jammy: [ros-humble-moveit-ros-robot-interaction-dbgsym] +moveit_ros_visualization: + ubuntu: + focal: [ros-humble-moveit-ros-visualization] + jammy: [ros-humble-moveit-ros-visualization] +moveit_ros_visualization_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-visualization-dbgsym] + jammy: [ros-humble-moveit-ros-visualization-dbgsym] +moveit_ros_warehouse: + ubuntu: + focal: [ros-humble-moveit-ros-warehouse] + jammy: [ros-humble-moveit-ros-warehouse] +moveit_ros_warehouse_dbgsym: + ubuntu: + focal: [ros-humble-moveit-ros-warehouse-dbgsym] + jammy: [ros-humble-moveit-ros-warehouse-dbgsym] +moveit_runtime: + ubuntu: + focal: [ros-humble-moveit-runtime] + jammy: [ros-humble-moveit-runtime] +moveit_servo: + ubuntu: + focal: [ros-humble-moveit-servo] + jammy: [ros-humble-moveit-servo] +moveit_servo_dbgsym: + ubuntu: + focal: [ros-humble-moveit-servo-dbgsym] + jammy: [ros-humble-moveit-servo-dbgsym] +moveit_setup_app_plugins: + ubuntu: + focal: [ros-humble-moveit-setup-app-plugins] + jammy: [ros-humble-moveit-setup-app-plugins] +moveit_setup_app_plugins_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-app-plugins-dbgsym] + jammy: [ros-humble-moveit-setup-app-plugins-dbgsym] +moveit_setup_assistant: + ubuntu: + focal: [ros-humble-moveit-setup-assistant] + jammy: [ros-humble-moveit-setup-assistant] +moveit_setup_assistant_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-assistant-dbgsym] + jammy: [ros-humble-moveit-setup-assistant-dbgsym] +moveit_setup_controllers: + ubuntu: + focal: [ros-humble-moveit-setup-controllers] + jammy: [ros-humble-moveit-setup-controllers] +moveit_setup_controllers_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-controllers-dbgsym] + jammy: [ros-humble-moveit-setup-controllers-dbgsym] +moveit_setup_core_plugins: + ubuntu: + focal: [ros-humble-moveit-setup-core-plugins] + jammy: [ros-humble-moveit-setup-core-plugins] +moveit_setup_core_plugins_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-core-plugins-dbgsym] + jammy: [ros-humble-moveit-setup-core-plugins-dbgsym] +moveit_setup_framework: + ubuntu: + focal: [ros-humble-moveit-setup-framework] + jammy: [ros-humble-moveit-setup-framework] +moveit_setup_framework_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-framework-dbgsym] + jammy: [ros-humble-moveit-setup-framework-dbgsym] +moveit_setup_srdf_plugins: + ubuntu: + focal: [ros-humble-moveit-setup-srdf-plugins] + jammy: [ros-humble-moveit-setup-srdf-plugins] +moveit_setup_srdf_plugins_dbgsym: + ubuntu: + focal: [ros-humble-moveit-setup-srdf-plugins-dbgsym] + jammy: [ros-humble-moveit-setup-srdf-plugins-dbgsym] +moveit_simple_controller_manager: + ubuntu: + focal: [ros-humble-moveit-simple-controller-manager] + jammy: [ros-humble-moveit-simple-controller-manager] +moveit_simple_controller_manager_dbgsym: + ubuntu: + focal: [ros-humble-moveit-simple-controller-manager-dbgsym] + jammy: [ros-humble-moveit-simple-controller-manager-dbgsym] +moveit_task_constructor_capabilities: + ubuntu: + focal: [ros-humble-moveit-task-constructor-capabilities] + jammy: [ros-humble-moveit-task-constructor-capabilities] +moveit_task_constructor_core: + ubuntu: + focal: [ros-humble-moveit-task-constructor-core] + jammy: [ros-humble-moveit-task-constructor-core] +moveit_task_constructor_demo: + ubuntu: + focal: [ros-humble-moveit-task-constructor-demo] + jammy: [ros-humble-moveit-task-constructor-demo] +moveit_task_constructor_msgs: + ubuntu: + focal: [ros-humble-moveit-task-constructor-msgs] + jammy: [ros-humble-moveit-task-constructor-msgs] +moveit_task_constructor_visualization: + ubuntu: + focal: [ros-humble-moveit-task-constructor-visualization] + jammy: [ros-humble-moveit-task-constructor-visualization] +moveit_visual_tools: + ubuntu: + focal: [ros-humble-moveit-visual-tools] + jammy: [ros-humble-moveit-visual-tools] +moveit_visual_tools_dbgsym: + ubuntu: + focal: [ros-humble-moveit-visual-tools-dbgsym] + jammy: [ros-humble-moveit-visual-tools-dbgsym] +mqtt_client: + ubuntu: + focal: [ros-humble-mqtt-client] + jammy: [ros-humble-mqtt-client] +mqtt_client_dbgsym: + ubuntu: + focal: [ros-humble-mqtt-client-dbgsym] + jammy: [ros-humble-mqtt-client-dbgsym] +mqtt_client_interfaces: + ubuntu: + focal: [ros-humble-mqtt-client-interfaces] + jammy: [ros-humble-mqtt-client-interfaces] +mqtt_client_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-mqtt-client-interfaces-dbgsym] + jammy: [ros-humble-mqtt-client-interfaces-dbgsym] +mrpt_msgs: + ubuntu: + focal: [ros-humble-mrpt-msgs] + jammy: [ros-humble-mrpt-msgs] +mrpt_msgs_dbgsym: + ubuntu: + focal: [ros-humble-mrpt-msgs-dbgsym] + jammy: [ros-humble-mrpt-msgs-dbgsym] +mrt_cmake_modules: + ubuntu: + focal: [ros-humble-mrt-cmake-modules] + jammy: [ros-humble-mrt-cmake-modules] +nao_button_sim: + ubuntu: + focal: [ros-humble-nao-button-sim] + jammy: [ros-humble-nao-button-sim] +nao_command_msgs: + ubuntu: + focal: [ros-humble-nao-command-msgs] + jammy: [ros-humble-nao-command-msgs] +nao_command_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nao-command-msgs-dbgsym] + jammy: [ros-humble-nao-command-msgs-dbgsym] +nao_lola: + ubuntu: + focal: [ros-humble-nao-lola] + jammy: [ros-humble-nao-lola] +nao_lola_dbgsym: + ubuntu: + focal: [ros-humble-nao-lola-dbgsym] + jammy: [ros-humble-nao-lola-dbgsym] +nao_sensor_msgs: + ubuntu: + focal: [ros-humble-nao-sensor-msgs] + jammy: [ros-humble-nao-sensor-msgs] +nao_sensor_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nao-sensor-msgs-dbgsym] + jammy: [ros-humble-nao-sensor-msgs-dbgsym] +nav2_amcl: + ubuntu: + focal: [ros-humble-nav2-amcl] + jammy: [ros-humble-nav2-amcl] +nav2_amcl_dbgsym: + ubuntu: + focal: [ros-humble-nav2-amcl-dbgsym] + jammy: [ros-humble-nav2-amcl-dbgsym] +nav2_behavior_tree: + ubuntu: + focal: [ros-humble-nav2-behavior-tree] + jammy: [ros-humble-nav2-behavior-tree] +nav2_behavior_tree_dbgsym: + ubuntu: + focal: [ros-humble-nav2-behavior-tree-dbgsym] + jammy: [ros-humble-nav2-behavior-tree-dbgsym] +nav2_behaviors: + ubuntu: + focal: [ros-humble-nav2-behaviors] + jammy: [ros-humble-nav2-behaviors] +nav2_behaviors_dbgsym: + ubuntu: + focal: [ros-humble-nav2-behaviors-dbgsym] + jammy: [ros-humble-nav2-behaviors-dbgsym] +nav2_bringup: + ubuntu: + focal: [ros-humble-nav2-bringup] + jammy: [ros-humble-nav2-bringup] +nav2_bt_navigator: + ubuntu: + focal: [ros-humble-nav2-bt-navigator] + jammy: [ros-humble-nav2-bt-navigator] +nav2_bt_navigator_dbgsym: + ubuntu: + focal: [ros-humble-nav2-bt-navigator-dbgsym] + jammy: [ros-humble-nav2-bt-navigator-dbgsym] +nav2_collision_monitor: + ubuntu: + focal: [ros-humble-nav2-collision-monitor] + jammy: [ros-humble-nav2-collision-monitor] +nav2_collision_monitor_dbgsym: + ubuntu: + focal: [ros-humble-nav2-collision-monitor-dbgsym] + jammy: [ros-humble-nav2-collision-monitor-dbgsym] +nav2_common: + ubuntu: + focal: [ros-humble-nav2-common] + jammy: [ros-humble-nav2-common] +nav2_constrained_smoother: + ubuntu: + focal: [ros-humble-nav2-constrained-smoother] + jammy: [ros-humble-nav2-constrained-smoother] +nav2_constrained_smoother_dbgsym: + ubuntu: + focal: [ros-humble-nav2-constrained-smoother-dbgsym] + jammy: [ros-humble-nav2-constrained-smoother-dbgsym] +nav2_controller: + ubuntu: + focal: [ros-humble-nav2-controller] + jammy: [ros-humble-nav2-controller] +nav2_controller_dbgsym: + ubuntu: + focal: [ros-humble-nav2-controller-dbgsym] + jammy: [ros-humble-nav2-controller-dbgsym] +nav2_core: + ubuntu: + focal: [ros-humble-nav2-core] + jammy: [ros-humble-nav2-core] +nav2_costmap_2d: + ubuntu: + focal: [ros-humble-nav2-costmap-2d] + jammy: [ros-humble-nav2-costmap-2d] +nav2_costmap_2d_dbgsym: + ubuntu: + focal: [ros-humble-nav2-costmap-2d-dbgsym] + jammy: [ros-humble-nav2-costmap-2d-dbgsym] +nav2_dwb_controller: + ubuntu: + focal: [ros-humble-nav2-dwb-controller] + jammy: [ros-humble-nav2-dwb-controller] +nav2_lifecycle_manager: + ubuntu: + focal: [ros-humble-nav2-lifecycle-manager] + jammy: [ros-humble-nav2-lifecycle-manager] +nav2_lifecycle_manager_dbgsym: + ubuntu: + focal: [ros-humble-nav2-lifecycle-manager-dbgsym] + jammy: [ros-humble-nav2-lifecycle-manager-dbgsym] +nav2_map_server: + ubuntu: + focal: [ros-humble-nav2-map-server] + jammy: [ros-humble-nav2-map-server] +nav2_map_server_dbgsym: + ubuntu: + focal: [ros-humble-nav2-map-server-dbgsym] + jammy: [ros-humble-nav2-map-server-dbgsym] +nav2_mppi_controller: + ubuntu: + focal: [ros-humble-nav2-mppi-controller] + jammy: [ros-humble-nav2-mppi-controller] +nav2_mppi_controller_dbgsym: + ubuntu: + focal: [ros-humble-nav2-mppi-controller-dbgsym] + jammy: [ros-humble-nav2-mppi-controller-dbgsym] +nav2_msgs: + ubuntu: + focal: [ros-humble-nav2-msgs] + jammy: [ros-humble-nav2-msgs] +nav2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nav2-msgs-dbgsym] + jammy: [ros-humble-nav2-msgs-dbgsym] +nav2_navfn_planner: + ubuntu: + focal: [ros-humble-nav2-navfn-planner] + jammy: [ros-humble-nav2-navfn-planner] +nav2_navfn_planner_dbgsym: + ubuntu: + focal: [ros-humble-nav2-navfn-planner-dbgsym] + jammy: [ros-humble-nav2-navfn-planner-dbgsym] +nav2_planner: + ubuntu: + focal: [ros-humble-nav2-planner] + jammy: [ros-humble-nav2-planner] +nav2_planner_dbgsym: + ubuntu: + focal: [ros-humble-nav2-planner-dbgsym] + jammy: [ros-humble-nav2-planner-dbgsym] +nav2_regulated_pure_pursuit_controller: + ubuntu: + focal: [ros-humble-nav2-regulated-pure-pursuit-controller] + jammy: [ros-humble-nav2-regulated-pure-pursuit-controller] +nav2_regulated_pure_pursuit_controller_dbgsym: + ubuntu: + focal: [ros-humble-nav2-regulated-pure-pursuit-controller-dbgsym] + jammy: [ros-humble-nav2-regulated-pure-pursuit-controller-dbgsym] +nav2_rotation_shim_controller: + ubuntu: + focal: [ros-humble-nav2-rotation-shim-controller] + jammy: [ros-humble-nav2-rotation-shim-controller] +nav2_rotation_shim_controller_dbgsym: + ubuntu: + focal: [ros-humble-nav2-rotation-shim-controller-dbgsym] + jammy: [ros-humble-nav2-rotation-shim-controller-dbgsym] +nav2_rviz_plugins: + ubuntu: + focal: [ros-humble-nav2-rviz-plugins] + jammy: [ros-humble-nav2-rviz-plugins] +nav2_rviz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-nav2-rviz-plugins-dbgsym] + jammy: [ros-humble-nav2-rviz-plugins-dbgsym] +nav2_simple_commander: + ubuntu: + focal: [ros-humble-nav2-simple-commander] + jammy: [ros-humble-nav2-simple-commander] +nav2_smac_planner: + ubuntu: + focal: [ros-humble-nav2-smac-planner] + jammy: [ros-humble-nav2-smac-planner] +nav2_smac_planner_dbgsym: + ubuntu: + focal: [ros-humble-nav2-smac-planner-dbgsym] + jammy: [ros-humble-nav2-smac-planner-dbgsym] +nav2_smoother: + ubuntu: + focal: [ros-humble-nav2-smoother] + jammy: [ros-humble-nav2-smoother] +nav2_smoother_dbgsym: + ubuntu: + focal: [ros-humble-nav2-smoother-dbgsym] + jammy: [ros-humble-nav2-smoother-dbgsym] +nav2_theta_star_planner: + ubuntu: + focal: [ros-humble-nav2-theta-star-planner] + jammy: [ros-humble-nav2-theta-star-planner] +nav2_theta_star_planner_dbgsym: + ubuntu: + focal: [ros-humble-nav2-theta-star-planner-dbgsym] + jammy: [ros-humble-nav2-theta-star-planner-dbgsym] +nav2_util: + ubuntu: + focal: [ros-humble-nav2-util] + jammy: [ros-humble-nav2-util] +nav2_util_dbgsym: + ubuntu: + focal: [ros-humble-nav2-util-dbgsym] + jammy: [ros-humble-nav2-util-dbgsym] +nav2_velocity_smoother: + ubuntu: + focal: [ros-humble-nav2-velocity-smoother] + jammy: [ros-humble-nav2-velocity-smoother] +nav2_velocity_smoother_dbgsym: + ubuntu: + focal: [ros-humble-nav2-velocity-smoother-dbgsym] + jammy: [ros-humble-nav2-velocity-smoother-dbgsym] +nav2_voxel_grid: + ubuntu: + focal: [ros-humble-nav2-voxel-grid] + jammy: [ros-humble-nav2-voxel-grid] +nav2_voxel_grid_dbgsym: + ubuntu: + focal: [ros-humble-nav2-voxel-grid-dbgsym] + jammy: [ros-humble-nav2-voxel-grid-dbgsym] +nav2_waypoint_follower: + ubuntu: + focal: [ros-humble-nav2-waypoint-follower] + jammy: [ros-humble-nav2-waypoint-follower] +nav2_waypoint_follower_dbgsym: + ubuntu: + focal: [ros-humble-nav2-waypoint-follower-dbgsym] + jammy: [ros-humble-nav2-waypoint-follower-dbgsym] +nav_2d_msgs: + ubuntu: + focal: [ros-humble-nav-2d-msgs] + jammy: [ros-humble-nav-2d-msgs] +nav_2d_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nav-2d-msgs-dbgsym] + jammy: [ros-humble-nav-2d-msgs-dbgsym] +nav_2d_utils: + ubuntu: + focal: [ros-humble-nav-2d-utils] + jammy: [ros-humble-nav-2d-utils] +nav_2d_utils_dbgsym: + ubuntu: + focal: [ros-humble-nav-2d-utils-dbgsym] + jammy: [ros-humble-nav-2d-utils-dbgsym] +nav_msgs: + ubuntu: + focal: [ros-humble-nav-msgs] + jammy: [ros-humble-nav-msgs] +nav_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nav-msgs-dbgsym] + jammy: [ros-humble-nav-msgs-dbgsym] +navigation2: + ubuntu: + focal: [ros-humble-navigation2] + jammy: [ros-humble-navigation2] +navperf: + ubuntu: + focal: [ros-humble-navperf] + jammy: [ros-humble-navperf] +navperf_bringup: + ubuntu: + focal: [ros-humble-navperf-bringup] + jammy: [ros-humble-navperf-bringup] +navperf_compute_monitor: + ubuntu: + focal: [ros-humble-navperf-compute-monitor] + jammy: [ros-humble-navperf-compute-monitor] +navperf_commander: + ubuntu: + focal: [ros-humble-navperf-commander] + jammy: [ros-humble-navperf-commander] +navperf_evaluator: + ubuntu: + focal: [ros-humble-navperf-evaluator] + jammy: [ros-humble-navperf-evaluator] +navperf_msgs: + ubuntu: + focal: [ros-humble-navperf-msgs] + jammy: [ros-humble-navperf-msgs] +mission_monitor: + ubuntu: + focal: [ros-humble-mission-monitor] + jammy: [ros-humble-mission-monitor] +navperf_utils: + ubuntu: + focal: [ros-humble-navperf-utils] + jammy: [ros-humble-navperf-utils] +negotiated: + ubuntu: + focal: [ros-humble-negotiated] + jammy: [ros-humble-negotiated] +negotiated_interfaces: + ubuntu: + focal: [ros-humble-negotiated-interfaces] + jammy: [ros-humble-negotiated-interfaces] +neo_simulation2: + ubuntu: + focal: [ros-humble-neo-simulation2] + jammy: [ros-humble-neo-simulation2] +neobotix_usboard_msgs: + ubuntu: + focal: [ros-humble-neobotix-usboard-msgs] + jammy: [ros-humble-neobotix-usboard-msgs] +neobotix_usboard_msgs_dbgsym: + ubuntu: + focal: [ros-humble-neobotix-usboard-msgs-dbgsym] + jammy: [ros-humble-neobotix-usboard-msgs-dbgsym] +nerian_stereo: + ubuntu: + focal: [ros-humble-nerian-stereo] + jammy: [ros-humble-nerian-stereo] +nerian_stereo_dbgsym: + ubuntu: + focal: [ros-humble-nerian-stereo-dbgsym] + jammy: [ros-humble-nerian-stereo-dbgsym] +network_performance_measurement: + ubuntu: + focal: [ros-humble-network-performance-measurement] + jammy: [ros-humble-network-performance-measurement] +nlohmann_json: + ubuntu: + focal: [nlohmann-json3-dev] + jammy: [nlohmann-json3-dev] +nlohmann_json_schema_validator_vendor: + ubuntu: + focal: [ros-humble-nlohmann-json-schema-validator-vendor] + jammy: [ros-humble-nlohmann-json-schema-validator-vendor] +nlohmann_json_schema_validator_vendor_dbgsym: + ubuntu: + focal: [ros-humble-nlohmann-json-schema-validator-vendor-dbgsym] + jammy: [ros-humble-nlohmann-json-schema-validator-vendor-dbgsym] +nmea_msgs: + ubuntu: + focal: [ros-humble-nmea-msgs] + jammy: [ros-humble-nmea-msgs] +nmea_msgs_dbgsym: + ubuntu: + focal: [ros-humble-nmea-msgs-dbgsym] + jammy: [ros-humble-nmea-msgs-dbgsym] +nmea_navsat_driver: + ubuntu: + focal: [ros-humble-nmea-navsat-driver] + jammy: [ros-humble-nmea-navsat-driver] +nodelet: + ubuntu: + focal: [ros-noetic-nodelet] + jammy: [ros-noetic-nodelet] +nodl_python: + ubuntu: + focal: [ros-humble-nodl-python] + jammy: [ros-humble-nodl-python] +nodl_to_policy: + ubuntu: + focal: [ros-humble-nodl-to-policy] + jammy: [ros-humble-nodl-to-policy] +nova_carter_bringup: + ubuntu: + focal: [ros-humble-nova-carter-bringup] + jammy: [ros-humble-nova-carter-bringup] +nova_carter_description: + ubuntu: + focal: [ros-humble-nova-carter-description] + jammy: [ros-humble-nova-carter-description] +nova_carter_docking: + ubuntu: + focal: [ros-humble-nova-carter-docking] + jammy: [ros-humble-nova-carter-docking] +nova_carter_navigation: + ubuntu: + focal: [ros-humble-nova-carter-navigation] + jammy: [ros-humble-nova-carter-navigation] +nova_carter_example_data: + ubuntu: + focal: [ros-humble-nova-carter-example-data] + jammy: [ros-humble-nova-carter-example-data] +nova_developer_kit_bringup: + ubuntu: + focal: [ros-humble-nova-developer-kit-bringup] + jammy: [ros-humble-nova-developer-kit-bringup] +nova_developer_kit_description: + ubuntu: + focal: [ros-humble-nova-developer-kit-description] + jammy: [ros-humble-nova-developer-kit-description] +novatel_gps_msgs: + ubuntu: + focal: [ros-humble-novatel-gps-msgs] + jammy: [ros-humble-novatel-gps-msgs] +novatel_gps_msgs_dbgsym: + ubuntu: + focal: [ros-humble-novatel-gps-msgs-dbgsym] + jammy: [ros-humble-novatel-gps-msgs-dbgsym] +novatel_oem7_driver: + ubuntu: + focal: [ros-humble-novatel-oem7-driver] + jammy: [ros-humble-novatel-oem7-driver] +novatel_oem7_driver_dbgsym: + ubuntu: + focal: [ros-humble-novatel-oem7-driver-dbgsym] + jammy: [ros-humble-novatel-oem7-driver-dbgsym] +novatel_oem7_msgs: + ubuntu: + focal: [ros-humble-novatel-oem7-msgs] + jammy: [ros-humble-novatel-oem7-msgs] +novatel_oem7_msgs_dbgsym: + ubuntu: + focal: [ros-humble-novatel-oem7-msgs-dbgsym] + jammy: [ros-humble-novatel-oem7-msgs-dbgsym] +ntpd_driver: + ubuntu: + focal: [ros-humble-ntpd-driver] + jammy: [ros-humble-ntpd-driver] +ntpd_driver_dbgsym: + ubuntu: + focal: [ros-humble-ntpd-driver-dbgsym] + jammy: [ros-humble-ntpd-driver-dbgsym] +ntrip_client: + ubuntu: + focal: [ros-humble-ntrip-client] + jammy: [ros-humble-ntrip-client] +ntrip_client_node: + ubuntu: + focal: [ros-humble-ntrip-client-node] + jammy: [ros-humble-ntrip-client-node] +ntrip_client_node_dbgsym: + ubuntu: + focal: [ros-humble-ntrip-client-node-dbgsym] + jammy: [ros-humble-ntrip-client-node-dbgsym] +nvblox: + ubuntu: + focal: [nvblox] + jammy: [nvblox] +nvblox_cpu_gpu_tools: + ubuntu: + focal: [ros-humble-nvblox-cpu-gpu-tools] + jammy: [ros-humble-nvblox-cpu-gpu-tools] +nvblox_examples_bringup: + ubuntu: + focal: [ros-humble-nvblox-examples-bringup] + jammy: [ros-humble-nvblox-examples-bringup] +nvblox_image_padding: + ubuntu: + focal: [ros-humble-nvblox-image-padding] + jammy: [ros-humble-nvblox-image-padding] +nvblox_isaac_sim: + ubuntu: + focal: [ros-humble-nvblox-isaac-sim] + jammy: [ros-humble-nvblox-isaac-sim] +nvblox_msgs: + ubuntu: + focal: [ros-humble-nvblox-msgs] + jammy: [ros-humble-nvblox-msgs] +nvblox_nav2: + ubuntu: + focal: [ros-humble-nvblox-nav2] + jammy: [ros-humble-nvblox-nav2] +nvblox_performance_measurement: + ubuntu: + focal: [ros-humble-nvblox-performance-measurement] + jammy: [ros-humble-nvblox-performance-measurement] +nvblox_performance_measurement_msgs: + ubuntu: + focal: [ros-humble-nvblox-performance-measurement-msgs] + jammy: [ros-humble-nvblox-performance-measurement-msgs] +nvblox_ros: + ubuntu: + focal: [ros-humble-nvblox-ros] + jammy: [ros-humble-nvblox-ros] +nvblox_ros_common: + ubuntu: + focal: [ros-humble-nvblox-ros-common] + jammy: [ros-humble-nvblox-ros-common] +nvblox_ros_python_utils: + ubuntu: + focal: [ros-humble-nvblox-ros-python-utils] + jammy: [ros-humble-nvblox-ros-python-utils] +nvblox_rviz_plugin: + ubuntu: + focal: [ros-humble-nvblox-rviz-plugin] + jammy: [ros-humble-nvblox-rviz-plugin] +nvblox_test: + ubuntu: + focal: [ros-humble-nvblox-test] + jammy: [ros-humble-nvblox-test] +object_recognition_msgs: + ubuntu: + focal: [ros-humble-object-recognition-msgs] + jammy: [ros-humble-object-recognition-msgs] +object_recognition_msgs_dbgsym: + ubuntu: + focal: [ros-humble-object-recognition-msgs-dbgsym] + jammy: [ros-humble-object-recognition-msgs-dbgsym] +octomap: + ubuntu: + focal: [ros-humble-octomap] + jammy: [ros-humble-octomap] +octomap_dbgsym: + ubuntu: + focal: [ros-humble-octomap-dbgsym] + jammy: [ros-humble-octomap-dbgsym] +octomap_mapping: + ubuntu: + focal: [ros-humble-octomap-mapping] + jammy: [ros-humble-octomap-mapping] +octomap_msgs: + ubuntu: + focal: [ros-humble-octomap-msgs] + jammy: [ros-humble-octomap-msgs] +octomap_msgs_dbgsym: + ubuntu: + focal: [ros-humble-octomap-msgs-dbgsym] + jammy: [ros-humble-octomap-msgs-dbgsym] +octomap_ros: + ubuntu: + focal: [ros-humble-octomap-ros] + jammy: [ros-humble-octomap-ros] +octomap_ros_dbgsym: + ubuntu: + focal: [ros-humble-octomap-ros-dbgsym] + jammy: [ros-humble-octomap-ros-dbgsym] +octomap_rviz_plugins: + ubuntu: + focal: [ros-humble-octomap-rviz-plugins] + jammy: [ros-humble-octomap-rviz-plugins] +octomap_rviz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-octomap-rviz-plugins-dbgsym] + jammy: [ros-humble-octomap-rviz-plugins-dbgsym] +octomap_server: + ubuntu: + focal: [ros-humble-octomap-server] + jammy: [ros-humble-octomap-server] +octomap_server_dbgsym: + ubuntu: + focal: [ros-humble-octomap-server-dbgsym] + jammy: [ros-humble-octomap-server-dbgsym] +octovis: + ubuntu: + focal: [ros-humble-octovis] + jammy: [ros-humble-octovis] +octovis_dbgsym: + ubuntu: + focal: [ros-humble-octovis-dbgsym] + jammy: [ros-humble-octovis-dbgsym] +odom_to_tf_ros2: + ubuntu: + focal: [ros-humble-odom-to-tf-ros2] + jammy: [ros-humble-odom-to-tf-ros2] +odom_to_tf_ros2_dbgsym: + ubuntu: + focal: [ros-humble-odom-to-tf-ros2-dbgsym] + jammy: [ros-humble-odom-to-tf-ros2-dbgsym] +odometry_flattener: + ubuntu: + focal: [ros-humble-odometry-flattener] + jammy: [ros-humble-odometry-flattener] +ompl: + ubuntu: + focal: [ros-humble-ompl] + jammy: [ros-humble-ompl] +ompl_dbgsym: + ubuntu: + focal: [ros-humble-ompl-dbgsym] + jammy: [ros-humble-ompl-dbgsym] +opennav_docking: + ubuntu: + focal: [ros-humble-opennav-docking] + jammy: [ros-humble-opennav-docking] +opennav_docking_bt: + ubuntu: + focal: [ros-humble-opennav-docking-bt] + jammy: [ros-humble-opennav-docking-bt] +opennav_docking_core: + ubuntu: + focal: [ros-humble-opennav-docking-core] + jammy: [ros-humble-opennav-docking-core] +opennav_docking_msgs: + ubuntu: + focal: [ros-humble-opennav-docking-msgs] + jammy: [ros-humble-opennav-docking-msgs] +openni2_camera: + ubuntu: + focal: [ros-humble-openni2-camera] + jammy: [ros-humble-openni2-camera] +openni2_camera_dbgsym: + ubuntu: + focal: [ros-humble-openni2-camera-dbgsym] + jammy: [ros-humble-openni2-camera-dbgsym] +orocos_kdl_vendor: + ubuntu: + focal: [ros-humble-orocos-kdl-vendor] + jammy: [ros-humble-orocos-kdl-vendor] +orocos_kdl_vendor_dbgsym: + ubuntu: + focal: [ros-humble-orocos-kdl-vendor-dbgsym] + jammy: [ros-humble-orocos-kdl-vendor-dbgsym] +osqp_vendor: + ubuntu: + focal: [ros-humble-osqp-vendor] + jammy: [ros-humble-osqp-vendor] +osqp_vendor_dbgsym: + ubuntu: + focal: [ros-humble-osqp-vendor-dbgsym] + jammy: [ros-humble-osqp-vendor-dbgsym] +osrf_pycommon: + ubuntu: + focal: [ros-humble-osrf-pycommon] + jammy: [ros-humble-osrf-pycommon] +osrf_testing_tools_cpp: + ubuntu: + focal: [ros-humble-osrf-testing-tools-cpp] + jammy: [ros-humble-osrf-testing-tools-cpp] +osrf_testing_tools_cpp_dbgsym: + ubuntu: + focal: [ros-humble-osrf-testing-tools-cpp-dbgsym] + jammy: [ros-humble-osrf-testing-tools-cpp-dbgsym] +ouster_msgs: + ubuntu: + focal: [ros-humble-ouster-msgs] + jammy: [ros-humble-ouster-msgs] +ouster_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ouster-msgs-dbgsym] + jammy: [ros-humble-ouster-msgs-dbgsym] +ouxt_common: + ubuntu: + focal: [ros-humble-ouxt-common] + jammy: [ros-humble-ouxt-common] +ouxt_lint_common: + ubuntu: + focal: [ros-humble-ouxt-lint-common] + jammy: [ros-humble-ouxt-lint-common] +owl_description: + ubuntu: + focal: [ros-humble-owl-description] + jammy: [ros-humble-owl-description] +pal_gazebo_worlds: + ubuntu: + focal: [ros-humble-pal-gazebo-worlds] + jammy: [ros-humble-pal-gazebo-worlds] +pal_gripper: + ubuntu: + focal: [ros-humble-pal-gripper] + jammy: [ros-humble-pal-gripper] +pal_gripper_controller_configuration: + ubuntu: + focal: [ros-humble-pal-gripper-controller-configuration] + jammy: [ros-humble-pal-gripper-controller-configuration] +pal_gripper_description: + ubuntu: + focal: [ros-humble-pal-gripper-description] + jammy: [ros-humble-pal-gripper-description] +pal_navigation_cfg: + ubuntu: + focal: [ros-humble-pal-navigation-cfg] + jammy: [ros-humble-pal-navigation-cfg] +pal_navigation_cfg_bringup: + ubuntu: + focal: [ros-humble-pal-navigation-cfg-bringup] + jammy: [ros-humble-pal-navigation-cfg-bringup] +pal_navigation_cfg_params: + ubuntu: + focal: [ros-humble-pal-navigation-cfg-params] + jammy: [ros-humble-pal-navigation-cfg-params] +pal_statistics: + ubuntu: + focal: [ros-humble-pal-statistics] + jammy: [ros-humble-pal-statistics] +pal_statistics_dbgsym: + ubuntu: + focal: [ros-humble-pal-statistics-dbgsym] + jammy: [ros-humble-pal-statistics-dbgsym] +pal_statistics_msgs: + ubuntu: + focal: [ros-humble-pal-statistics-msgs] + jammy: [ros-humble-pal-statistics-msgs] +pal_statistics_msgs_dbgsym: + ubuntu: + focal: [ros-humble-pal-statistics-msgs-dbgsym] + jammy: [ros-humble-pal-statistics-msgs-dbgsym] +pandar_xt32_description: + ubuntu: + focal: [ros-humble-pandar-xt32-description] + jammy: [ros-humble-pandar-xt32-description] +parameter_traits: + ubuntu: + focal: [ros-humble-parameter-traits] + jammy: [ros-humble-parameter-traits] +pcl_conversions: + ubuntu: + focal: [ros-humble-pcl-conversions] + jammy: [ros-humble-pcl-conversions] +pcl_msgs: + ubuntu: + focal: [ros-humble-pcl-msgs] + jammy: [ros-humble-pcl-msgs] +pcl_msgs_dbgsym: + ubuntu: + focal: [ros-humble-pcl-msgs-dbgsym] + jammy: [ros-humble-pcl-msgs-dbgsym] +pcl_ros: + ubuntu: + focal: [ros-humble-pcl-ros] + jammy: [ros-humble-pcl-ros] +pendulum_control: + ubuntu: + focal: [ros-humble-pendulum-control] + jammy: [ros-humble-pendulum-control] +pendulum_control_dbgsym: + ubuntu: + focal: [ros-humble-pendulum-control-dbgsym] + jammy: [ros-humble-pendulum-control-dbgsym] +pendulum_msgs: + ubuntu: + focal: [ros-humble-pendulum-msgs] + jammy: [ros-humble-pendulum-msgs] +pendulum_msgs_dbgsym: + ubuntu: + focal: [ros-humble-pendulum-msgs-dbgsym] + jammy: [ros-humble-pendulum-msgs-dbgsym] +perception: + ubuntu: + focal: [ros-humble-perception] + jammy: [ros-humble-perception] +perception_pcl: + ubuntu: + focal: [ros-humble-perception-pcl] + jammy: [ros-humble-perception-pcl] +performance_test_fixture: + ubuntu: + focal: [ros-humble-performance-test-fixture] + jammy: [ros-humble-performance-test-fixture] +performance_test_fixture_dbgsym: + ubuntu: + focal: [ros-humble-performance-test-fixture-dbgsym] + jammy: [ros-humble-performance-test-fixture-dbgsym] +phidgets_accelerometer: + ubuntu: + focal: [ros-humble-phidgets-accelerometer] + jammy: [ros-humble-phidgets-accelerometer] +phidgets_accelerometer_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-accelerometer-dbgsym] + jammy: [ros-humble-phidgets-accelerometer-dbgsym] +phidgets_analog_inputs: + ubuntu: + focal: [ros-humble-phidgets-analog-inputs] + jammy: [ros-humble-phidgets-analog-inputs] +phidgets_analog_inputs_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-analog-inputs-dbgsym] + jammy: [ros-humble-phidgets-analog-inputs-dbgsym] +phidgets_analog_outputs: + ubuntu: + focal: [ros-humble-phidgets-analog-outputs] + jammy: [ros-humble-phidgets-analog-outputs] +phidgets_analog_outputs_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-analog-outputs-dbgsym] + jammy: [ros-humble-phidgets-analog-outputs-dbgsym] +phidgets_api: + ubuntu: + focal: [ros-humble-phidgets-api] + jammy: [ros-humble-phidgets-api] +phidgets_api_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-api-dbgsym] + jammy: [ros-humble-phidgets-api-dbgsym] +phidgets_digital_inputs: + ubuntu: + focal: [ros-humble-phidgets-digital-inputs] + jammy: [ros-humble-phidgets-digital-inputs] +phidgets_digital_inputs_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-digital-inputs-dbgsym] + jammy: [ros-humble-phidgets-digital-inputs-dbgsym] +phidgets_digital_outputs: + ubuntu: + focal: [ros-humble-phidgets-digital-outputs] + jammy: [ros-humble-phidgets-digital-outputs] +phidgets_digital_outputs_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-digital-outputs-dbgsym] + jammy: [ros-humble-phidgets-digital-outputs-dbgsym] +phidgets_drivers: + ubuntu: + focal: [ros-humble-phidgets-drivers] + jammy: [ros-humble-phidgets-drivers] +phidgets_gyroscope: + ubuntu: + focal: [ros-humble-phidgets-gyroscope] + jammy: [ros-humble-phidgets-gyroscope] +phidgets_gyroscope_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-gyroscope-dbgsym] + jammy: [ros-humble-phidgets-gyroscope-dbgsym] +phidgets_high_speed_encoder: + ubuntu: + focal: [ros-humble-phidgets-high-speed-encoder] + jammy: [ros-humble-phidgets-high-speed-encoder] +phidgets_high_speed_encoder_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-high-speed-encoder-dbgsym] + jammy: [ros-humble-phidgets-high-speed-encoder-dbgsym] +phidgets_ik: + ubuntu: + focal: [ros-humble-phidgets-ik] + jammy: [ros-humble-phidgets-ik] +phidgets_magnetometer: + ubuntu: + focal: [ros-humble-phidgets-magnetometer] + jammy: [ros-humble-phidgets-magnetometer] +phidgets_magnetometer_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-magnetometer-dbgsym] + jammy: [ros-humble-phidgets-magnetometer-dbgsym] +phidgets_motors: + ubuntu: + focal: [ros-humble-phidgets-motors] + jammy: [ros-humble-phidgets-motors] +phidgets_motors_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-motors-dbgsym] + jammy: [ros-humble-phidgets-motors-dbgsym] +phidgets_msgs: + ubuntu: + focal: [ros-humble-phidgets-msgs] + jammy: [ros-humble-phidgets-msgs] +phidgets_msgs_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-msgs-dbgsym] + jammy: [ros-humble-phidgets-msgs-dbgsym] +phidgets_spatial: + ubuntu: + focal: [ros-humble-phidgets-spatial] + jammy: [ros-humble-phidgets-spatial] +phidgets_spatial_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-spatial-dbgsym] + jammy: [ros-humble-phidgets-spatial-dbgsym] +phidgets_temperature: + ubuntu: + focal: [ros-humble-phidgets-temperature] + jammy: [ros-humble-phidgets-temperature] +phidgets_temperature_dbgsym: + ubuntu: + focal: [ros-humble-phidgets-temperature-dbgsym] + jammy: [ros-humble-phidgets-temperature-dbgsym] +pick_ik: + ubuntu: + focal: [ros-humble-pick-ik] + jammy: [ros-humble-pick-ik] +pick_ik_dbgsym: + ubuntu: + focal: [ros-humble-pick-ik-dbgsym] + jammy: [ros-humble-pick-ik-dbgsym] +picknik_ament_copyright: + ubuntu: + focal: [ros-humble-picknik-ament-copyright] + jammy: [ros-humble-picknik-ament-copyright] +picknik_reset_fault_controller: + ubuntu: + focal: [ros-humble-picknik-reset-fault-controller] + jammy: [ros-humble-picknik-reset-fault-controller] +picknik_reset_fault_controller_dbgsym: + ubuntu: + focal: [ros-humble-picknik-reset-fault-controller-dbgsym] + jammy: [ros-humble-picknik-reset-fault-controller-dbgsym] +picknik_twist_controller: + ubuntu: + focal: [ros-humble-picknik-twist-controller] + jammy: [ros-humble-picknik-twist-controller] +picknik_twist_controller_dbgsym: + ubuntu: + focal: [ros-humble-picknik-twist-controller-dbgsym] + jammy: [ros-humble-picknik-twist-controller-dbgsym] +pilz_industrial_motion_planner: + ubuntu: + focal: [ros-humble-pilz-industrial-motion-planner] + jammy: [ros-humble-pilz-industrial-motion-planner] +pilz_industrial_motion_planner_dbgsym: + ubuntu: + focal: [ros-humble-pilz-industrial-motion-planner-dbgsym] + jammy: [ros-humble-pilz-industrial-motion-planner-dbgsym] +pilz_industrial_motion_planner_testutils: + ubuntu: + focal: [ros-humble-pilz-industrial-motion-planner-testutils] + jammy: [ros-humble-pilz-industrial-motion-planner-testutils] +pilz_industrial_motion_planner_testutils_dbgsym: + ubuntu: + focal: [ros-humble-pilz-industrial-motion-planner-testutils-dbgsym] + jammy: [ros-humble-pilz-industrial-motion-planner-testutils-dbgsym] +pinocchio: + ubuntu: + focal: [ros-humble-pinocchio] + jammy: [ros-humble-pinocchio] +pinocchio_dbgsym: + ubuntu: + focal: [ros-humble-pinocchio-dbgsym] + jammy: [ros-humble-pinocchio-dbgsym] +plansys2_bringup: + ubuntu: + focal: [ros-humble-plansys2-bringup] + jammy: [ros-humble-plansys2-bringup] +plansys2_bringup_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-bringup-dbgsym] + jammy: [ros-humble-plansys2-bringup-dbgsym] +plansys2_bt_actions: + ubuntu: + focal: [ros-humble-plansys2-bt-actions] + jammy: [ros-humble-plansys2-bt-actions] +plansys2_bt_actions_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-bt-actions-dbgsym] + jammy: [ros-humble-plansys2-bt-actions-dbgsym] +plansys2_core: + ubuntu: + focal: [ros-humble-plansys2-core] + jammy: [ros-humble-plansys2-core] +plansys2_core_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-core-dbgsym] + jammy: [ros-humble-plansys2-core-dbgsym] +plansys2_domain_expert: + ubuntu: + focal: [ros-humble-plansys2-domain-expert] + jammy: [ros-humble-plansys2-domain-expert] +plansys2_domain_expert_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-domain-expert-dbgsym] + jammy: [ros-humble-plansys2-domain-expert-dbgsym] +plansys2_executor: + ubuntu: + focal: [ros-humble-plansys2-executor] + jammy: [ros-humble-plansys2-executor] +plansys2_executor_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-executor-dbgsym] + jammy: [ros-humble-plansys2-executor-dbgsym] +plansys2_lifecycle_manager: + ubuntu: + focal: [ros-humble-plansys2-lifecycle-manager] + jammy: [ros-humble-plansys2-lifecycle-manager] +plansys2_lifecycle_manager_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-lifecycle-manager-dbgsym] + jammy: [ros-humble-plansys2-lifecycle-manager-dbgsym] +plansys2_msgs: + ubuntu: + focal: [ros-humble-plansys2-msgs] + jammy: [ros-humble-plansys2-msgs] +plansys2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-msgs-dbgsym] + jammy: [ros-humble-plansys2-msgs-dbgsym] +plansys2_pddl_parser: + ubuntu: + focal: [ros-humble-plansys2-pddl-parser] + jammy: [ros-humble-plansys2-pddl-parser] +plansys2_pddl_parser_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-pddl-parser-dbgsym] + jammy: [ros-humble-plansys2-pddl-parser-dbgsym] +plansys2_planner: + ubuntu: + focal: [ros-humble-plansys2-planner] + jammy: [ros-humble-plansys2-planner] +plansys2_planner_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-planner-dbgsym] + jammy: [ros-humble-plansys2-planner-dbgsym] +plansys2_popf_plan_solver: + ubuntu: + focal: [ros-humble-plansys2-popf-plan-solver] + jammy: [ros-humble-plansys2-popf-plan-solver] +plansys2_popf_plan_solver_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-popf-plan-solver-dbgsym] + jammy: [ros-humble-plansys2-popf-plan-solver-dbgsym] +plansys2_problem_expert: + ubuntu: + focal: [ros-humble-plansys2-problem-expert] + jammy: [ros-humble-plansys2-problem-expert] +plansys2_problem_expert_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-problem-expert-dbgsym] + jammy: [ros-humble-plansys2-problem-expert-dbgsym] +plansys2_terminal: + ubuntu: + focal: [ros-humble-plansys2-terminal] + jammy: [ros-humble-plansys2-terminal] +plansys2_terminal_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-terminal-dbgsym] + jammy: [ros-humble-plansys2-terminal-dbgsym] +plansys2_tools: + ubuntu: + focal: [ros-humble-plansys2-tools] + jammy: [ros-humble-plansys2-tools] +plansys2_tools_dbgsym: + ubuntu: + focal: [ros-humble-plansys2-tools-dbgsym] + jammy: [ros-humble-plansys2-tools-dbgsym] +play_motion2: + ubuntu: + focal: [ros-humble-play-motion2] + jammy: [ros-humble-play-motion2] +play_motion2_dbgsym: + ubuntu: + focal: [ros-humble-play-motion2-dbgsym] + jammy: [ros-humble-play-motion2-dbgsym] +play_motion2_msgs: + ubuntu: + focal: [ros-humble-play-motion2-msgs] + jammy: [ros-humble-play-motion2-msgs] +play_motion2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-play-motion2-msgs-dbgsym] + jammy: [ros-humble-play-motion2-msgs-dbgsym] +plotjuggler: + ubuntu: + focal: [ros-humble-plotjuggler] + jammy: [ros-humble-plotjuggler] +plotjuggler_dbgsym: + ubuntu: + focal: [ros-humble-plotjuggler-dbgsym] + jammy: [ros-humble-plotjuggler-dbgsym] +plotjuggler_msgs: + ubuntu: + focal: [ros-humble-plotjuggler-msgs] + jammy: [ros-humble-plotjuggler-msgs] +plotjuggler_msgs_dbgsym: + ubuntu: + focal: [ros-humble-plotjuggler-msgs-dbgsym] + jammy: [ros-humble-plotjuggler-msgs-dbgsym] +plotjuggler_ros: + ubuntu: + focal: [ros-humble-plotjuggler-ros] + jammy: [ros-humble-plotjuggler-ros] +plotjuggler_ros_dbgsym: + ubuntu: + focal: [ros-humble-plotjuggler-ros-dbgsym] + jammy: [ros-humble-plotjuggler-ros-dbgsym] +pluginlib: + ubuntu: + focal: [ros-humble-pluginlib] + jammy: [ros-humble-pluginlib] +pmb2_2dnav: + ubuntu: + focal: [ros-humble-pmb2-2dnav] + jammy: [ros-humble-pmb2-2dnav] +pmb2_bringup: + ubuntu: + focal: [ros-humble-pmb2-bringup] + jammy: [ros-humble-pmb2-bringup] +pmb2_controller_configuration: + ubuntu: + focal: [ros-humble-pmb2-controller-configuration] + jammy: [ros-humble-pmb2-controller-configuration] +pmb2_description: + ubuntu: + focal: [ros-humble-pmb2-description] + jammy: [ros-humble-pmb2-description] +pmb2_laser_sensors: + ubuntu: + focal: [ros-humble-pmb2-laser-sensors] + jammy: [ros-humble-pmb2-laser-sensors] +pmb2_maps: + ubuntu: + focal: [ros-humble-pmb2-maps] + jammy: [ros-humble-pmb2-maps] +pmb2_navigation: + ubuntu: + focal: [ros-humble-pmb2-navigation] + jammy: [ros-humble-pmb2-navigation] +pmb2_robot: + ubuntu: + focal: [ros-humble-pmb2-robot] + jammy: [ros-humble-pmb2-robot] +point_cloud_interfaces: + ubuntu: + focal: [ros-humble-point-cloud-interfaces] + jammy: [ros-humble-point-cloud-interfaces] +point_cloud_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-point-cloud-interfaces-dbgsym] + jammy: [ros-humble-point-cloud-interfaces-dbgsym] +point_cloud_msg_wrapper: + ubuntu: + focal: [ros-humble-point-cloud-msg-wrapper] + jammy: [ros-humble-point-cloud-msg-wrapper] +point_cloud_transport: + ubuntu: + focal: [ros-humble-point-cloud-transport] + jammy: [ros-humble-point-cloud-transport] +point_cloud_transport_dbgsym: + ubuntu: + focal: [ros-humble-point-cloud-transport-dbgsym] + jammy: [ros-humble-point-cloud-transport-dbgsym] +point_cloud_transport_py: + ubuntu: + focal: [ros-humble-point-cloud-transport-py] + jammy: [ros-humble-point-cloud-transport-py] +pointcloud_to_laserscan: + ubuntu: + focal: [ros-humble-pointcloud-to-laserscan] + jammy: [ros-humble-pointcloud-to-laserscan] +pointcloud_to_laserscan_dbgsym: + ubuntu: + focal: [ros-humble-pointcloud-to-laserscan-dbgsym] + jammy: [ros-humble-pointcloud-to-laserscan-dbgsym] +polygon_demos: + ubuntu: + focal: [ros-humble-polygon-demos] + jammy: [ros-humble-polygon-demos] +polygon_demos_dbgsym: + ubuntu: + focal: [ros-humble-polygon-demos-dbgsym] + jammy: [ros-humble-polygon-demos-dbgsym] +polygon_msgs: + ubuntu: + focal: [ros-humble-polygon-msgs] + jammy: [ros-humble-polygon-msgs] +polygon_msgs_dbgsym: + ubuntu: + focal: [ros-humble-polygon-msgs-dbgsym] + jammy: [ros-humble-polygon-msgs-dbgsym] +polygon_rviz_plugins: + ubuntu: + focal: [ros-humble-polygon-rviz-plugins] + jammy: [ros-humble-polygon-rviz-plugins] +polygon_rviz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-polygon-rviz-plugins-dbgsym] + jammy: [ros-humble-polygon-rviz-plugins-dbgsym] +polygon_utils: + ubuntu: + focal: [ros-humble-polygon-utils] + jammy: [ros-humble-polygon-utils] +popf: + ubuntu: + focal: [ros-humble-popf] + jammy: [ros-humble-popf] +popf_dbgsym: + ubuntu: + focal: [ros-humble-popf-dbgsym] + jammy: [ros-humble-popf-dbgsym] +position_controllers: + ubuntu: + focal: [ros-humble-position-controllers] + jammy: [ros-humble-position-controllers] +position_controllers_dbgsym: + ubuntu: + focal: [ros-humble-position-controllers-dbgsym] + jammy: [ros-humble-position-controllers-dbgsym] +proxsuite: + ubuntu: + focal: [ros-humble-proxsuite] + jammy: [ros-humble-proxsuite] +py_trees: + ubuntu: + focal: [ros-humble-py-trees] + jammy: [ros-humble-py-trees] +py_trees_js: + ubuntu: + focal: [ros-humble-py-trees-js] + jammy: [ros-humble-py-trees-js] +py_trees_ros: + ubuntu: + focal: [ros-humble-py-trees-ros] + jammy: [ros-humble-py-trees-ros] +py_trees_ros_interfaces: + ubuntu: + focal: [ros-humble-py-trees-ros-interfaces] + jammy: [ros-humble-py-trees-ros-interfaces] +py_trees_ros_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-py-trees-ros-interfaces-dbgsym] + jammy: [ros-humble-py-trees-ros-interfaces-dbgsym] +pybind11_json_vendor: + ubuntu: + focal: [ros-humble-pybind11-json-vendor] + jammy: [ros-humble-pybind11-json-vendor] +pybind11_vendor: + ubuntu: + focal: [ros-humble-pybind11-vendor] + jammy: [ros-humble-pybind11-vendor] +python3-pymupdf: + ubuntu: + focal: [python3-fitz] + jammy: [python3-fitz] +python_cmake_module: + ubuntu: + focal: [ros-humble-python-cmake-module] + jammy: [ros-humble-python-cmake-module] +python_orocos_kdl_vendor: + ubuntu: + focal: [ros-humble-python-orocos-kdl-vendor] + jammy: [ros-humble-python-orocos-kdl-vendor] +python_qt_binding: + ubuntu: + focal: [ros-humble-python-qt-binding] + jammy: [ros-humble-python-qt-binding] +qt_dotgraph: + ubuntu: + focal: [ros-humble-qt-dotgraph] + jammy: [ros-humble-qt-dotgraph] +qt_gui: + ubuntu: + focal: [ros-humble-qt-gui] + jammy: [ros-humble-qt-gui] +qt_gui_app: + ubuntu: + focal: [ros-humble-qt-gui-app] + jammy: [ros-humble-qt-gui-app] +qt_gui_core: + ubuntu: + focal: [ros-humble-qt-gui-core] + jammy: [ros-humble-qt-gui-core] +qt_gui_cpp: + ubuntu: + focal: [ros-humble-qt-gui-cpp] + jammy: [ros-humble-qt-gui-cpp] +qt_gui_cpp_dbgsym: + ubuntu: + focal: [ros-humble-qt-gui-cpp-dbgsym] + jammy: [ros-humble-qt-gui-cpp-dbgsym] +qt_gui_py_common: + ubuntu: + focal: [ros-humble-qt-gui-py-common] + jammy: [ros-humble-qt-gui-py-common] +quality_of_service_demo_cpp: + ubuntu: + focal: [ros-humble-quality-of-service-demo-cpp] + jammy: [ros-humble-quality-of-service-demo-cpp] +quality_of_service_demo_cpp_dbgsym: + ubuntu: + focal: [ros-humble-quality-of-service-demo-cpp-dbgsym] + jammy: [ros-humble-quality-of-service-demo-cpp-dbgsym] +quality_of_service_demo_py: + ubuntu: + focal: [ros-humble-quality-of-service-demo-py] + jammy: [ros-humble-quality-of-service-demo-py] +quaternion_operation: + ubuntu: + focal: [ros-humble-quaternion-operation] + jammy: [ros-humble-quaternion-operation] +quaternion_operation_dbgsym: + ubuntu: + focal: [ros-humble-quaternion-operation-dbgsym] + jammy: [ros-humble-quaternion-operation-dbgsym] +r2r_spl_7: + ubuntu: + focal: [ros-humble-r2r-spl-7] + jammy: [ros-humble-r2r-spl-7] +radar_msgs: + ubuntu: + focal: [ros-humble-radar-msgs] + jammy: [ros-humble-radar-msgs] +radar_msgs_dbgsym: + ubuntu: + focal: [ros-humble-radar-msgs-dbgsym] + jammy: [ros-humble-radar-msgs-dbgsym] +random_numbers: + ubuntu: + focal: [ros-humble-random-numbers] + jammy: [ros-humble-random-numbers] +random_numbers_dbgsym: + ubuntu: + focal: [ros-humble-random-numbers-dbgsym] + jammy: [ros-humble-random-numbers-dbgsym] +raspimouse: + ubuntu: + focal: [ros-humble-raspimouse] + jammy: [ros-humble-raspimouse] +raspimouse_dbgsym: + ubuntu: + focal: [ros-humble-raspimouse-dbgsym] + jammy: [ros-humble-raspimouse-dbgsym] +raspimouse_description: + ubuntu: + focal: [ros-humble-raspimouse-description] + jammy: [ros-humble-raspimouse-description] +raspimouse_msgs: + ubuntu: + focal: [ros-humble-raspimouse-msgs] + jammy: [ros-humble-raspimouse-msgs] +raspimouse_msgs_dbgsym: + ubuntu: + focal: [ros-humble-raspimouse-msgs-dbgsym] + jammy: [ros-humble-raspimouse-msgs-dbgsym] +raspimouse_navigation: + ubuntu: + focal: [ros-humble-raspimouse-navigation] + jammy: [ros-humble-raspimouse-navigation] +raspimouse_ros2_examples: + ubuntu: + focal: [ros-humble-raspimouse-ros2-examples] + jammy: [ros-humble-raspimouse-ros2-examples] +raspimouse_ros2_examples_dbgsym: + ubuntu: + focal: [ros-humble-raspimouse-ros2-examples-dbgsym] + jammy: [ros-humble-raspimouse-ros2-examples-dbgsym] +raspimouse_slam: + ubuntu: + focal: [ros-humble-raspimouse-slam] + jammy: [ros-humble-raspimouse-slam] +raspimouse_slam_navigation: + ubuntu: + focal: [ros-humble-raspimouse-slam-navigation] + jammy: [ros-humble-raspimouse-slam-navigation] +rc_common_msgs: + ubuntu: + focal: [ros-humble-rc-common-msgs] + jammy: [ros-humble-rc-common-msgs] +rc_common_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rc-common-msgs-dbgsym] + jammy: [ros-humble-rc-common-msgs-dbgsym] +rc_dynamics_api: + ubuntu: + focal: [ros-humble-rc-dynamics-api] + jammy: [ros-humble-rc-dynamics-api] +rc_dynamics_api_dbgsym: + ubuntu: + focal: [ros-humble-rc-dynamics-api-dbgsym] + jammy: [ros-humble-rc-dynamics-api-dbgsym] +rc_genicam_api: + ubuntu: + focal: [ros-humble-rc-genicam-api] + jammy: [ros-humble-rc-genicam-api] +rc_genicam_api_dbgsym: + ubuntu: + focal: [ros-humble-rc-genicam-api-dbgsym] + jammy: [ros-humble-rc-genicam-api-dbgsym] +rc_genicam_driver: + ubuntu: + focal: [ros-humble-rc-genicam-driver] + jammy: [ros-humble-rc-genicam-driver] +rc_genicam_driver_dbgsym: + ubuntu: + focal: [ros-humble-rc-genicam-driver-dbgsym] + jammy: [ros-humble-rc-genicam-driver-dbgsym] +rc_reason_clients: + ubuntu: + focal: [ros-humble-rc-reason-clients] + jammy: [ros-humble-rc-reason-clients] +rc_reason_msgs: + ubuntu: + focal: [ros-humble-rc-reason-msgs] + jammy: [ros-humble-rc-reason-msgs] +rc_reason_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rc-reason-msgs-dbgsym] + jammy: [ros-humble-rc-reason-msgs-dbgsym] +rcdiscover: + ubuntu: + focal: [ros-humble-rcdiscover] + jammy: [ros-humble-rcdiscover] +rcdiscover_dbgsym: + ubuntu: + focal: [ros-humble-rcdiscover-dbgsym] + jammy: [ros-humble-rcdiscover-dbgsym] +rcgcd_spl_14: + ubuntu: + focal: [ros-humble-rcgcd-spl-14] + jammy: [ros-humble-rcgcd-spl-14] +rcgcd_spl_14_conversion: + ubuntu: + focal: [ros-humble-rcgcd-spl-14-conversion] + jammy: [ros-humble-rcgcd-spl-14-conversion] +rcgcd_spl_14_dbgsym: + ubuntu: + focal: [ros-humble-rcgcd-spl-14-dbgsym] + jammy: [ros-humble-rcgcd-spl-14-dbgsym] +rcgcrd_spl_4: + ubuntu: + focal: [ros-humble-rcgcrd-spl-4] + jammy: [ros-humble-rcgcrd-spl-4] +rcgcrd_spl_4_conversion: + ubuntu: + focal: [ros-humble-rcgcrd-spl-4-conversion] + jammy: [ros-humble-rcgcrd-spl-4-conversion] +rcgcrd_spl_4_dbgsym: + ubuntu: + focal: [ros-humble-rcgcrd-spl-4-dbgsym] + jammy: [ros-humble-rcgcrd-spl-4-dbgsym] +rcl: + ubuntu: + focal: [ros-humble-rcl] + jammy: [ros-humble-rcl] +rcl_action: + ubuntu: + focal: [ros-humble-rcl-action] + jammy: [ros-humble-rcl-action] +rcl_action_dbgsym: + ubuntu: + focal: [ros-humble-rcl-action-dbgsym] + jammy: [ros-humble-rcl-action-dbgsym] +rcl_dbgsym: + ubuntu: + focal: [ros-humble-rcl-dbgsym] + jammy: [ros-humble-rcl-dbgsym] +rcl_interfaces: + ubuntu: + focal: [ros-humble-rcl-interfaces] + jammy: [ros-humble-rcl-interfaces] +rcl_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-rcl-interfaces-dbgsym] + jammy: [ros-humble-rcl-interfaces-dbgsym] +rcl_lifecycle: + ubuntu: + focal: [ros-humble-rcl-lifecycle] + jammy: [ros-humble-rcl-lifecycle] +rcl_lifecycle_dbgsym: + ubuntu: + focal: [ros-humble-rcl-lifecycle-dbgsym] + jammy: [ros-humble-rcl-lifecycle-dbgsym] +rcl_logging_interface: + ubuntu: + focal: [ros-humble-rcl-logging-interface] + jammy: [ros-humble-rcl-logging-interface] +rcl_logging_interface_dbgsym: + ubuntu: + focal: [ros-humble-rcl-logging-interface-dbgsym] + jammy: [ros-humble-rcl-logging-interface-dbgsym] +rcl_logging_noop: + ubuntu: + focal: [ros-humble-rcl-logging-noop] + jammy: [ros-humble-rcl-logging-noop] +rcl_logging_noop_dbgsym: + ubuntu: + focal: [ros-humble-rcl-logging-noop-dbgsym] + jammy: [ros-humble-rcl-logging-noop-dbgsym] +rcl_logging_spdlog: + ubuntu: + focal: [ros-humble-rcl-logging-spdlog] + jammy: [ros-humble-rcl-logging-spdlog] +rcl_logging_spdlog_dbgsym: + ubuntu: + focal: [ros-humble-rcl-logging-spdlog-dbgsym] + jammy: [ros-humble-rcl-logging-spdlog-dbgsym] +rcl_yaml_param_parser: + ubuntu: + focal: [ros-humble-rcl-yaml-param-parser] + jammy: [ros-humble-rcl-yaml-param-parser] +rcl_yaml_param_parser_dbgsym: + ubuntu: + focal: [ros-humble-rcl-yaml-param-parser-dbgsym] + jammy: [ros-humble-rcl-yaml-param-parser-dbgsym] +rclc: + ubuntu: + focal: [ros-humble-rclc] + jammy: [ros-humble-rclc] +rclc_dbgsym: + ubuntu: + focal: [ros-humble-rclc-dbgsym] + jammy: [ros-humble-rclc-dbgsym] +rclc_examples: + ubuntu: + focal: [ros-humble-rclc-examples] + jammy: [ros-humble-rclc-examples] +rclc_examples_dbgsym: + ubuntu: + focal: [ros-humble-rclc-examples-dbgsym] + jammy: [ros-humble-rclc-examples-dbgsym] +rclc_lifecycle: + ubuntu: + focal: [ros-humble-rclc-lifecycle] + jammy: [ros-humble-rclc-lifecycle] +rclc_lifecycle_dbgsym: + ubuntu: + focal: [ros-humble-rclc-lifecycle-dbgsym] + jammy: [ros-humble-rclc-lifecycle-dbgsym] +rclc_parameter: + ubuntu: + focal: [ros-humble-rclc-parameter] + jammy: [ros-humble-rclc-parameter] +rclcpp: + ubuntu: + focal: [ros-humble-rclcpp] + jammy: [ros-humble-rclcpp] +rclcpp_action: + ubuntu: + focal: [ros-humble-rclcpp-action] + jammy: [ros-humble-rclcpp-action] +rclcpp_action_dbgsym: + ubuntu: + focal: [ros-humble-rclcpp-action-dbgsym] + jammy: [ros-humble-rclcpp-action-dbgsym] +rclcpp_cascade_lifecycle: + ubuntu: + focal: [ros-humble-rclcpp-cascade-lifecycle] + jammy: [ros-humble-rclcpp-cascade-lifecycle] +rclcpp_cascade_lifecycle_dbgsym: + ubuntu: + focal: [ros-humble-rclcpp-cascade-lifecycle-dbgsym] + jammy: [ros-humble-rclcpp-cascade-lifecycle-dbgsym] +rclcpp_components: + ubuntu: + focal: [ros-humble-rclcpp-components] + jammy: [ros-humble-rclcpp-components] +rclcpp_components_dbgsym: + ubuntu: + focal: [ros-humble-rclcpp-components-dbgsym] + jammy: [ros-humble-rclcpp-components-dbgsym] +rclcpp_dbgsym: + ubuntu: + focal: [ros-humble-rclcpp-dbgsym] + jammy: [ros-humble-rclcpp-dbgsym] +rclcpp_lifecycle: + ubuntu: + focal: [ros-humble-rclcpp-lifecycle] + jammy: [ros-humble-rclcpp-lifecycle] +rclcpp_lifecycle_dbgsym: + ubuntu: + focal: [ros-humble-rclcpp-lifecycle-dbgsym] + jammy: [ros-humble-rclcpp-lifecycle-dbgsym] +rclpy: + ubuntu: + focal: [ros-humble-rclpy] + jammy: [ros-humble-rclpy] +rclpy_message_converter: + ubuntu: + focal: [ros-humble-rclpy-message-converter] + jammy: [ros-humble-rclpy-message-converter] +rclpy_message_converter_msgs: + ubuntu: + focal: [ros-humble-rclpy-message-converter-msgs] + jammy: [ros-humble-rclpy-message-converter-msgs] +rclpy_message_converter_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rclpy-message-converter-msgs-dbgsym] + jammy: [ros-humble-rclpy-message-converter-msgs-dbgsym] +rcpputils: + ubuntu: + focal: [ros-humble-rcpputils] + jammy: [ros-humble-rcpputils] +rcpputils_dbgsym: + ubuntu: + focal: [ros-humble-rcpputils-dbgsym] + jammy: [ros-humble-rcpputils-dbgsym] +rcss3d_agent: + ubuntu: + focal: [ros-humble-rcss3d-agent] + jammy: [ros-humble-rcss3d-agent] +rcss3d_agent_basic: + ubuntu: + focal: [ros-humble-rcss3d-agent-basic] + jammy: [ros-humble-rcss3d-agent-basic] +rcss3d_agent_basic_dbgsym: + ubuntu: + focal: [ros-humble-rcss3d-agent-basic-dbgsym] + jammy: [ros-humble-rcss3d-agent-basic-dbgsym] +rcss3d_agent_dbgsym: + ubuntu: + focal: [ros-humble-rcss3d-agent-dbgsym] + jammy: [ros-humble-rcss3d-agent-dbgsym] +rcss3d_agent_msgs: + ubuntu: + focal: [ros-humble-rcss3d-agent-msgs] + jammy: [ros-humble-rcss3d-agent-msgs] +rcss3d_agent_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rcss3d-agent-msgs-dbgsym] + jammy: [ros-humble-rcss3d-agent-msgs-dbgsym] +rcutils: + ubuntu: + focal: [ros-humble-rcutils] + jammy: [ros-humble-rcutils] +rcutils_dbgsym: + ubuntu: + focal: [ros-humble-rcutils-dbgsym] + jammy: [ros-humble-rcutils-dbgsym] +reach: + ubuntu: + focal: [ros-humble-reach] + jammy: [ros-humble-reach] +reach_dbgsym: + ubuntu: + focal: [ros-humble-reach-dbgsym] + jammy: [ros-humble-reach-dbgsym] +reach_ros: + ubuntu: + focal: [ros-humble-reach-ros] + jammy: [ros-humble-reach-ros] +reach_ros_dbgsym: + ubuntu: + focal: [ros-humble-reach-ros-dbgsym] + jammy: [ros-humble-reach-ros-dbgsym] +realsense2_camera: + ubuntu: + focal: [ros-humble-realsense2-camera] + jammy: [ros-humble-realsense2-camera] +realsense2_camera_dbgsym: + ubuntu: + focal: [ros-humble-realsense2-camera-dbgsym] + jammy: [ros-humble-realsense2-camera-dbgsym] +realsense2_camera_msgs: + ubuntu: + focal: [ros-humble-realsense2-camera-msgs] + jammy: [ros-humble-realsense2-camera-msgs] +realsense2_camera_msgs_dbgsym: + ubuntu: + focal: [ros-humble-realsense2-camera-msgs-dbgsym] + jammy: [ros-humble-realsense2-camera-msgs-dbgsym] +realsense2_description: + ubuntu: + focal: [ros-humble-realsense2-description] + jammy: [ros-humble-realsense2-description] +realsense_splitter: + ubuntu: + focal: [ros-humble-realsense-splitter] + jammy: [ros-humble-realsense-splitter] +realtime_tools: + ubuntu: + focal: [ros-humble-realtime-tools] + jammy: [ros-humble-realtime-tools] +realtime_tools_dbgsym: + ubuntu: + focal: [ros-humble-realtime-tools-dbgsym] + jammy: [ros-humble-realtime-tools-dbgsym] +resource_retriever: + ubuntu: + focal: [ros-humble-resource-retriever] + jammy: [ros-humble-resource-retriever] +resource_retriever_dbgsym: + ubuntu: + focal: [ros-humble-resource-retriever-dbgsym] + jammy: [ros-humble-resource-retriever-dbgsym] +rig_reconfigure: + ubuntu: + focal: [ros-humble-rig-reconfigure] + jammy: [ros-humble-rig-reconfigure] +rig_reconfigure_dbgsym: + ubuntu: + focal: [ros-humble-rig-reconfigure-dbgsym] + jammy: [ros-humble-rig-reconfigure-dbgsym] +rmf_api_msgs: + ubuntu: + focal: [ros-humble-rmf-api-msgs] + jammy: [ros-humble-rmf-api-msgs] +rmf_battery: + ubuntu: + focal: [ros-humble-rmf-battery] + jammy: [ros-humble-rmf-battery] +rmf_battery_dbgsym: + ubuntu: + focal: [ros-humble-rmf-battery-dbgsym] + jammy: [ros-humble-rmf-battery-dbgsym] +rmf_building_map_msgs: + ubuntu: + focal: [ros-humble-rmf-building-map-msgs] + jammy: [ros-humble-rmf-building-map-msgs] +rmf_building_map_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-building-map-msgs-dbgsym] + jammy: [ros-humble-rmf-building-map-msgs-dbgsym] +rmf_building_map_tools: + ubuntu: + focal: [ros-humble-rmf-building-map-tools] + jammy: [ros-humble-rmf-building-map-tools] +rmf_building_sim_common: + ubuntu: + focal: [ros-humble-rmf-building-sim-common] + jammy: [ros-humble-rmf-building-sim-common] +rmf_building_sim_common_dbgsym: + ubuntu: + focal: [ros-humble-rmf-building-sim-common-dbgsym] + jammy: [ros-humble-rmf-building-sim-common-dbgsym] +rmf_building_sim_gz_plugins: + ubuntu: + focal: [ros-humble-rmf-building-sim-gz-plugins] + jammy: [ros-humble-rmf-building-sim-gz-plugins] +rmf_building_sim_gz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rmf-building-sim-gz-plugins-dbgsym] + jammy: [ros-humble-rmf-building-sim-gz-plugins-dbgsym] +rmf_charger_msgs: + ubuntu: + focal: [ros-humble-rmf-charger-msgs] + jammy: [ros-humble-rmf-charger-msgs] +rmf_charger_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-charger-msgs-dbgsym] + jammy: [ros-humble-rmf-charger-msgs-dbgsym] +rmf_cmake_uncrustify: + ubuntu: + focal: [ros-humble-rmf-cmake-uncrustify] + jammy: [ros-humble-rmf-cmake-uncrustify] +rmf_dispenser_msgs: + ubuntu: + focal: [ros-humble-rmf-dispenser-msgs] + jammy: [ros-humble-rmf-dispenser-msgs] +rmf_dispenser_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-dispenser-msgs-dbgsym] + jammy: [ros-humble-rmf-dispenser-msgs-dbgsym] +rmf_door_msgs: + ubuntu: + focal: [ros-humble-rmf-door-msgs] + jammy: [ros-humble-rmf-door-msgs] +rmf_door_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-door-msgs-dbgsym] + jammy: [ros-humble-rmf-door-msgs-dbgsym] +rmf_fleet_adapter: + ubuntu: + focal: [ros-humble-rmf-fleet-adapter] + jammy: [ros-humble-rmf-fleet-adapter] +rmf_fleet_adapter_dbgsym: + ubuntu: + focal: [ros-humble-rmf-fleet-adapter-dbgsym] + jammy: [ros-humble-rmf-fleet-adapter-dbgsym] +rmf_fleet_adapter_python: + ubuntu: + focal: [ros-humble-rmf-fleet-adapter-python] + jammy: [ros-humble-rmf-fleet-adapter-python] +rmf_fleet_msgs: + ubuntu: + focal: [ros-humble-rmf-fleet-msgs] + jammy: [ros-humble-rmf-fleet-msgs] +rmf_fleet_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-fleet-msgs-dbgsym] + jammy: [ros-humble-rmf-fleet-msgs-dbgsym] +rmf_ingestor_msgs: + ubuntu: + focal: [ros-humble-rmf-ingestor-msgs] + jammy: [ros-humble-rmf-ingestor-msgs] +rmf_ingestor_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-ingestor-msgs-dbgsym] + jammy: [ros-humble-rmf-ingestor-msgs-dbgsym] +rmf_lift_msgs: + ubuntu: + focal: [ros-humble-rmf-lift-msgs] + jammy: [ros-humble-rmf-lift-msgs] +rmf_lift_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-lift-msgs-dbgsym] + jammy: [ros-humble-rmf-lift-msgs-dbgsym] +rmf_obstacle_msgs: + ubuntu: + focal: [ros-humble-rmf-obstacle-msgs] + jammy: [ros-humble-rmf-obstacle-msgs] +rmf_obstacle_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-obstacle-msgs-dbgsym] + jammy: [ros-humble-rmf-obstacle-msgs-dbgsym] +rmf_robot_sim_common: + ubuntu: + focal: [ros-humble-rmf-robot-sim-common] + jammy: [ros-humble-rmf-robot-sim-common] +rmf_robot_sim_common_dbgsym: + ubuntu: + focal: [ros-humble-rmf-robot-sim-common-dbgsym] + jammy: [ros-humble-rmf-robot-sim-common-dbgsym] +rmf_robot_sim_gz_plugins: + ubuntu: + focal: [ros-humble-rmf-robot-sim-gz-plugins] + jammy: [ros-humble-rmf-robot-sim-gz-plugins] +rmf_robot_sim_gz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rmf-robot-sim-gz-plugins-dbgsym] + jammy: [ros-humble-rmf-robot-sim-gz-plugins-dbgsym] +rmf_scheduler_msgs: + ubuntu: + focal: [ros-humble-rmf-scheduler-msgs] + jammy: [ros-humble-rmf-scheduler-msgs] +rmf_scheduler_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-scheduler-msgs-dbgsym] + jammy: [ros-humble-rmf-scheduler-msgs-dbgsym] +rmf_site_map_msgs: + ubuntu: + focal: [ros-humble-rmf-site-map-msgs] + jammy: [ros-humble-rmf-site-map-msgs] +rmf_site_map_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-site-map-msgs-dbgsym] + jammy: [ros-humble-rmf-site-map-msgs-dbgsym] +rmf_task: + ubuntu: + focal: [ros-humble-rmf-task] + jammy: [ros-humble-rmf-task] +rmf_task_dbgsym: + ubuntu: + focal: [ros-humble-rmf-task-dbgsym] + jammy: [ros-humble-rmf-task-dbgsym] +rmf_task_msgs: + ubuntu: + focal: [ros-humble-rmf-task-msgs] + jammy: [ros-humble-rmf-task-msgs] +rmf_task_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-task-msgs-dbgsym] + jammy: [ros-humble-rmf-task-msgs-dbgsym] +rmf_task_ros2: + ubuntu: + focal: [ros-humble-rmf-task-ros2] + jammy: [ros-humble-rmf-task-ros2] +rmf_task_ros2_dbgsym: + ubuntu: + focal: [ros-humble-rmf-task-ros2-dbgsym] + jammy: [ros-humble-rmf-task-ros2-dbgsym] +rmf_task_sequence: + ubuntu: + focal: [ros-humble-rmf-task-sequence] + jammy: [ros-humble-rmf-task-sequence] +rmf_task_sequence_dbgsym: + ubuntu: + focal: [ros-humble-rmf-task-sequence-dbgsym] + jammy: [ros-humble-rmf-task-sequence-dbgsym] +rmf_traffic: + ubuntu: + focal: [ros-humble-rmf-traffic] + jammy: [ros-humble-rmf-traffic] +rmf_traffic_dbgsym: + ubuntu: + focal: [ros-humble-rmf-traffic-dbgsym] + jammy: [ros-humble-rmf-traffic-dbgsym] +rmf_traffic_editor: + ubuntu: + focal: [ros-humble-rmf-traffic-editor] + jammy: [ros-humble-rmf-traffic-editor] +rmf_traffic_editor_assets: + ubuntu: + focal: [ros-humble-rmf-traffic-editor-assets] + jammy: [ros-humble-rmf-traffic-editor-assets] +rmf_traffic_editor_dbgsym: + ubuntu: + focal: [ros-humble-rmf-traffic-editor-dbgsym] + jammy: [ros-humble-rmf-traffic-editor-dbgsym] +rmf_traffic_editor_test_maps: + ubuntu: + focal: [ros-humble-rmf-traffic-editor-test-maps] + jammy: [ros-humble-rmf-traffic-editor-test-maps] +rmf_traffic_examples: + ubuntu: + focal: [ros-humble-rmf-traffic-examples] + jammy: [ros-humble-rmf-traffic-examples] +rmf_traffic_examples_dbgsym: + ubuntu: + focal: [ros-humble-rmf-traffic-examples-dbgsym] + jammy: [ros-humble-rmf-traffic-examples-dbgsym] +rmf_traffic_msgs: + ubuntu: + focal: [ros-humble-rmf-traffic-msgs] + jammy: [ros-humble-rmf-traffic-msgs] +rmf_traffic_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-traffic-msgs-dbgsym] + jammy: [ros-humble-rmf-traffic-msgs-dbgsym] +rmf_traffic_ros2: + ubuntu: + focal: [ros-humble-rmf-traffic-ros2] + jammy: [ros-humble-rmf-traffic-ros2] +rmf_traffic_ros2_dbgsym: + ubuntu: + focal: [ros-humble-rmf-traffic-ros2-dbgsym] + jammy: [ros-humble-rmf-traffic-ros2-dbgsym] +rmf_utils: + ubuntu: + focal: [ros-humble-rmf-utils] + jammy: [ros-humble-rmf-utils] +rmf_utils_dbgsym: + ubuntu: + focal: [ros-humble-rmf-utils-dbgsym] + jammy: [ros-humble-rmf-utils-dbgsym] +rmf_visualization: + ubuntu: + focal: [ros-humble-rmf-visualization] + jammy: [ros-humble-rmf-visualization] +rmf_visualization_building_systems: + ubuntu: + focal: [ros-humble-rmf-visualization-building-systems] + jammy: [ros-humble-rmf-visualization-building-systems] +rmf_visualization_fleet_states: + ubuntu: + focal: [ros-humble-rmf-visualization-fleet-states] + jammy: [ros-humble-rmf-visualization-fleet-states] +rmf_visualization_fleet_states_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-fleet-states-dbgsym] + jammy: [ros-humble-rmf-visualization-fleet-states-dbgsym] +rmf_visualization_floorplans: + ubuntu: + focal: [ros-humble-rmf-visualization-floorplans] + jammy: [ros-humble-rmf-visualization-floorplans] +rmf_visualization_floorplans_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-floorplans-dbgsym] + jammy: [ros-humble-rmf-visualization-floorplans-dbgsym] +rmf_visualization_msgs: + ubuntu: + focal: [ros-humble-rmf-visualization-msgs] + jammy: [ros-humble-rmf-visualization-msgs] +rmf_visualization_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-msgs-dbgsym] + jammy: [ros-humble-rmf-visualization-msgs-dbgsym] +rmf_visualization_navgraphs: + ubuntu: + focal: [ros-humble-rmf-visualization-navgraphs] + jammy: [ros-humble-rmf-visualization-navgraphs] +rmf_visualization_navgraphs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-navgraphs-dbgsym] + jammy: [ros-humble-rmf-visualization-navgraphs-dbgsym] +rmf_visualization_obstacles: + ubuntu: + focal: [ros-humble-rmf-visualization-obstacles] + jammy: [ros-humble-rmf-visualization-obstacles] +rmf_visualization_obstacles_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-obstacles-dbgsym] + jammy: [ros-humble-rmf-visualization-obstacles-dbgsym] +rmf_visualization_rviz2_plugins: + ubuntu: + focal: [ros-humble-rmf-visualization-rviz2-plugins] + jammy: [ros-humble-rmf-visualization-rviz2-plugins] +rmf_visualization_rviz2_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-rviz2-plugins-dbgsym] + jammy: [ros-humble-rmf-visualization-rviz2-plugins-dbgsym] +rmf_visualization_schedule: + ubuntu: + focal: [ros-humble-rmf-visualization-schedule] + jammy: [ros-humble-rmf-visualization-schedule] +rmf_visualization_schedule_dbgsym: + ubuntu: + focal: [ros-humble-rmf-visualization-schedule-dbgsym] + jammy: [ros-humble-rmf-visualization-schedule-dbgsym] +rmf_websocket: + ubuntu: + focal: [ros-humble-rmf-websocket] + jammy: [ros-humble-rmf-websocket] +rmf_websocket_dbgsym: + ubuntu: + focal: [ros-humble-rmf-websocket-dbgsym] + jammy: [ros-humble-rmf-websocket-dbgsym] +rmf_workcell_msgs: + ubuntu: + focal: [ros-humble-rmf-workcell-msgs] + jammy: [ros-humble-rmf-workcell-msgs] +rmf_workcell_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rmf-workcell-msgs-dbgsym] + jammy: [ros-humble-rmf-workcell-msgs-dbgsym] +rmw: + ubuntu: + focal: [ros-humble-rmw] + jammy: [ros-humble-rmw] +rmw_connextdds: + ubuntu: + focal: [ros-humble-rmw-connextdds] + jammy: [ros-humble-rmw-connextdds] +rmw_connextdds_common: + ubuntu: + focal: [ros-humble-rmw-connextdds-common] + jammy: [ros-humble-rmw-connextdds-common] +rmw_connextdds_common_dbgsym: + ubuntu: + focal: [ros-humble-rmw-connextdds-common-dbgsym] + jammy: [ros-humble-rmw-connextdds-common-dbgsym] +rmw_connextdds_dbgsym: + ubuntu: + focal: [ros-humble-rmw-connextdds-dbgsym] + jammy: [ros-humble-rmw-connextdds-dbgsym] +rmw_cyclonedds_cpp: + ubuntu: + focal: [ros-humble-rmw-cyclonedds-cpp] + jammy: [ros-humble-rmw-cyclonedds-cpp] +rmw_cyclonedds_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rmw-cyclonedds-cpp-dbgsym] + jammy: [ros-humble-rmw-cyclonedds-cpp-dbgsym] +rmw_dbgsym: + ubuntu: + focal: [ros-humble-rmw-dbgsym] + jammy: [ros-humble-rmw-dbgsym] +rmw_dds_common: + ubuntu: + focal: [ros-humble-rmw-dds-common] + jammy: [ros-humble-rmw-dds-common] +rmw_dds_common_dbgsym: + ubuntu: + focal: [ros-humble-rmw-dds-common-dbgsym] + jammy: [ros-humble-rmw-dds-common-dbgsym] +rmw_fastrtps_cpp: + ubuntu: + focal: [ros-humble-rmw-fastrtps-cpp] + jammy: [ros-humble-rmw-fastrtps-cpp] +rmw_fastrtps_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rmw-fastrtps-cpp-dbgsym] + jammy: [ros-humble-rmw-fastrtps-cpp-dbgsym] +rmw_fastrtps_dynamic_cpp: + ubuntu: + focal: [ros-humble-rmw-fastrtps-dynamic-cpp] + jammy: [ros-humble-rmw-fastrtps-dynamic-cpp] +rmw_fastrtps_dynamic_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rmw-fastrtps-dynamic-cpp-dbgsym] + jammy: [ros-humble-rmw-fastrtps-dynamic-cpp-dbgsym] +rmw_fastrtps_shared_cpp: + ubuntu: + focal: [ros-humble-rmw-fastrtps-shared-cpp] + jammy: [ros-humble-rmw-fastrtps-shared-cpp] +rmw_fastrtps_shared_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rmw-fastrtps-shared-cpp-dbgsym] + jammy: [ros-humble-rmw-fastrtps-shared-cpp-dbgsym] +rmw_implementation: + ubuntu: + focal: [ros-humble-rmw-implementation] + jammy: [ros-humble-rmw-implementation] +rmw_implementation_cmake: + ubuntu: + focal: [ros-humble-rmw-implementation-cmake] + jammy: [ros-humble-rmw-implementation-cmake] +rmw_implementation_dbgsym: + ubuntu: + focal: [ros-humble-rmw-implementation-dbgsym] + jammy: [ros-humble-rmw-implementation-dbgsym] +robot_calibration: + ubuntu: + focal: [ros-humble-robot-calibration] + jammy: [ros-humble-robot-calibration] +robot_calibration_dbgsym: + ubuntu: + focal: [ros-humble-robot-calibration-dbgsym] + jammy: [ros-humble-robot-calibration-dbgsym] +robot_calibration_msgs: + ubuntu: + focal: [ros-humble-robot-calibration-msgs] + jammy: [ros-humble-robot-calibration-msgs] +robot_calibration_msgs_dbgsym: + ubuntu: + focal: [ros-humble-robot-calibration-msgs-dbgsym] + jammy: [ros-humble-robot-calibration-msgs-dbgsym] +robot_controllers: + ubuntu: + focal: [ros-humble-robot-controllers] + jammy: [ros-humble-robot-controllers] +robot_controllers_dbgsym: + ubuntu: + focal: [ros-humble-robot-controllers-dbgsym] + jammy: [ros-humble-robot-controllers-dbgsym] +robot_controllers_interface: + ubuntu: + focal: [ros-humble-robot-controllers-interface] + jammy: [ros-humble-robot-controllers-interface] +robot_controllers_interface_dbgsym: + ubuntu: + focal: [ros-humble-robot-controllers-interface-dbgsym] + jammy: [ros-humble-robot-controllers-interface-dbgsym] +robot_controllers_msgs: + ubuntu: + focal: [ros-humble-robot-controllers-msgs] + jammy: [ros-humble-robot-controllers-msgs] +robot_controllers_msgs_dbgsym: + ubuntu: + focal: [ros-humble-robot-controllers-msgs-dbgsym] + jammy: [ros-humble-robot-controllers-msgs-dbgsym] +robot_localization: + ubuntu: + focal: [ros-humble-robot-localization] + jammy: [ros-humble-robot-localization] +robot_localization_dbgsym: + ubuntu: + focal: [ros-humble-robot-localization-dbgsym] + jammy: [ros-humble-robot-localization-dbgsym] +robot_state_publisher: + ubuntu: + focal: [ros-humble-robot-state-publisher] + jammy: [ros-humble-robot-state-publisher] +robot_state_publisher_dbgsym: + ubuntu: + focal: [ros-humble-robot-state-publisher-dbgsym] + jammy: [ros-humble-robot-state-publisher-dbgsym] +robot_upstart: + ubuntu: + focal: [ros-humble-robot-upstart] + jammy: [ros-humble-robot-upstart] +robotiq_controllers: + ubuntu: + focal: [ros-humble-robotiq-controllers] + jammy: [ros-humble-robotiq-controllers] +robotiq_controllers_dbgsym: + ubuntu: + focal: [ros-humble-robotiq-controllers-dbgsym] + jammy: [ros-humble-robotiq-controllers-dbgsym] +robotiq_description: + ubuntu: + focal: [ros-humble-robotiq-description] + jammy: [ros-humble-robotiq-description] +robotraconteur: + ubuntu: + focal: [ros-humble-robotraconteur] + jammy: [ros-humble-robotraconteur] +robotraconteur_dbgsym: + ubuntu: + focal: [ros-humble-robotraconteur-dbgsym] + jammy: [ros-humble-robotraconteur-dbgsym] +ros2_benchmark: + ubuntu: + focal: [ros-humble-ros2-benchmark] + jammy: [ros-humble-ros2-benchmark] +ros2_benchmark_interfaces: + ubuntu: + focal: [ros-humble-ros2-benchmark-interfaces] + jammy: [ros-humble-ros2-benchmark-interfaces] +ros2_benchmark_msgs: + ubuntu: + focal: [ros-noetic-ros2-benchmark-msgs] + jammy: [ros-noetic-ros2-benchmark-msgs] +ros2_control: + ubuntu: + focal: [ros-humble-ros2-control] + jammy: [ros-humble-ros2-control] +ros2_control_test_assets: + ubuntu: + focal: [ros-humble-ros2-control-test-assets] + jammy: [ros-humble-ros2-control-test-assets] +ros2_controllers: + ubuntu: + focal: [ros-humble-ros2-controllers] + jammy: [ros-humble-ros2-controllers] +ros2_controllers_test_nodes: + ubuntu: + focal: [ros-humble-ros2-controllers-test-nodes] + jammy: [ros-humble-ros2-controllers-test-nodes] +ros2_h264_encoder: + ubuntu: + focal: [ros-humble-ros2-h264-encoder] + jammy: [ros-humble-ros2-h264-encoder] +ros2_socketcan: + ubuntu: + focal: [ros-humble-ros2-socketcan] + jammy: [ros-humble-ros2-socketcan] +ros2_socketcan_dbgsym: + ubuntu: + focal: [ros-humble-ros2-socketcan-dbgsym] + jammy: [ros-humble-ros2-socketcan-dbgsym] +ros2acceleration: + ubuntu: + focal: [ros-humble-ros2acceleration] + jammy: [ros-humble-ros2acceleration] +ros2action: + ubuntu: + focal: [ros-humble-ros2action] + jammy: [ros-humble-ros2action] +ros2bag: + ubuntu: + focal: [ros-humble-ros2bag] + jammy: [ros-humble-ros2bag] +ros2bag_tools: + ubuntu: + focal: [ros-humble-ros2bag-tools] + jammy: [ros-humble-ros2bag-tools] +ros2cli: + ubuntu: + focal: [ros-humble-ros2cli] + jammy: [ros-humble-ros2cli] +ros2cli_common_extensions: + ubuntu: + focal: [ros-humble-ros2cli-common-extensions] + jammy: [ros-humble-ros2cli-common-extensions] +ros2cli_test_interfaces: + ubuntu: + focal: [ros-humble-ros2cli-test-interfaces] + jammy: [ros-humble-ros2cli-test-interfaces] +ros2cli_test_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-ros2cli-test-interfaces-dbgsym] + jammy: [ros-humble-ros2cli-test-interfaces-dbgsym] +ros2component: + ubuntu: + focal: [ros-humble-ros2component] + jammy: [ros-humble-ros2component] +ros2controlcli: + ubuntu: + focal: [ros-humble-ros2controlcli] + jammy: [ros-humble-ros2controlcli] +ros2doctor: + ubuntu: + focal: [ros-humble-ros2doctor] + jammy: [ros-humble-ros2doctor] +ros2interface: + ubuntu: + focal: [ros-humble-ros2interface] + jammy: [ros-humble-ros2interface] +ros2launch: + ubuntu: + focal: [ros-humble-ros2launch] + jammy: [ros-humble-ros2launch] +ros2launch_security: + ubuntu: + focal: [ros-humble-ros2launch-security] + jammy: [ros-humble-ros2launch-security] +ros2launch_security_examples: + ubuntu: + focal: [ros-humble-ros2launch-security-examples] + jammy: [ros-humble-ros2launch-security-examples] +ros2launch_security_examples_dbgsym: + ubuntu: + focal: [ros-humble-ros2launch-security-examples-dbgsym] + jammy: [ros-humble-ros2launch-security-examples-dbgsym] +ros2lifecycle: + ubuntu: + focal: [ros-humble-ros2lifecycle] + jammy: [ros-humble-ros2lifecycle] +ros2lifecycle_test_fixtures: + ubuntu: + focal: [ros-humble-ros2lifecycle-test-fixtures] + jammy: [ros-humble-ros2lifecycle-test-fixtures] +ros2lifecycle_test_fixtures_dbgsym: + ubuntu: + focal: [ros-humble-ros2lifecycle-test-fixtures-dbgsym] + jammy: [ros-humble-ros2lifecycle-test-fixtures-dbgsym] +ros2multicast: + ubuntu: + focal: [ros-humble-ros2multicast] + jammy: [ros-humble-ros2multicast] +ros2node: + ubuntu: + focal: [ros-humble-ros2node] + jammy: [ros-humble-ros2node] +ros2nodl: + ubuntu: + focal: [ros-humble-ros2nodl] + jammy: [ros-humble-ros2nodl] +ros2param: + ubuntu: + focal: [ros-humble-ros2param] + jammy: [ros-humble-ros2param] +ros2pkg: + ubuntu: + focal: [ros-humble-ros2pkg] + jammy: [ros-humble-ros2pkg] +ros2run: + ubuntu: + focal: [ros-humble-ros2run] + jammy: [ros-humble-ros2run] +ros2service: + ubuntu: + focal: [ros-humble-ros2service] + jammy: [ros-humble-ros2service] +ros2test: + ubuntu: + focal: [ros-humble-ros2test] + jammy: [ros-humble-ros2test] +ros2topic: + ubuntu: + focal: [ros-humble-ros2topic] + jammy: [ros-humble-ros2topic] +ros2trace: + ubuntu: + focal: [ros-humble-ros2trace] + jammy: [ros-humble-ros2trace] +ros2trace_analysis: + ubuntu: + focal: [ros-humble-ros2trace-analysis] + jammy: [ros-humble-ros2trace-analysis] +ros_base: + ubuntu: + focal: [ros-humble-ros-base] + jammy: [ros-humble-ros-base] +ros_core: + ubuntu: + focal: [ros-humble-ros-core] + jammy: [ros-humble-ros-core] +ros_environment: + ubuntu: + focal: [ros-humble-ros-environment] + jammy: [ros-humble-ros-environment] +ros_gz: + ubuntu: + focal: [ros-humble-ros-gz] + jammy: [ros-humble-ros-gz] +ros_gz_bridge: + ubuntu: + focal: [ros-humble-ros-gz-bridge] + jammy: [ros-humble-ros-gz-bridge] +ros_gz_bridge_dbgsym: + ubuntu: + focal: [ros-humble-ros-gz-bridge-dbgsym] + jammy: [ros-humble-ros-gz-bridge-dbgsym] +ros_gz_image: + ubuntu: + focal: [ros-humble-ros-gz-image] + jammy: [ros-humble-ros-gz-image] +ros_gz_image_dbgsym: + ubuntu: + focal: [ros-humble-ros-gz-image-dbgsym] + jammy: [ros-humble-ros-gz-image-dbgsym] +ros_gz_interfaces: + ubuntu: + focal: [ros-humble-ros-gz-interfaces] + jammy: [ros-humble-ros-gz-interfaces] +ros_gz_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-ros-gz-interfaces-dbgsym] + jammy: [ros-humble-ros-gz-interfaces-dbgsym] +ros_gz_sim: + ubuntu: + focal: [ros-humble-ros-gz-sim] + jammy: [ros-humble-ros-gz-sim] +ros_gz_sim_dbgsym: + ubuntu: + focal: [ros-humble-ros-gz-sim-dbgsym] + jammy: [ros-humble-ros-gz-sim-dbgsym] +ros_gz_sim_demos: + ubuntu: + focal: [ros-humble-ros-gz-sim-demos] + jammy: [ros-humble-ros-gz-sim-demos] +ros_ign: + ubuntu: + focal: [ros-humble-ros-ign] + jammy: [ros-humble-ros-ign] +ros_ign_bridge: + ubuntu: + focal: [ros-humble-ros-ign-bridge] + jammy: [ros-humble-ros-ign-bridge] +ros_ign_bridge_dbgsym: + ubuntu: + focal: [ros-humble-ros-ign-bridge-dbgsym] + jammy: [ros-humble-ros-ign-bridge-dbgsym] +ros_ign_gazebo: + ubuntu: + focal: [ros-humble-ros-ign-gazebo] + jammy: [ros-humble-ros-ign-gazebo] +ros_ign_gazebo_dbgsym: + ubuntu: + focal: [ros-humble-ros-ign-gazebo-dbgsym] + jammy: [ros-humble-ros-ign-gazebo-dbgsym] +ros_ign_gazebo_demos: + ubuntu: + focal: [ros-humble-ros-ign-gazebo-demos] + jammy: [ros-humble-ros-ign-gazebo-demos] +ros_ign_image: + ubuntu: + focal: [ros-humble-ros-ign-image] + jammy: [ros-humble-ros-ign-image] +ros_ign_image_dbgsym: + ubuntu: + focal: [ros-humble-ros-ign-image-dbgsym] + jammy: [ros-humble-ros-ign-image-dbgsym] +ros_ign_interfaces: + ubuntu: + focal: [ros-humble-ros-ign-interfaces] + jammy: [ros-humble-ros-ign-interfaces] +ros_ign_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-ros-ign-interfaces-dbgsym] + jammy: [ros-humble-ros-ign-interfaces-dbgsym] +ros_image_to_qimage: + ubuntu: + focal: [ros-humble-ros-image-to-qimage] + jammy: [ros-humble-ros-image-to-qimage] +ros_industrial_cmake_boilerplate: + ubuntu: + focal: [ros-humble-ros-industrial-cmake-boilerplate] + jammy: [ros-humble-ros-industrial-cmake-boilerplate] +ros_testing: + ubuntu: + focal: [ros-humble-ros-testing] + jammy: [ros-humble-ros-testing] +ros_workspace: + ubuntu: + focal: [ros-humble-ros-workspace] + jammy: [ros-humble-ros-workspace] +rosapi: + ubuntu: + focal: [ros-humble-rosapi] + jammy: [ros-humble-rosapi] +rosapi_msgs: + ubuntu: + focal: [ros-humble-rosapi-msgs] + jammy: [ros-humble-rosapi-msgs] +rosapi_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rosapi-msgs-dbgsym] + jammy: [ros-humble-rosapi-msgs-dbgsym] +rosbag2: + ubuntu: + focal: [ros-humble-rosbag2] + jammy: [ros-humble-rosbag2] +rosbag2_compression: + ubuntu: + focal: [ros-humble-rosbag2-compression] + jammy: [ros-humble-rosbag2-compression] +rosbag2_compression_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-compression-dbgsym] + jammy: [ros-humble-rosbag2-compression-dbgsym] +rosbag2_compression_zstd: + ubuntu: + focal: [ros-humble-rosbag2-compression-zstd] + jammy: [ros-humble-rosbag2-compression-zstd] +rosbag2_compression_zstd_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-compression-zstd-dbgsym] + jammy: [ros-humble-rosbag2-compression-zstd-dbgsym] +rosbag2_cpp: + ubuntu: + focal: [ros-humble-rosbag2-cpp] + jammy: [ros-humble-rosbag2-cpp] +rosbag2_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-cpp-dbgsym] + jammy: [ros-humble-rosbag2-cpp-dbgsym] +rosbag2_interfaces: + ubuntu: + focal: [ros-humble-rosbag2-interfaces] + jammy: [ros-humble-rosbag2-interfaces] +rosbag2_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-interfaces-dbgsym] + jammy: [ros-humble-rosbag2-interfaces-dbgsym] +rosbag2_performance_benchmarking: + ubuntu: + focal: [ros-humble-rosbag2-performance-benchmarking] + jammy: [ros-humble-rosbag2-performance-benchmarking] +rosbag2_py: + ubuntu: + focal: [ros-humble-rosbag2-py] + jammy: [ros-humble-rosbag2-py] +rosbag2_storage: + ubuntu: + focal: [ros-humble-rosbag2-storage] + jammy: [ros-humble-rosbag2-storage] +rosbag2_storage_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-storage-dbgsym] + jammy: [ros-humble-rosbag2-storage-dbgsym] +rosbag2_storage_default_plugins: + ubuntu: + focal: [ros-humble-rosbag2-storage-default-plugins] + jammy: [ros-humble-rosbag2-storage-default-plugins] +rosbag2_storage_default_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-storage-default-plugins-dbgsym] + jammy: [ros-humble-rosbag2-storage-default-plugins-dbgsym] +rosbag2_storage_mcap: + ubuntu: + focal: [ros-humble-rosbag2-storage-mcap] + jammy: [ros-humble-rosbag2-storage-mcap] +rosbag2_storage_mcap_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-storage-mcap-dbgsym] + jammy: [ros-humble-rosbag2-storage-mcap-dbgsym] +rosbag2_storage_mcap_testdata: + ubuntu: + focal: [ros-humble-rosbag2-storage-mcap-testdata] + jammy: [ros-humble-rosbag2-storage-mcap-testdata] +rosbag2_storage_mcap_testdata_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-storage-mcap-testdata-dbgsym] + jammy: [ros-humble-rosbag2-storage-mcap-testdata-dbgsym] +rosbag2_test_common: + ubuntu: + focal: [ros-humble-rosbag2-test-common] + jammy: [ros-humble-rosbag2-test-common] +rosbag2_tests: + ubuntu: + focal: [ros-humble-rosbag2-tests] + jammy: [ros-humble-rosbag2-tests] +rosbag2_tools: + ubuntu: + focal: [ros-humble-rosbag2-tools] + jammy: [ros-humble-rosbag2-tools] +rosbag2_transport: + ubuntu: + focal: [ros-humble-rosbag2-transport] + jammy: [ros-humble-rosbag2-transport] +rosbag2_transport_dbgsym: + ubuntu: + focal: [ros-humble-rosbag2-transport-dbgsym] + jammy: [ros-humble-rosbag2-transport-dbgsym] +rosbridge_library: + ubuntu: + focal: [ros-humble-rosbridge-library] + jammy: [ros-humble-rosbridge-library] +rosbridge_msgs: + ubuntu: + focal: [ros-humble-rosbridge-msgs] + jammy: [ros-humble-rosbridge-msgs] +rosbridge_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rosbridge-msgs-dbgsym] + jammy: [ros-humble-rosbridge-msgs-dbgsym] +rosbridge_server: + ubuntu: + focal: [ros-humble-rosbridge-server] + jammy: [ros-humble-rosbridge-server] +rosbridge_suite: + ubuntu: + focal: [ros-humble-rosbridge-suite] + jammy: [ros-humble-rosbridge-suite] +rosbridge_test_msgs: + ubuntu: + focal: [ros-humble-rosbridge-test-msgs] + jammy: [ros-humble-rosbridge-test-msgs] +rosbridge_test_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rosbridge-test-msgs-dbgsym] + jammy: [ros-humble-rosbridge-test-msgs-dbgsym] +roscpp: + ubuntu: + focal: [ros-noetic-roscpp] + jammy: [ros-noetic-roscpp] +rosgraph_msgs: + ubuntu: + focal: [ros-humble-rosgraph-msgs] + jammy: [ros-humble-rosgraph-msgs] +rosgraph_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rosgraph-msgs-dbgsym] + jammy: [ros-humble-rosgraph-msgs-dbgsym] +rosidl_adapter: + ubuntu: + focal: [ros-humble-rosidl-adapter] + jammy: [ros-humble-rosidl-adapter] +rosidl_cli: + ubuntu: + focal: [ros-humble-rosidl-cli] + jammy: [ros-humble-rosidl-cli] +rosidl_cmake: + ubuntu: + focal: [ros-humble-rosidl-cmake] + jammy: [ros-humble-rosidl-cmake] +rosidl_default_generators: + ubuntu: + focal: [ros-humble-rosidl-default-generators] + jammy: [ros-humble-rosidl-default-generators] +rosidl_default_runtime: + ubuntu: + focal: [ros-humble-rosidl-default-runtime] + jammy: [ros-humble-rosidl-default-runtime] +rosidl_generator_c: + ubuntu: + focal: [ros-humble-rosidl-generator-c] + jammy: [ros-humble-rosidl-generator-c] +rosidl_generator_cpp: + ubuntu: + focal: [ros-humble-rosidl-generator-cpp] + jammy: [ros-humble-rosidl-generator-cpp] +rosidl_generator_dds_idl: + ubuntu: + focal: [ros-humble-rosidl-generator-dds-idl] + jammy: [ros-humble-rosidl-generator-dds-idl] +rosidl_generator_py: + ubuntu: + focal: [ros-humble-rosidl-generator-py] + jammy: [ros-humble-rosidl-generator-py] +rosidl_parser: + ubuntu: + focal: [ros-humble-rosidl-parser] + jammy: [ros-humble-rosidl-parser] +rosidl_runtime_c: + ubuntu: + focal: [ros-humble-rosidl-runtime-c] + jammy: [ros-humble-rosidl-runtime-c] +rosidl_runtime_c_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-runtime-c-dbgsym] + jammy: [ros-humble-rosidl-runtime-c-dbgsym] +rosidl_runtime_cpp: + ubuntu: + focal: [ros-humble-rosidl-runtime-cpp] + jammy: [ros-humble-rosidl-runtime-cpp] +rosidl_runtime_py: + ubuntu: + focal: [ros-humble-rosidl-runtime-py] + jammy: [ros-humble-rosidl-runtime-py] +rosidl_typesupport_c: + ubuntu: + focal: [ros-humble-rosidl-typesupport-c] + jammy: [ros-humble-rosidl-typesupport-c] +rosidl_typesupport_c_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-c-dbgsym] + jammy: [ros-humble-rosidl-typesupport-c-dbgsym] +rosidl_typesupport_cpp: + ubuntu: + focal: [ros-humble-rosidl-typesupport-cpp] + jammy: [ros-humble-rosidl-typesupport-cpp] +rosidl_typesupport_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-cpp-dbgsym] + jammy: [ros-humble-rosidl-typesupport-cpp-dbgsym] +rosidl_typesupport_fastrtps_c: + ubuntu: + focal: [ros-humble-rosidl-typesupport-fastrtps-c] + jammy: [ros-humble-rosidl-typesupport-fastrtps-c] +rosidl_typesupport_fastrtps_c_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-fastrtps-c-dbgsym] + jammy: [ros-humble-rosidl-typesupport-fastrtps-c-dbgsym] +rosidl_typesupport_fastrtps_cpp: + ubuntu: + focal: [ros-humble-rosidl-typesupport-fastrtps-cpp] + jammy: [ros-humble-rosidl-typesupport-fastrtps-cpp] +rosidl_typesupport_fastrtps_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-fastrtps-cpp-dbgsym] + jammy: [ros-humble-rosidl-typesupport-fastrtps-cpp-dbgsym] +rosidl_typesupport_interface: + ubuntu: + focal: [ros-humble-rosidl-typesupport-interface] + jammy: [ros-humble-rosidl-typesupport-interface] +rosidl_typesupport_introspection_c: + ubuntu: + focal: [ros-humble-rosidl-typesupport-introspection-c] + jammy: [ros-humble-rosidl-typesupport-introspection-c] +rosidl_typesupport_introspection_c_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-introspection-c-dbgsym] + jammy: [ros-humble-rosidl-typesupport-introspection-c-dbgsym] +rosidl_typesupport_introspection_cpp: + ubuntu: + focal: [ros-humble-rosidl-typesupport-introspection-cpp] + jammy: [ros-humble-rosidl-typesupport-introspection-cpp] +rosidl_typesupport_introspection_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rosidl-typesupport-introspection-cpp-dbgsym] + jammy: [ros-humble-rosidl-typesupport-introspection-cpp-dbgsym] +roslib: + ubuntu: + focal: [python3-roslib] + jammy: [python3-roslib] +rosparam_shortcuts: + ubuntu: + focal: [ros-humble-rosparam-shortcuts] + jammy: [ros-humble-rosparam-shortcuts] +rospy: + ubuntu: + focal: [ros-noetic-rospy] + jammy: [ros-noetic-rospy] +rot_conv: + ubuntu: + focal: [ros-humble-rot-conv] + jammy: [ros-humble-rot-conv] +rot_conv_dbgsym: + ubuntu: + focal: [ros-humble-rot-conv-dbgsym] + jammy: [ros-humble-rot-conv-dbgsym] +rplidar_ros: + ubuntu: + focal: [ros-humble-rplidar-ros] + jammy: [ros-humble-rplidar-ros] +rplidar_ros_dbgsym: + ubuntu: + focal: [ros-humble-rplidar-ros-dbgsym] + jammy: [ros-humble-rplidar-ros-dbgsym] +rplidar_s2e_description: + ubuntu: + focal: [ros-humble-rplidar-s2e-description] + jammy: [ros-humble-rplidar-s2e-description] +rpyutils: + ubuntu: + focal: [ros-humble-rpyutils] + jammy: [ros-humble-rpyutils] +rqt: + ubuntu: + focal: [ros-humble-rqt] + jammy: [ros-humble-rqt] +rqt_action: + ubuntu: + focal: [ros-humble-rqt-action] + jammy: [ros-humble-rqt-action] +rqt_bag: + ubuntu: + focal: [ros-humble-rqt-bag] + jammy: [ros-humble-rqt-bag] +rqt_bag_plugins: + ubuntu: + focal: [ros-humble-rqt-bag-plugins] + jammy: [ros-humble-rqt-bag-plugins] +rqt_common_plugins: + ubuntu: + focal: [ros-humble-rqt-common-plugins] + jammy: [ros-humble-rqt-common-plugins] +rqt_console: + ubuntu: + focal: [ros-humble-rqt-console] + jammy: [ros-humble-rqt-console] +rqt_controller_manager: + ubuntu: + focal: [ros-humble-rqt-controller-manager] + jammy: [ros-humble-rqt-controller-manager] +rqt_graph: + ubuntu: + focal: [ros-humble-rqt-graph] + jammy: [ros-humble-rqt-graph] +rqt_gui: + ubuntu: + focal: [ros-humble-rqt-gui] + jammy: [ros-humble-rqt-gui] +rqt_gui_cpp: + ubuntu: + focal: [ros-humble-rqt-gui-cpp] + jammy: [ros-humble-rqt-gui-cpp] +rqt_gui_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rqt-gui-cpp-dbgsym] + jammy: [ros-humble-rqt-gui-cpp-dbgsym] +rqt_gui_py: + ubuntu: + focal: [ros-humble-rqt-gui-py] + jammy: [ros-humble-rqt-gui-py] +rqt_image_overlay: + ubuntu: + focal: [ros-humble-rqt-image-overlay] + jammy: [ros-humble-rqt-image-overlay] +rqt_image_overlay_dbgsym: + ubuntu: + focal: [ros-humble-rqt-image-overlay-dbgsym] + jammy: [ros-humble-rqt-image-overlay-dbgsym] +rqt_image_overlay_layer: + ubuntu: + focal: [ros-humble-rqt-image-overlay-layer] + jammy: [ros-humble-rqt-image-overlay-layer] +rqt_image_view: + ubuntu: + focal: [ros-humble-rqt-image-view] + jammy: [ros-humble-rqt-image-view] +rqt_image_view_dbgsym: + ubuntu: + focal: [ros-humble-rqt-image-view-dbgsym] + jammy: [ros-humble-rqt-image-view-dbgsym] +rqt_joint_trajectory_controller: + ubuntu: + focal: [ros-humble-rqt-joint-trajectory-controller] + jammy: [ros-humble-rqt-joint-trajectory-controller] +rqt_moveit: + ubuntu: + focal: [ros-humble-rqt-moveit] + jammy: [ros-humble-rqt-moveit] +rqt_msg: + ubuntu: + focal: [ros-humble-rqt-msg] + jammy: [ros-humble-rqt-msg] +rqt_plot: + ubuntu: + focal: [ros-humble-rqt-plot] + jammy: [ros-humble-rqt-plot] +rqt_publisher: + ubuntu: + focal: [ros-humble-rqt-publisher] + jammy: [ros-humble-rqt-publisher] +rqt_py_common: + ubuntu: + focal: [ros-humble-rqt-py-common] + jammy: [ros-humble-rqt-py-common] +rqt_py_console: + ubuntu: + focal: [ros-humble-rqt-py-console] + jammy: [ros-humble-rqt-py-console] +rqt_reconfigure: + ubuntu: + focal: [ros-humble-rqt-reconfigure] + jammy: [ros-humble-rqt-reconfigure] +rqt_robot_dashboard: + ubuntu: + focal: [ros-humble-rqt-robot-dashboard] + jammy: [ros-humble-rqt-robot-dashboard] +rqt_robot_monitor: + ubuntu: + focal: [ros-humble-rqt-robot-monitor] + jammy: [ros-humble-rqt-robot-monitor] +rqt_robot_steering: + ubuntu: + focal: [ros-humble-rqt-robot-steering] + jammy: [ros-humble-rqt-robot-steering] +rqt_runtime_monitor: + ubuntu: + focal: [ros-humble-rqt-runtime-monitor] + jammy: [ros-humble-rqt-runtime-monitor] +rqt_service_caller: + ubuntu: + focal: [ros-humble-rqt-service-caller] + jammy: [ros-humble-rqt-service-caller] +rqt_shell: + ubuntu: + focal: [ros-humble-rqt-shell] + jammy: [ros-humble-rqt-shell] +rqt_srv: + ubuntu: + focal: [ros-humble-rqt-srv] + jammy: [ros-humble-rqt-srv] +rqt_tf_tree: + ubuntu: + focal: [ros-humble-rqt-tf-tree] + jammy: [ros-humble-rqt-tf-tree] +rqt_topic: + ubuntu: + focal: [ros-humble-rqt-topic] + jammy: [ros-humble-rqt-topic] +rsl: + ubuntu: + focal: [ros-humble-rsl] + jammy: [ros-humble-rsl] +rsl_dbgsym: + ubuntu: + focal: [ros-humble-rsl-dbgsym] + jammy: [ros-humble-rsl-dbgsym] +rt_manipulators_cpp: + ubuntu: + focal: [ros-humble-rt-manipulators-cpp] + jammy: [ros-humble-rt-manipulators-cpp] +rt_manipulators_cpp_dbgsym: + ubuntu: + focal: [ros-humble-rt-manipulators-cpp-dbgsym] + jammy: [ros-humble-rt-manipulators-cpp-dbgsym] +rt_manipulators_examples: + ubuntu: + focal: [ros-humble-rt-manipulators-examples] + jammy: [ros-humble-rt-manipulators-examples] +rt_manipulators_examples_dbgsym: + ubuntu: + focal: [ros-humble-rt-manipulators-examples-dbgsym] + jammy: [ros-humble-rt-manipulators-examples-dbgsym] +rt_usb_9axisimu_driver: + ubuntu: + focal: [ros-humble-rt-usb-9axisimu-driver] + jammy: [ros-humble-rt-usb-9axisimu-driver] +rt_usb_9axisimu_driver_dbgsym: + ubuntu: + focal: [ros-humble-rt-usb-9axisimu-driver-dbgsym] + jammy: [ros-humble-rt-usb-9axisimu-driver-dbgsym] +rtabmap: + ubuntu: + focal: [ros-humble-rtabmap] + jammy: [ros-humble-rtabmap] +rtabmap_conversions: + ubuntu: + focal: [ros-humble-rtabmap-conversions] + jammy: [ros-humble-rtabmap-conversions] +rtabmap_conversions_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-conversions-dbgsym] + jammy: [ros-humble-rtabmap-conversions-dbgsym] +rtabmap_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-dbgsym] + jammy: [ros-humble-rtabmap-dbgsym] +rtabmap_demos: + ubuntu: + focal: [ros-humble-rtabmap-demos] + jammy: [ros-humble-rtabmap-demos] +rtabmap_examples: + ubuntu: + focal: [ros-humble-rtabmap-examples] + jammy: [ros-humble-rtabmap-examples] +rtabmap_launch: + ubuntu: + focal: [ros-humble-rtabmap-launch] + jammy: [ros-humble-rtabmap-launch] +rtabmap_msgs: + ubuntu: + focal: [ros-humble-rtabmap-msgs] + jammy: [ros-humble-rtabmap-msgs] +rtabmap_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-msgs-dbgsym] + jammy: [ros-humble-rtabmap-msgs-dbgsym] +rtabmap_odom: + ubuntu: + focal: [ros-humble-rtabmap-odom] + jammy: [ros-humble-rtabmap-odom] +rtabmap_odom_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-odom-dbgsym] + jammy: [ros-humble-rtabmap-odom-dbgsym] +rtabmap_python: + ubuntu: + focal: [ros-humble-rtabmap-python] + jammy: [ros-humble-rtabmap-python] +rtabmap_ros: + ubuntu: + focal: [ros-humble-rtabmap-ros] + jammy: [ros-humble-rtabmap-ros] +rtabmap_rviz_plugins: + ubuntu: + focal: [ros-humble-rtabmap-rviz-plugins] + jammy: [ros-humble-rtabmap-rviz-plugins] +rtabmap_rviz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-rviz-plugins-dbgsym] + jammy: [ros-humble-rtabmap-rviz-plugins-dbgsym] +rtabmap_slam: + ubuntu: + focal: [ros-humble-rtabmap-slam] + jammy: [ros-humble-rtabmap-slam] +rtabmap_slam_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-slam-dbgsym] + jammy: [ros-humble-rtabmap-slam-dbgsym] +rtabmap_sync: + ubuntu: + focal: [ros-humble-rtabmap-sync] + jammy: [ros-humble-rtabmap-sync] +rtabmap_sync_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-sync-dbgsym] + jammy: [ros-humble-rtabmap-sync-dbgsym] +rtabmap_util: + ubuntu: + focal: [ros-humble-rtabmap-util] + jammy: [ros-humble-rtabmap-util] +rtabmap_util_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-util-dbgsym] + jammy: [ros-humble-rtabmap-util-dbgsym] +rtabmap_viz: + ubuntu: + focal: [ros-humble-rtabmap-viz] + jammy: [ros-humble-rtabmap-viz] +rtabmap_viz_dbgsym: + ubuntu: + focal: [ros-humble-rtabmap-viz-dbgsym] + jammy: [ros-humble-rtabmap-viz-dbgsym] +rtcm_msgs: + ubuntu: + focal: [ros-humble-rtcm-msgs] + jammy: [ros-humble-rtcm-msgs] +rtcm_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rtcm-msgs-dbgsym] + jammy: [ros-humble-rtcm-msgs-dbgsym] +rti_connext_dds_cmake_module: + ubuntu: + focal: [ros-humble-rti-connext-dds-cmake-module] + jammy: [ros-humble-rti-connext-dds-cmake-module] +rttest: + ubuntu: + focal: [ros-humble-rttest] + jammy: [ros-humble-rttest] +rttest_dbgsym: + ubuntu: + focal: [ros-humble-rttest-dbgsym] + jammy: [ros-humble-rttest-dbgsym] +ruckig: + ubuntu: + focal: [ros-humble-ruckig] + jammy: [ros-humble-ruckig] +ruckig_dbgsym: + ubuntu: + focal: [ros-humble-ruckig-dbgsym] + jammy: [ros-humble-ruckig-dbgsym] +rviz2: + ubuntu: + focal: [ros-humble-rviz2] + jammy: [ros-humble-rviz2] +rviz2_dbgsym: + ubuntu: + focal: [ros-humble-rviz2-dbgsym] + jammy: [ros-humble-rviz2-dbgsym] +rviz_2d_overlay_msgs: + ubuntu: + focal: [ros-humble-rviz-2d-overlay-msgs] + jammy: [ros-humble-rviz-2d-overlay-msgs] +rviz_2d_overlay_msgs_dbgsym: + ubuntu: + focal: [ros-humble-rviz-2d-overlay-msgs-dbgsym] + jammy: [ros-humble-rviz-2d-overlay-msgs-dbgsym] +rviz_2d_overlay_plugins: + ubuntu: + focal: [ros-humble-rviz-2d-overlay-plugins] + jammy: [ros-humble-rviz-2d-overlay-plugins] +rviz_2d_overlay_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rviz-2d-overlay-plugins-dbgsym] + jammy: [ros-humble-rviz-2d-overlay-plugins-dbgsym] +rviz_assimp_vendor: + ubuntu: + focal: [ros-humble-rviz-assimp-vendor] + jammy: [ros-humble-rviz-assimp-vendor] +rviz_common: + ubuntu: + focal: [ros-humble-rviz-common] + jammy: [ros-humble-rviz-common] +rviz_common_dbgsym: + ubuntu: + focal: [ros-humble-rviz-common-dbgsym] + jammy: [ros-humble-rviz-common-dbgsym] +rviz_default_plugins: + ubuntu: + focal: [ros-humble-rviz-default-plugins] + jammy: [ros-humble-rviz-default-plugins] +rviz_default_plugins_dbgsym: + ubuntu: + focal: [ros-humble-rviz-default-plugins-dbgsym] + jammy: [ros-humble-rviz-default-plugins-dbgsym] +rviz_imu_plugin: + ubuntu: + focal: [ros-humble-rviz-imu-plugin] + jammy: [ros-humble-rviz-imu-plugin] +rviz_imu_plugin_dbgsym: + ubuntu: + focal: [ros-humble-rviz-imu-plugin-dbgsym] + jammy: [ros-humble-rviz-imu-plugin-dbgsym] +rviz_marker_tools: + ubuntu: + focal: [ros-humble-rviz-marker-tools] + jammy: [ros-humble-rviz-marker-tools] +rviz_ogre_vendor: + ubuntu: + focal: [ros-humble-rviz-ogre-vendor] + jammy: [ros-humble-rviz-ogre-vendor] +rviz_ogre_vendor_dbgsym: + ubuntu: + focal: [ros-humble-rviz-ogre-vendor-dbgsym] + jammy: [ros-humble-rviz-ogre-vendor-dbgsym] +rviz_rendering: + ubuntu: + focal: [ros-humble-rviz-rendering] + jammy: [ros-humble-rviz-rendering] +rviz_rendering_dbgsym: + ubuntu: + focal: [ros-humble-rviz-rendering-dbgsym] + jammy: [ros-humble-rviz-rendering-dbgsym] +rviz_rendering_tests: + ubuntu: + focal: [ros-humble-rviz-rendering-tests] + jammy: [ros-humble-rviz-rendering-tests] +rviz_satellite: + ubuntu: + focal: [ros-humble-rviz-satellite] + jammy: [ros-humble-rviz-satellite] +rviz_satellite_dbgsym: + ubuntu: + focal: [ros-humble-rviz-satellite-dbgsym] + jammy: [ros-humble-rviz-satellite-dbgsym] +rviz_visual_testing_framework: + ubuntu: + focal: [ros-humble-rviz-visual-testing-framework] + jammy: [ros-humble-rviz-visual-testing-framework] +rviz_visual_tools: + ubuntu: + focal: [ros-humble-rviz-visual-tools] + jammy: [ros-humble-rviz-visual-tools] +rviz_visual_tools_dbgsym: + ubuntu: + focal: [ros-humble-rviz-visual-tools-dbgsym] + jammy: [ros-humble-rviz-visual-tools-dbgsym] +schunk_svh_description: + ubuntu: + focal: [ros-humble-schunk-svh-description] + jammy: [ros-humble-schunk-svh-description] +schunk_svh_driver: + ubuntu: + focal: [ros-humble-schunk-svh-driver] + jammy: [ros-humble-schunk-svh-driver] +schunk_svh_driver_dbgsym: + ubuntu: + focal: [ros-humble-schunk-svh-driver-dbgsym] + jammy: [ros-humble-schunk-svh-driver-dbgsym] +schunk_svh_library: + ubuntu: + focal: [ros-humble-schunk-svh-library] + jammy: [ros-humble-schunk-svh-library] +schunk_svh_library_dbgsym: + ubuntu: + focal: [ros-humble-schunk-svh-library-dbgsym] + jammy: [ros-humble-schunk-svh-library-dbgsym] +schunk_svh_tests: + ubuntu: + focal: [ros-humble-schunk-svh-tests] + jammy: [ros-humble-schunk-svh-tests] +sdformat_test_files: + ubuntu: + focal: [ros-humble-sdformat-test-files] + jammy: [ros-humble-sdformat-test-files] +sdformat_urdf: + ubuntu: + focal: [ros-humble-sdformat-urdf] + jammy: [ros-humble-sdformat-urdf] +sdformat_urdf_dbgsym: + ubuntu: + focal: [ros-humble-sdformat-urdf-dbgsym] + jammy: [ros-humble-sdformat-urdf-dbgsym] +sdl2_vendor: + ubuntu: + focal: [ros-humble-sdl2-vendor] + jammy: [ros-humble-sdl2-vendor] +self_test: + ubuntu: + focal: [ros-humble-self-test] + jammy: [ros-humble-self-test] +self_test_dbgsym: + ubuntu: + focal: [ros-humble-self-test-dbgsym] + jammy: [ros-humble-self-test-dbgsym] +semantic_label_conversion: + ubuntu: + focal: [ros-humble-semantic-label-conversion] + jammy: [ros-humble-semantic-label-conversion] +sensor_msgs: + ubuntu: + focal: [ros-humble-sensor-msgs] + jammy: [ros-humble-sensor-msgs] +sensor_msgs_dbgsym: + ubuntu: + focal: [ros-humble-sensor-msgs-dbgsym] + jammy: [ros-humble-sensor-msgs-dbgsym] +sensor_msgs_py: + ubuntu: + focal: [ros-humble-sensor-msgs-py] + jammy: [ros-humble-sensor-msgs-py] +septentrio_gnss_driver: + ubuntu: + focal: [ros-humble-septentrio-gnss-driver] + jammy: [ros-humble-septentrio-gnss-driver] +septentrio_gnss_driver_dbgsym: + ubuntu: + focal: [ros-humble-septentrio-gnss-driver-dbgsym] + jammy: [ros-humble-septentrio-gnss-driver-dbgsym] +serial_driver: + ubuntu: + focal: [ros-humble-serial-driver] + jammy: [ros-humble-serial-driver] +serial_driver_dbgsym: + ubuntu: + focal: [ros-humble-serial-driver-dbgsym] + jammy: [ros-humble-serial-driver-dbgsym] +shape_msgs: + ubuntu: + focal: [ros-humble-shape-msgs] + jammy: [ros-humble-shape-msgs] +shape_msgs_dbgsym: + ubuntu: + focal: [ros-humble-shape-msgs-dbgsym] + jammy: [ros-humble-shape-msgs-dbgsym] +shared_queues_vendor: + ubuntu: + focal: [ros-humble-shared-queues-vendor] + jammy: [ros-humble-shared-queues-vendor] +sick_safetyscanners2: + ubuntu: + focal: [ros-humble-sick-safetyscanners2] + jammy: [ros-humble-sick-safetyscanners2] +sick_safetyscanners2_dbgsym: + ubuntu: + focal: [ros-humble-sick-safetyscanners2-dbgsym] + jammy: [ros-humble-sick-safetyscanners2-dbgsym] +sick_safetyscanners2_interfaces: + ubuntu: + focal: [ros-humble-sick-safetyscanners2-interfaces] + jammy: [ros-humble-sick-safetyscanners2-interfaces] +sick_safetyscanners2_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-sick-safetyscanners2-interfaces-dbgsym] + jammy: [ros-humble-sick-safetyscanners2-interfaces-dbgsym] +sick_safetyscanners_base: + ubuntu: + focal: [ros-humble-sick-safetyscanners-base] + jammy: [ros-humble-sick-safetyscanners-base] +sick_safetyscanners_base_dbgsym: + ubuntu: + focal: [ros-humble-sick-safetyscanners-base-dbgsym] + jammy: [ros-humble-sick-safetyscanners-base-dbgsym] +simple_actions: + ubuntu: + focal: [ros-humble-simple-actions] + jammy: [ros-humble-simple-actions] +simple_actions_dbgsym: + ubuntu: + focal: [ros-humble-simple-actions-dbgsym] + jammy: [ros-humble-simple-actions-dbgsym] +simple_launch: + ubuntu: + focal: [ros-humble-simple-launch] + jammy: [ros-humble-simple-launch] +simple_term_menu_vendor: + ubuntu: + focal: [ros-humble-simple-term-menu-vendor] + jammy: [ros-humble-simple-term-menu-vendor] +simulation: + ubuntu: + focal: [ros-humble-simulation] + jammy: [ros-humble-simulation] +slam_toolbox: + ubuntu: + focal: [ros-humble-slam-toolbox] + jammy: [ros-humble-slam-toolbox] +slam_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-slam-toolbox-dbgsym] + jammy: [ros-humble-slam-toolbox-dbgsym] +slider_publisher: + ubuntu: + focal: [ros-humble-slider-publisher] + jammy: [ros-humble-slider-publisher] +sllidar_ros2: + ubuntu: + focal: [ros-humble-sllidar-ros2] + jammy: [ros-humble-sllidar-ros2] +smacc2: + ubuntu: + focal: [ros-humble-smacc2] + jammy: [ros-humble-smacc2] +smacc2_dbgsym: + ubuntu: + focal: [ros-humble-smacc2-dbgsym] + jammy: [ros-humble-smacc2-dbgsym] +smacc2_msgs: + ubuntu: + focal: [ros-humble-smacc2-msgs] + jammy: [ros-humble-smacc2-msgs] +smacc2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-smacc2-msgs-dbgsym] + jammy: [ros-humble-smacc2-msgs-dbgsym] +smach: + ubuntu: + focal: [ros-humble-smach] + jammy: [ros-humble-smach] +smach_msgs: + ubuntu: + focal: [ros-humble-smach-msgs] + jammy: [ros-humble-smach-msgs] +smach_msgs_dbgsym: + ubuntu: + focal: [ros-humble-smach-msgs-dbgsym] + jammy: [ros-humble-smach-msgs-dbgsym] +smach_ros: + ubuntu: + focal: [ros-humble-smach-ros] + jammy: [ros-humble-smach-ros] +smclib: + ubuntu: + focal: [ros-humble-smclib] + jammy: [ros-humble-smclib] +snowbot_operating_system: + ubuntu: + focal: [ros-humble-snowbot-operating-system] + jammy: [ros-humble-snowbot-operating-system] +snowbot_operating_system_dbgsym: + ubuntu: + focal: [ros-humble-snowbot-operating-system-dbgsym] + jammy: [ros-humble-snowbot-operating-system-dbgsym] +soccer_interfaces: + ubuntu: + focal: [ros-humble-soccer-interfaces] + jammy: [ros-humble-soccer-interfaces] +soccer_marker_generation: + ubuntu: + focal: [ros-humble-soccer-marker-generation] + jammy: [ros-humble-soccer-marker-generation] +soccer_marker_generation_dbgsym: + ubuntu: + focal: [ros-humble-soccer-marker-generation-dbgsym] + jammy: [ros-humble-soccer-marker-generation-dbgsym] +soccer_object_msgs: + ubuntu: + focal: [ros-humble-soccer-object-msgs] + jammy: [ros-humble-soccer-object-msgs] +soccer_object_msgs_dbgsym: + ubuntu: + focal: [ros-humble-soccer-object-msgs-dbgsym] + jammy: [ros-humble-soccer-object-msgs-dbgsym] +soccer_vision_2d_msgs: + ubuntu: + focal: [ros-humble-soccer-vision-2d-msgs] + jammy: [ros-humble-soccer-vision-2d-msgs] +soccer_vision_2d_msgs_dbgsym: + ubuntu: + focal: [ros-humble-soccer-vision-2d-msgs-dbgsym] + jammy: [ros-humble-soccer-vision-2d-msgs-dbgsym] +soccer_vision_3d_msgs: + ubuntu: + focal: [ros-humble-soccer-vision-3d-msgs] + jammy: [ros-humble-soccer-vision-3d-msgs] +soccer_vision_3d_msgs_dbgsym: + ubuntu: + focal: [ros-humble-soccer-vision-3d-msgs-dbgsym] + jammy: [ros-humble-soccer-vision-3d-msgs-dbgsym] +soccer_vision_attribute_msgs: + ubuntu: + focal: [ros-humble-soccer-vision-attribute-msgs] + jammy: [ros-humble-soccer-vision-attribute-msgs] +soccer_vision_attribute_msgs_dbgsym: + ubuntu: + focal: [ros-humble-soccer-vision-attribute-msgs-dbgsym] + jammy: [ros-humble-soccer-vision-attribute-msgs-dbgsym] +social_nav_msgs: + ubuntu: + focal: [ros-humble-social-nav-msgs] + jammy: [ros-humble-social-nav-msgs] +social_nav_msgs_dbgsym: + ubuntu: + focal: [ros-humble-social-nav-msgs-dbgsym] + jammy: [ros-humble-social-nav-msgs-dbgsym] +social_nav_util: + ubuntu: + focal: [ros-humble-social-nav-util] + jammy: [ros-humble-social-nav-util] +sol_vendor: + ubuntu: + focal: [ros-humble-sol-vendor] + jammy: [ros-humble-sol-vendor] +sophus: + ubuntu: + focal: [ros-humble-sophus] + jammy: [ros-humble-sophus] +spacenav: + ubuntu: + focal: [ros-humble-spacenav] + jammy: [ros-humble-spacenav] +spacenav_dbgsym: + ubuntu: + focal: [ros-humble-spacenav-dbgsym] + jammy: [ros-humble-spacenav-dbgsym] +spdlog_vendor: + ubuntu: + focal: [ros-humble-spdlog-vendor] + jammy: [ros-humble-spdlog-vendor] +splsm_7: + ubuntu: + focal: [ros-humble-splsm-7] + jammy: [ros-humble-splsm-7] +splsm_7_conversion: + ubuntu: + focal: [ros-humble-splsm-7-conversion] + jammy: [ros-humble-splsm-7-conversion] +splsm_7_dbgsym: + ubuntu: + focal: [ros-humble-splsm-7-dbgsym] + jammy: [ros-humble-splsm-7-dbgsym] +sqlite3_vendor: + ubuntu: + focal: [ros-humble-sqlite3-vendor] + jammy: [ros-humble-sqlite3-vendor] +srdfdom: + ubuntu: + focal: [ros-humble-srdfdom] + jammy: [ros-humble-srdfdom] +srdfdom_dbgsym: + ubuntu: + focal: [ros-humble-srdfdom-dbgsym] + jammy: [ros-humble-srdfdom-dbgsym] +sros2: + ubuntu: + focal: [ros-humble-sros2] + jammy: [ros-humble-sros2] +sros2_cmake: + ubuntu: + focal: [ros-humble-sros2-cmake] + jammy: [ros-humble-sros2-cmake] +statistics_msgs: + ubuntu: + focal: [ros-humble-statistics-msgs] + jammy: [ros-humble-statistics-msgs] +statistics_msgs_dbgsym: + ubuntu: + focal: [ros-humble-statistics-msgs-dbgsym] + jammy: [ros-humble-statistics-msgs-dbgsym] +std_msgs: + ubuntu: + focal: [ros-humble-std-msgs] + jammy: [ros-humble-std-msgs] +std_msgs_dbgsym: + ubuntu: + focal: [ros-humble-std-msgs-dbgsym] + jammy: [ros-humble-std-msgs-dbgsym] +std_srvs: + ubuntu: + focal: [ros-humble-std-srvs] + jammy: [ros-humble-std-srvs] +std_srvs_dbgsym: + ubuntu: + focal: [ros-humble-std-srvs-dbgsym] + jammy: [ros-humble-std-srvs-dbgsym] +steering_controllers_library: + ubuntu: + focal: [ros-humble-steering-controllers-library] + jammy: [ros-humble-steering-controllers-library] +steering_controllers_library_dbgsym: + ubuntu: + focal: [ros-humble-steering-controllers-library-dbgsym] + jammy: [ros-humble-steering-controllers-library-dbgsym] +stereo_image_proc: + ubuntu: + focal: [ros-humble-stereo-image-proc] + jammy: [ros-humble-stereo-image-proc] +stereo_image_proc_dbgsym: + ubuntu: + focal: [ros-humble-stereo-image-proc-dbgsym] + jammy: [ros-humble-stereo-image-proc-dbgsym] +stereo_msgs: + ubuntu: + focal: [ros-humble-stereo-msgs] + jammy: [ros-humble-stereo-msgs] +stereo_msgs_dbgsym: + ubuntu: + focal: [ros-humble-stereo-msgs-dbgsym] + jammy: [ros-humble-stereo-msgs-dbgsym] +stomp: + ubuntu: + focal: [ros-humble-stomp] + jammy: [ros-humble-stomp] +stomp_dbgsym: + ubuntu: + focal: [ros-humble-stomp-dbgsym] + jammy: [ros-humble-stomp-dbgsym] +stubborn_buddies: + ubuntu: + focal: [ros-humble-stubborn-buddies] + jammy: [ros-humble-stubborn-buddies] +stubborn_buddies_dbgsym: + ubuntu: + focal: [ros-humble-stubborn-buddies-dbgsym] + jammy: [ros-humble-stubborn-buddies-dbgsym] +stubborn_buddies_msgs: + ubuntu: + focal: [ros-humble-stubborn-buddies-msgs] + jammy: [ros-humble-stubborn-buddies-msgs] +stubborn_buddies_msgs_dbgsym: + ubuntu: + focal: [ros-humble-stubborn-buddies-msgs-dbgsym] + jammy: [ros-humble-stubborn-buddies-msgs-dbgsym] +swri_cli_tools: + ubuntu: + focal: [ros-humble-swri-cli-tools] + jammy: [ros-humble-swri-cli-tools] +swri_console: + ubuntu: + focal: [ros-humble-swri-console] + jammy: [ros-humble-swri-console] +swri_console_dbgsym: + ubuntu: + focal: [ros-humble-swri-console-dbgsym] + jammy: [ros-humble-swri-console-dbgsym] +swri_dbw_interface: + ubuntu: + focal: [ros-humble-swri-dbw-interface] + jammy: [ros-humble-swri-dbw-interface] +swri_math_util: + ubuntu: + focal: [ros-humble-swri-math-util] + jammy: [ros-humble-swri-math-util] +swri_math_util_dbgsym: + ubuntu: + focal: [ros-humble-swri-math-util-dbgsym] + jammy: [ros-humble-swri-math-util-dbgsym] +swri_opencv_util: + ubuntu: + focal: [ros-humble-swri-opencv-util] + jammy: [ros-humble-swri-opencv-util] +swri_opencv_util_dbgsym: + ubuntu: + focal: [ros-humble-swri-opencv-util-dbgsym] + jammy: [ros-humble-swri-opencv-util-dbgsym] +swri_prefix_tools: + ubuntu: + focal: [ros-humble-swri-prefix-tools] + jammy: [ros-humble-swri-prefix-tools] +swri_serial_util: + ubuntu: + focal: [ros-humble-swri-serial-util] + jammy: [ros-humble-swri-serial-util] +swri_serial_util_dbgsym: + ubuntu: + focal: [ros-humble-swri-serial-util-dbgsym] + jammy: [ros-humble-swri-serial-util-dbgsym] +swri_system_util: + ubuntu: + focal: [ros-humble-swri-system-util] + jammy: [ros-humble-swri-system-util] +swri_system_util_dbgsym: + ubuntu: + focal: [ros-humble-swri-system-util-dbgsym] + jammy: [ros-humble-swri-system-util-dbgsym] +system_fingerprint: + ubuntu: + focal: [ros-humble-system-fingerprint] + jammy: [ros-humble-system-fingerprint] +system_modes: + ubuntu: + focal: [ros-humble-system-modes] + jammy: [ros-humble-system-modes] +system_modes_dbgsym: + ubuntu: + focal: [ros-humble-system-modes-dbgsym] + jammy: [ros-humble-system-modes-dbgsym] +system_modes_examples: + ubuntu: + focal: [ros-humble-system-modes-examples] + jammy: [ros-humble-system-modes-examples] +system_modes_examples_dbgsym: + ubuntu: + focal: [ros-humble-system-modes-examples-dbgsym] + jammy: [ros-humble-system-modes-examples-dbgsym] +system_modes_msgs: + ubuntu: + focal: [ros-humble-system-modes-msgs] + jammy: [ros-humble-system-modes-msgs] +system_modes_msgs_dbgsym: + ubuntu: + focal: [ros-humble-system-modes-msgs-dbgsym] + jammy: [ros-humble-system-modes-msgs-dbgsym] +tango_icons_vendor: + ubuntu: + focal: [ros-humble-tango-icons-vendor] + jammy: [ros-humble-tango-icons-vendor] +tcb_span: + ubuntu: + focal: [ros-humble-tcb-span] + jammy: [ros-humble-tcb-span] +teleop_tools: + ubuntu: + focal: [ros-humble-teleop-tools] + jammy: [ros-humble-teleop-tools] +teleop_tools_msgs: + ubuntu: + focal: [ros-humble-teleop-tools-msgs] + jammy: [ros-humble-teleop-tools-msgs] +teleop_tools_msgs_dbgsym: + ubuntu: + focal: [ros-humble-teleop-tools-msgs-dbgsym] + jammy: [ros-humble-teleop-tools-msgs-dbgsym] +teleop_twist_joy: + ubuntu: + focal: [ros-humble-teleop-twist-joy] + jammy: [ros-humble-teleop-twist-joy] +teleop_twist_joy_dbgsym: + ubuntu: + focal: [ros-humble-teleop-twist-joy-dbgsym] + jammy: [ros-humble-teleop-twist-joy-dbgsym] +teleop_twist_keyboard: + ubuntu: + focal: [ros-humble-teleop-twist-keyboard] + jammy: [ros-humble-teleop-twist-keyboard] +tensorrt_cmake_module: + ubuntu: + focal: [ros-humble-tensorrt-cmake-module] + jammy: [ros-humble-tensorrt-cmake-module] +test_apex_test_tools: + ubuntu: + focal: [ros-humble-test-apex-test-tools] + jammy: [ros-humble-test-apex-test-tools] +test_interface_files: + ubuntu: + focal: [ros-humble-test-interface-files] + jammy: [ros-humble-test-interface-files] +test_msgs: + ubuntu: + focal: [ros-humble-test-msgs] + jammy: [ros-humble-test-msgs] +test_msgs_dbgsym: + ubuntu: + focal: [ros-humble-test-msgs-dbgsym] + jammy: [ros-humble-test-msgs-dbgsym] +tf2: + ubuntu: + focal: [ros-humble-tf2] + jammy: [ros-humble-tf2] +tf2_bullet: + ubuntu: + focal: [ros-humble-tf2-bullet] + jammy: [ros-humble-tf2-bullet] +tf2_dbgsym: + ubuntu: + focal: [ros-humble-tf2-dbgsym] + jammy: [ros-humble-tf2-dbgsym] +tf2_eigen: + ubuntu: + focal: [ros-humble-tf2-eigen] + jammy: [ros-humble-tf2-eigen] +tf2_eigen_kdl: + ubuntu: + focal: [ros-humble-tf2-eigen-kdl] + jammy: [ros-humble-tf2-eigen-kdl] +tf2_eigen_kdl_dbgsym: + ubuntu: + focal: [ros-humble-tf2-eigen-kdl-dbgsym] + jammy: [ros-humble-tf2-eigen-kdl-dbgsym] +tf2_geometry_msgs: + ubuntu: + focal: [ros-humble-tf2-geometry-msgs] + jammy: [ros-humble-tf2-geometry-msgs] +tf2_kdl: + ubuntu: + focal: [ros-humble-tf2-kdl] + jammy: [ros-humble-tf2-kdl] +tf2_msgs: + ubuntu: + focal: [ros-humble-tf2-msgs] + jammy: [ros-humble-tf2-msgs] +tf2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tf2-msgs-dbgsym] + jammy: [ros-humble-tf2-msgs-dbgsym] +tf2_py: + ubuntu: + focal: [ros-humble-tf2-py] + jammy: [ros-humble-tf2-py] +tf2_py_dbgsym: + ubuntu: + focal: [ros-humble-tf2-py-dbgsym] + jammy: [ros-humble-tf2-py-dbgsym] +tf2_ros: + ubuntu: + focal: [ros-humble-tf2-ros] + jammy: [ros-humble-tf2-ros] +tf2_ros_dbgsym: + ubuntu: + focal: [ros-humble-tf2-ros-dbgsym] + jammy: [ros-humble-tf2-ros-dbgsym] +tf2_ros_py: + ubuntu: + focal: [ros-humble-tf2-ros-py] + jammy: [ros-humble-tf2-ros-py] +tf2_sensor_msgs: + ubuntu: + focal: [ros-humble-tf2-sensor-msgs] + jammy: [ros-humble-tf2-sensor-msgs] +tf2_tools: + ubuntu: + focal: [ros-humble-tf2-tools] + jammy: [ros-humble-tf2-tools] +tf_transformations: + ubuntu: + focal: [ros-humble-tf-transformations] + jammy: [ros-humble-tf-transformations] +theora_image_transport: + ubuntu: + focal: [ros-humble-theora-image-transport] + jammy: [ros-humble-theora-image-transport] +theora_image_transport_dbgsym: + ubuntu: + focal: [ros-humble-theora-image-transport-dbgsym] + jammy: [ros-humble-theora-image-transport-dbgsym] +tiago_2dnav: + ubuntu: + focal: [ros-humble-tiago-2dnav] + jammy: [ros-humble-tiago-2dnav] +tiago_bringup: + ubuntu: + focal: [ros-humble-tiago-bringup] + jammy: [ros-humble-tiago-bringup] +tiago_controller_configuration: + ubuntu: + focal: [ros-humble-tiago-controller-configuration] + jammy: [ros-humble-tiago-controller-configuration] +tiago_description: + ubuntu: + focal: [ros-humble-tiago-description] + jammy: [ros-humble-tiago-description] +tiago_laser_sensors: + ubuntu: + focal: [ros-humble-tiago-laser-sensors] + jammy: [ros-humble-tiago-laser-sensors] +tiago_moveit_config: + ubuntu: + focal: [ros-humble-tiago-moveit-config] + jammy: [ros-humble-tiago-moveit-config] +tiago_navigation: + ubuntu: + focal: [ros-humble-tiago-navigation] + jammy: [ros-humble-tiago-navigation] +tiago_robot: + ubuntu: + focal: [ros-humble-tiago-robot] + jammy: [ros-humble-tiago-robot] +tinyspline_vendor: + ubuntu: + focal: [ros-humble-tinyspline-vendor] + jammy: [ros-humble-tinyspline-vendor] +tinyspline_vendor_dbgsym: + ubuntu: + focal: [ros-humble-tinyspline-vendor-dbgsym] + jammy: [ros-humble-tinyspline-vendor-dbgsym] +tinyxml2_vendor: + ubuntu: + focal: [ros-humble-tinyxml2-vendor] + jammy: [ros-humble-tinyxml2-vendor] +tinyxml_vendor: + ubuntu: + focal: [ros-humble-tinyxml-vendor] + jammy: [ros-humble-tinyxml-vendor] +tl_expected: + ubuntu: + focal: [ros-humble-tl-expected] + jammy: [ros-humble-tl-expected] +tlsf: + ubuntu: + focal: [ros-humble-tlsf] + jammy: [ros-humble-tlsf] +tlsf_cpp: + ubuntu: + focal: [ros-humble-tlsf-cpp] + jammy: [ros-humble-tlsf-cpp] +tlsf_cpp_dbgsym: + ubuntu: + focal: [ros-humble-tlsf-cpp-dbgsym] + jammy: [ros-humble-tlsf-cpp-dbgsym] +topic_based_ros2_control: + ubuntu: + focal: [ros-humble-topic-based-ros2-control] + jammy: [ros-humble-topic-based-ros2-control] +topic_based_ros2_control_dbgsym: + ubuntu: + focal: [ros-humble-topic-based-ros2-control-dbgsym] + jammy: [ros-humble-topic-based-ros2-control-dbgsym] +topic_monitor: + ubuntu: + focal: [ros-humble-topic-monitor] + jammy: [ros-humble-topic-monitor] +topic_statistics_demo: + ubuntu: + focal: [ros-humble-topic-statistics-demo] + jammy: [ros-humble-topic-statistics-demo] +topic_statistics_demo_dbgsym: + ubuntu: + focal: [ros-humble-topic-statistics-demo-dbgsym] + jammy: [ros-humble-topic-statistics-demo-dbgsym] +topic_tools: + ubuntu: + focal: [ros-humble-topic-tools] + jammy: [ros-humble-topic-tools] +topic_tools_dbgsym: + ubuntu: + focal: [ros-humble-topic-tools-dbgsym] + jammy: [ros-humble-topic-tools-dbgsym] +topic_tools_interfaces: + ubuntu: + focal: [ros-humble-topic-tools-interfaces] + jammy: [ros-humble-topic-tools-interfaces] +topic_tools_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-topic-tools-interfaces-dbgsym] + jammy: [ros-humble-topic-tools-interfaces-dbgsym] +tracetools: + ubuntu: + focal: [ros-humble-tracetools] + jammy: [ros-humble-tracetools] +tracetools_acceleration: + ubuntu: + focal: [ros-humble-tracetools-acceleration] + jammy: [ros-humble-tracetools-acceleration] +tracetools_acceleration_dbgsym: + ubuntu: + focal: [ros-humble-tracetools-acceleration-dbgsym] + jammy: [ros-humble-tracetools-acceleration-dbgsym] +tracetools_analysis: + ubuntu: + focal: [ros-humble-tracetools-analysis] + jammy: [ros-humble-tracetools-analysis] +tracetools_dbgsym: + ubuntu: + focal: [ros-humble-tracetools-dbgsym] + jammy: [ros-humble-tracetools-dbgsym] +tracetools_image_pipeline: + ubuntu: + focal: [ros-humble-tracetools-image-pipeline] + jammy: [ros-humble-tracetools-image-pipeline] +tracetools_image_pipeline_dbgsym: + ubuntu: + focal: [ros-humble-tracetools-image-pipeline-dbgsym] + jammy: [ros-humble-tracetools-image-pipeline-dbgsym] +tracetools_launch: + ubuntu: + focal: [ros-humble-tracetools-launch] + jammy: [ros-humble-tracetools-launch] +tracetools_read: + ubuntu: + focal: [ros-humble-tracetools-read] + jammy: [ros-humble-tracetools-read] +tracetools_test: + ubuntu: + focal: [ros-humble-tracetools-test] + jammy: [ros-humble-tracetools-test] +tracetools_trace: + ubuntu: + focal: [ros-humble-tracetools-trace] + jammy: [ros-humble-tracetools-trace] +trajectory_msgs: + ubuntu: + focal: [ros-humble-trajectory-msgs] + jammy: [ros-humble-trajectory-msgs] +trajectory_msgs_dbgsym: + ubuntu: + focal: [ros-humble-trajectory-msgs-dbgsym] + jammy: [ros-humble-trajectory-msgs-dbgsym] +transmission_interface: + ubuntu: + focal: [ros-humble-transmission-interface] + jammy: [ros-humble-transmission-interface] +transmission_interface_dbgsym: + ubuntu: + focal: [ros-humble-transmission-interface-dbgsym] + jammy: [ros-humble-transmission-interface-dbgsym] +tricycle_controller: + ubuntu: + focal: [ros-humble-tricycle-controller] + jammy: [ros-humble-tricycle-controller] +tricycle_controller_dbgsym: + ubuntu: + focal: [ros-humble-tricycle-controller-dbgsym] + jammy: [ros-humble-tricycle-controller-dbgsym] +tricycle_steering_controller: + ubuntu: + focal: [ros-humble-tricycle-steering-controller] + jammy: [ros-humble-tricycle-steering-controller] +tricycle_steering_controller_dbgsym: + ubuntu: + focal: [ros-humble-tricycle-steering-controller-dbgsym] + jammy: [ros-humble-tricycle-steering-controller-dbgsym] +turbojpeg_compressed_image_transport: + ubuntu: + focal: [ros-humble-turbojpeg-compressed-image-transport] + jammy: [ros-humble-turbojpeg-compressed-image-transport] +turbojpeg_compressed_image_transport_dbgsym: + ubuntu: + focal: [ros-humble-turbojpeg-compressed-image-transport-dbgsym] + jammy: [ros-humble-turbojpeg-compressed-image-transport-dbgsym] +turtle_tf2_cpp: + ubuntu: + focal: [ros-humble-turtle-tf2-cpp] + jammy: [ros-humble-turtle-tf2-cpp] +turtle_tf2_cpp_dbgsym: + ubuntu: + focal: [ros-humble-turtle-tf2-cpp-dbgsym] + jammy: [ros-humble-turtle-tf2-cpp-dbgsym] +turtle_tf2_py: + ubuntu: + focal: [ros-humble-turtle-tf2-py] + jammy: [ros-humble-turtle-tf2-py] +turtlebot3: + ubuntu: + focal: [ros-humble-turtlebot3] + jammy: [ros-humble-turtlebot3] +turtlebot3_bringup: + ubuntu: + focal: [ros-humble-turtlebot3-bringup] + jammy: [ros-humble-turtlebot3-bringup] +turtlebot3_cartographer: + ubuntu: + focal: [ros-humble-turtlebot3-cartographer] + jammy: [ros-humble-turtlebot3-cartographer] +turtlebot3_description: + ubuntu: + focal: [ros-humble-turtlebot3-description] + jammy: [ros-humble-turtlebot3-description] +turtlebot3_example: + ubuntu: + focal: [ros-humble-turtlebot3-example] + jammy: [ros-humble-turtlebot3-example] +turtlebot3_fake_node: + ubuntu: + focal: [ros-humble-turtlebot3-fake-node] + jammy: [ros-humble-turtlebot3-fake-node] +turtlebot3_fake_node_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot3-fake-node-dbgsym] + jammy: [ros-humble-turtlebot3-fake-node-dbgsym] +turtlebot3_manipulation_cartographer: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-cartographer] + jammy: [ros-humble-turtlebot3-manipulation-cartographer] +turtlebot3_manipulation_description: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-description] + jammy: [ros-humble-turtlebot3-manipulation-description] +turtlebot3_manipulation_hardware: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-hardware] + jammy: [ros-humble-turtlebot3-manipulation-hardware] +turtlebot3_manipulation_hardware_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-hardware-dbgsym] + jammy: [ros-humble-turtlebot3-manipulation-hardware-dbgsym] +turtlebot3_manipulation_moveit_config: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-moveit-config] + jammy: [ros-humble-turtlebot3-manipulation-moveit-config] +turtlebot3_manipulation_navigation2: + ubuntu: + focal: [ros-humble-turtlebot3-manipulation-navigation2] + jammy: [ros-humble-turtlebot3-manipulation-navigation2] +turtlebot3_msgs: + ubuntu: + focal: [ros-humble-turtlebot3-msgs] + jammy: [ros-humble-turtlebot3-msgs] +turtlebot3_msgs_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot3-msgs-dbgsym] + jammy: [ros-humble-turtlebot3-msgs-dbgsym] +turtlebot3_navigation2: + ubuntu: + focal: [ros-humble-turtlebot3-navigation2] + jammy: [ros-humble-turtlebot3-navigation2] +turtlebot3_node: + ubuntu: + focal: [ros-humble-turtlebot3-node] + jammy: [ros-humble-turtlebot3-node] +turtlebot3_node_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot3-node-dbgsym] + jammy: [ros-humble-turtlebot3-node-dbgsym] +turtlebot3_teleop: + ubuntu: + focal: [ros-humble-turtlebot3-teleop] + jammy: [ros-humble-turtlebot3-teleop] +turtlebot4_base: + ubuntu: + focal: [ros-humble-turtlebot4-base] + jammy: [ros-humble-turtlebot4-base] +turtlebot4_base_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-base-dbgsym] + jammy: [ros-humble-turtlebot4-base-dbgsym] +turtlebot4_bringup: + ubuntu: + focal: [ros-humble-turtlebot4-bringup] + jammy: [ros-humble-turtlebot4-bringup] +turtlebot4_cpp_tutorials: + ubuntu: + focal: [ros-humble-turtlebot4-cpp-tutorials] + jammy: [ros-humble-turtlebot4-cpp-tutorials] +turtlebot4_cpp_tutorials_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-cpp-tutorials-dbgsym] + jammy: [ros-humble-turtlebot4-cpp-tutorials-dbgsym] +turtlebot4_description: + ubuntu: + focal: [ros-humble-turtlebot4-description] + jammy: [ros-humble-turtlebot4-description] +turtlebot4_desktop: + ubuntu: + focal: [ros-humble-turtlebot4-desktop] + jammy: [ros-humble-turtlebot4-desktop] +turtlebot4_diagnostics: + ubuntu: + focal: [ros-humble-turtlebot4-diagnostics] + jammy: [ros-humble-turtlebot4-diagnostics] +turtlebot4_ignition_bringup: + ubuntu: + focal: [ros-humble-turtlebot4-ignition-bringup] + jammy: [ros-humble-turtlebot4-ignition-bringup] +turtlebot4_ignition_gui_plugins: + ubuntu: + focal: [ros-humble-turtlebot4-ignition-gui-plugins] + jammy: [ros-humble-turtlebot4-ignition-gui-plugins] +turtlebot4_ignition_gui_plugins_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-ignition-gui-plugins-dbgsym] + jammy: [ros-humble-turtlebot4-ignition-gui-plugins-dbgsym] +turtlebot4_ignition_toolbox: + ubuntu: + focal: [ros-humble-turtlebot4-ignition-toolbox] + jammy: [ros-humble-turtlebot4-ignition-toolbox] +turtlebot4_ignition_toolbox_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-ignition-toolbox-dbgsym] + jammy: [ros-humble-turtlebot4-ignition-toolbox-dbgsym] +turtlebot4_msgs: + ubuntu: + focal: [ros-humble-turtlebot4-msgs] + jammy: [ros-humble-turtlebot4-msgs] +turtlebot4_msgs_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-msgs-dbgsym] + jammy: [ros-humble-turtlebot4-msgs-dbgsym] +turtlebot4_navigation: + ubuntu: + focal: [ros-humble-turtlebot4-navigation] + jammy: [ros-humble-turtlebot4-navigation] +turtlebot4_node: + ubuntu: + focal: [ros-humble-turtlebot4-node] + jammy: [ros-humble-turtlebot4-node] +turtlebot4_node_dbgsym: + ubuntu: + focal: [ros-humble-turtlebot4-node-dbgsym] + jammy: [ros-humble-turtlebot4-node-dbgsym] +turtlebot4_python_tutorials: + ubuntu: + focal: [ros-humble-turtlebot4-python-tutorials] + jammy: [ros-humble-turtlebot4-python-tutorials] +turtlebot4_robot: + ubuntu: + focal: [ros-humble-turtlebot4-robot] + jammy: [ros-humble-turtlebot4-robot] +turtlebot4_setup: + ubuntu: + focal: [ros-humble-turtlebot4-setup] + jammy: [ros-humble-turtlebot4-setup] +turtlebot4_simulator: + ubuntu: + focal: [ros-humble-turtlebot4-simulator] + jammy: [ros-humble-turtlebot4-simulator] +turtlebot4_tests: + ubuntu: + focal: [ros-humble-turtlebot4-tests] + jammy: [ros-humble-turtlebot4-tests] +turtlebot4_tutorials: + ubuntu: + focal: [ros-humble-turtlebot4-tutorials] + jammy: [ros-humble-turtlebot4-tutorials] +turtlebot4_viz: + ubuntu: + focal: [ros-humble-turtlebot4-viz] + jammy: [ros-humble-turtlebot4-viz] +turtlesim: + ubuntu: + focal: [ros-humble-turtlesim] + jammy: [ros-humble-turtlesim] +turtlesim_dbgsym: + ubuntu: + focal: [ros-humble-turtlesim-dbgsym] + jammy: [ros-humble-turtlesim-dbgsym] +tuw_airskin_msgs: + ubuntu: + focal: [ros-humble-tuw-airskin-msgs] + jammy: [ros-humble-tuw-airskin-msgs] +tuw_airskin_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tuw-airskin-msgs-dbgsym] + jammy: [ros-humble-tuw-airskin-msgs-dbgsym] +tuw_geometry: + ubuntu: + focal: [ros-humble-tuw-geometry] + jammy: [ros-humble-tuw-geometry] +tuw_geometry_dbgsym: + ubuntu: + focal: [ros-humble-tuw-geometry-dbgsym] + jammy: [ros-humble-tuw-geometry-dbgsym] +tuw_geometry_msgs: + ubuntu: + focal: [ros-humble-tuw-geometry-msgs] + jammy: [ros-humble-tuw-geometry-msgs] +tuw_geometry_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tuw-geometry-msgs-dbgsym] + jammy: [ros-humble-tuw-geometry-msgs-dbgsym] +tuw_msgs: + ubuntu: + focal: [ros-humble-tuw-msgs] + jammy: [ros-humble-tuw-msgs] +tuw_multi_robot_msgs: + ubuntu: + focal: [ros-humble-tuw-multi-robot-msgs] + jammy: [ros-humble-tuw-multi-robot-msgs] +tuw_multi_robot_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tuw-multi-robot-msgs-dbgsym] + jammy: [ros-humble-tuw-multi-robot-msgs-dbgsym] +tuw_nav_msgs: + ubuntu: + focal: [ros-humble-tuw-nav-msgs] + jammy: [ros-humble-tuw-nav-msgs] +tuw_nav_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tuw-nav-msgs-dbgsym] + jammy: [ros-humble-tuw-nav-msgs-dbgsym] +tuw_object_msgs: + ubuntu: + focal: [ros-humble-tuw-object-msgs] + jammy: [ros-humble-tuw-object-msgs] +tuw_object_msgs_dbgsym: + ubuntu: + focal: [ros-humble-tuw-object-msgs-dbgsym] + jammy: [ros-humble-tuw-object-msgs-dbgsym] +tvm_vendor: + ubuntu: + focal: [ros-humble-tvm-vendor] + jammy: [ros-humble-tvm-vendor] +tvm_vendor_dbgsym: + ubuntu: + focal: [ros-humble-tvm-vendor-dbgsym] + jammy: [ros-humble-tvm-vendor-dbgsym] +twist_mux: + ubuntu: + focal: [ros-humble-twist-mux] + jammy: [ros-humble-twist-mux] +twist_mux_dbgsym: + ubuntu: + focal: [ros-humble-twist-mux-dbgsym] + jammy: [ros-humble-twist-mux-dbgsym] +twist_mux_msgs: + ubuntu: + focal: [ros-humble-twist-mux-msgs] + jammy: [ros-humble-twist-mux-msgs] +twist_mux_msgs_dbgsym: + ubuntu: + focal: [ros-humble-twist-mux-msgs-dbgsym] + jammy: [ros-humble-twist-mux-msgs-dbgsym] +twist_stamper: + ubuntu: + focal: [ros-humble-twist-stamper] + jammy: [ros-humble-twist-stamper] +ublox: + ubuntu: + focal: [ros-humble-ublox] + jammy: [ros-humble-ublox] +ublox_dgnss: + ubuntu: + focal: [ros-humble-ublox-dgnss] + jammy: [ros-humble-ublox-dgnss] +ublox_dgnss_node: + ubuntu: + focal: [ros-humble-ublox-dgnss-node] + jammy: [ros-humble-ublox-dgnss-node] +ublox_dgnss_node_dbgsym: + ubuntu: + focal: [ros-humble-ublox-dgnss-node-dbgsym] + jammy: [ros-humble-ublox-dgnss-node-dbgsym] +ublox_gps: + ubuntu: + focal: [ros-humble-ublox-gps] + jammy: [ros-humble-ublox-gps] +ublox_gps_dbgsym: + ubuntu: + focal: [ros-humble-ublox-gps-dbgsym] + jammy: [ros-humble-ublox-gps-dbgsym] +ublox_msgs: + ubuntu: + focal: [ros-humble-ublox-msgs] + jammy: [ros-humble-ublox-msgs] +ublox_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ublox-msgs-dbgsym] + jammy: [ros-humble-ublox-msgs-dbgsym] +ublox_nav_sat_fix_hp_node: + ubuntu: + focal: [ros-humble-ublox-nav-sat-fix-hp-node] + jammy: [ros-humble-ublox-nav-sat-fix-hp-node] +ublox_nav_sat_fix_hp_node_dbgsym: + ubuntu: + focal: [ros-humble-ublox-nav-sat-fix-hp-node-dbgsym] + jammy: [ros-humble-ublox-nav-sat-fix-hp-node-dbgsym] +ublox_serialization: + ubuntu: + focal: [ros-humble-ublox-serialization] + jammy: [ros-humble-ublox-serialization] +ublox_ubx_interfaces: + ubuntu: + focal: [ros-humble-ublox-ubx-interfaces] + jammy: [ros-humble-ublox-ubx-interfaces] +ublox_ubx_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-ublox-ubx-interfaces-dbgsym] + jammy: [ros-humble-ublox-ubx-interfaces-dbgsym] +ublox_ubx_msgs: + ubuntu: + focal: [ros-humble-ublox-ubx-msgs] + jammy: [ros-humble-ublox-ubx-msgs] +ublox_ubx_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ublox-ubx-msgs-dbgsym] + jammy: [ros-humble-ublox-ubx-msgs-dbgsym] +udp_driver: + ubuntu: + focal: [ros-humble-udp-driver] + jammy: [ros-humble-udp-driver] +udp_driver_dbgsym: + ubuntu: + focal: [ros-humble-udp-driver-dbgsym] + jammy: [ros-humble-udp-driver-dbgsym] +udp_msgs: + ubuntu: + focal: [ros-humble-udp-msgs] + jammy: [ros-humble-udp-msgs] +udp_msgs_dbgsym: + ubuntu: + focal: [ros-humble-udp-msgs-dbgsym] + jammy: [ros-humble-udp-msgs-dbgsym] +uncrustify_vendor: + ubuntu: + focal: [ros-humble-uncrustify-vendor] + jammy: [ros-humble-uncrustify-vendor] +uncrustify_vendor_dbgsym: + ubuntu: + focal: [ros-humble-uncrustify-vendor-dbgsym] + jammy: [ros-humble-uncrustify-vendor-dbgsym] +unique_identifier_msgs: + ubuntu: + focal: [ros-humble-unique-identifier-msgs] + jammy: [ros-humble-unique-identifier-msgs] +unique_identifier_msgs_dbgsym: + ubuntu: + focal: [ros-humble-unique-identifier-msgs-dbgsym] + jammy: [ros-humble-unique-identifier-msgs-dbgsym] +ur: + ubuntu: + focal: [ros-humble-ur] + jammy: [ros-humble-ur] +ur_bringup: + ubuntu: + focal: [ros-humble-ur-bringup] + jammy: [ros-humble-ur-bringup] +ur_calibration: + ubuntu: + focal: [ros-humble-ur-calibration] + jammy: [ros-humble-ur-calibration] +ur_calibration_dbgsym: + ubuntu: + focal: [ros-humble-ur-calibration-dbgsym] + jammy: [ros-humble-ur-calibration-dbgsym] +ur_client_library: + ubuntu: + focal: [ros-humble-ur-client-library] + jammy: [ros-humble-ur-client-library] +ur_client_library_dbgsym: + ubuntu: + focal: [ros-humble-ur-client-library-dbgsym] + jammy: [ros-humble-ur-client-library-dbgsym] +ur_controllers: + ubuntu: + focal: [ros-humble-ur-controllers] + jammy: [ros-humble-ur-controllers] +ur_controllers_dbgsym: + ubuntu: + focal: [ros-humble-ur-controllers-dbgsym] + jammy: [ros-humble-ur-controllers-dbgsym] +ur_dashboard_msgs: + ubuntu: + focal: [ros-humble-ur-dashboard-msgs] + jammy: [ros-humble-ur-dashboard-msgs] +ur_dashboard_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ur-dashboard-msgs-dbgsym] + jammy: [ros-humble-ur-dashboard-msgs-dbgsym] +ur_description: + ubuntu: + focal: [ros-humble-ur-description] + jammy: [ros-humble-ur-description] +ur_moveit_config: + ubuntu: + focal: [ros-humble-ur-moveit-config] + jammy: [ros-humble-ur-moveit-config] +ur_msgs: + ubuntu: + focal: [ros-humble-ur-msgs] + jammy: [ros-humble-ur-msgs] +ur_msgs_dbgsym: + ubuntu: + focal: [ros-humble-ur-msgs-dbgsym] + jammy: [ros-humble-ur-msgs-dbgsym] +ur_robot_driver: + ubuntu: + focal: [ros-humble-ur-robot-driver] + jammy: [ros-humble-ur-robot-driver] +ur_robot_driver_dbgsym: + ubuntu: + focal: [ros-humble-ur-robot-driver-dbgsym] + jammy: [ros-humble-ur-robot-driver-dbgsym] +urdf: + ubuntu: + focal: [ros-humble-urdf] + jammy: [ros-humble-urdf] +urdf_dbgsym: + ubuntu: + focal: [ros-humble-urdf-dbgsym] + jammy: [ros-humble-urdf-dbgsym] +urdf_launch: + ubuntu: + focal: [ros-humble-urdf-launch] + jammy: [ros-humble-urdf-launch] +urdf_parser_plugin: + ubuntu: + focal: [ros-humble-urdf-parser-plugin] + jammy: [ros-humble-urdf-parser-plugin] +urdf_test: + ubuntu: + focal: [ros-humble-urdf-test] + jammy: [ros-humble-urdf-test] +urdf_tutorial: + ubuntu: + focal: [ros-humble-urdf-tutorial] + jammy: [ros-humble-urdf-tutorial] +urdfdom: + ubuntu: + focal: [ros-humble-urdfdom] + jammy: [ros-humble-urdfdom] +urdfdom_dbgsym: + ubuntu: + focal: [ros-humble-urdfdom-dbgsym] + jammy: [ros-humble-urdfdom-dbgsym] +urdfdom_headers: + ubuntu: + focal: [ros-humble-urdfdom-headers] + jammy: [ros-humble-urdfdom-headers] +urdfdom_py: + ubuntu: + focal: [ros-humble-urdfdom-py] + jammy: [ros-humble-urdfdom-py] +urg_c: + ubuntu: + focal: [ros-humble-urg-c] + jammy: [ros-humble-urg-c] +urg_c_dbgsym: + ubuntu: + focal: [ros-humble-urg-c-dbgsym] + jammy: [ros-humble-urg-c-dbgsym] +urg_node: + ubuntu: + focal: [ros-humble-urg-node] + jammy: [ros-humble-urg-node] +urg_node_dbgsym: + ubuntu: + focal: [ros-humble-urg-node-dbgsym] + jammy: [ros-humble-urg-node-dbgsym] +urg_node_msgs: + ubuntu: + focal: [ros-humble-urg-node-msgs] + jammy: [ros-humble-urg-node-msgs] +urg_node_msgs_dbgsym: + ubuntu: + focal: [ros-humble-urg-node-msgs-dbgsym] + jammy: [ros-humble-urg-node-msgs-dbgsym] +usb_cam: + ubuntu: + focal: [ros-humble-usb-cam] + jammy: [ros-humble-usb-cam] +usb_cam_dbgsym: + ubuntu: + focal: [ros-humble-usb-cam-dbgsym] + jammy: [ros-humble-usb-cam-dbgsym] +v4l2_camera: + ubuntu: + focal: [ros-humble-v4l2-camera] + jammy: [ros-humble-v4l2-camera] +v4l2_camera_dbgsym: + ubuntu: + focal: [ros-humble-v4l2-camera-dbgsym] + jammy: [ros-humble-v4l2-camera-dbgsym] +vda5050_msgs: + ubuntu: + focal: [ros-humble-vda5050-msgs] + jammy: [ros-humble-vda5050-msgs] +velocity_controllers: + ubuntu: + focal: [ros-humble-velocity-controllers] + jammy: [ros-humble-velocity-controllers] +velocity_controllers_dbgsym: + ubuntu: + focal: [ros-humble-velocity-controllers-dbgsym] + jammy: [ros-humble-velocity-controllers-dbgsym] +velodyne: + ubuntu: + focal: [ros-humble-velodyne] + jammy: [ros-humble-velodyne] +velodyne_description: + ubuntu: + focal: [ros-humble-velodyne-description] + jammy: [ros-humble-velodyne-description] +velodyne_driver: + ubuntu: + focal: [ros-humble-velodyne-driver] + jammy: [ros-humble-velodyne-driver] +velodyne_driver_dbgsym: + ubuntu: + focal: [ros-humble-velodyne-driver-dbgsym] + jammy: [ros-humble-velodyne-driver-dbgsym] +velodyne_laserscan: + ubuntu: + focal: [ros-humble-velodyne-laserscan] + jammy: [ros-humble-velodyne-laserscan] +velodyne_laserscan_dbgsym: + ubuntu: + focal: [ros-humble-velodyne-laserscan-dbgsym] + jammy: [ros-humble-velodyne-laserscan-dbgsym] +velodyne_msgs: + ubuntu: + focal: [ros-humble-velodyne-msgs] + jammy: [ros-humble-velodyne-msgs] +velodyne_msgs_dbgsym: + ubuntu: + focal: [ros-humble-velodyne-msgs-dbgsym] + jammy: [ros-humble-velodyne-msgs-dbgsym] +velodyne_pointcloud: + ubuntu: + focal: [ros-humble-velodyne-pointcloud] + jammy: [ros-humble-velodyne-pointcloud] +velodyne_pointcloud_dbgsym: + ubuntu: + focal: [ros-humble-velodyne-pointcloud-dbgsym] + jammy: [ros-humble-velodyne-pointcloud-dbgsym] +vision_msgs: + ubuntu: + focal: [ros-humble-vision-msgs] + jammy: [ros-humble-vision-msgs] +vision_msgs_dbgsym: + ubuntu: + focal: [ros-humble-vision-msgs-dbgsym] + jammy: [ros-humble-vision-msgs-dbgsym] +vision_msgs_layers: + ubuntu: + focal: [ros-humble-vision-msgs-layers] + jammy: [ros-humble-vision-msgs-layers] +vision_msgs_layers_dbgsym: + ubuntu: + focal: [ros-humble-vision-msgs-layers-dbgsym] + jammy: [ros-humble-vision-msgs-layers-dbgsym] +vision_msgs_rviz_plugins: + ubuntu: + focal: [ros-humble-vision-msgs-rviz-plugins] + jammy: [ros-humble-vision-msgs-rviz-plugins] +vision_msgs_rviz_plugins_dbgsym: + ubuntu: + focal: [ros-humble-vision-msgs-rviz-plugins-dbgsym] + jammy: [ros-humble-vision-msgs-rviz-plugins-dbgsym] +vision_opencv: + ubuntu: + focal: [ros-humble-vision-opencv] + jammy: [ros-humble-vision-opencv] +visp: + ubuntu: + focal: [ros-humble-visp] + jammy: [ros-humble-visp] +visp_dbgsym: + ubuntu: + focal: [ros-humble-visp-dbgsym] + jammy: [ros-humble-visp-dbgsym] +visualization_msgs: + ubuntu: + focal: [ros-humble-visualization-msgs] + jammy: [ros-humble-visualization-msgs] +visualization_msgs_dbgsym: + ubuntu: + focal: [ros-humble-visualization-msgs-dbgsym] + jammy: [ros-humble-visualization-msgs-dbgsym] +vitis_common: + ubuntu: + focal: [ros-humble-vitis-common] + jammy: [ros-humble-vitis-common] +vrpn: + ubuntu: + focal: [ros-humble-vrpn] + jammy: [ros-humble-vrpn] +vrpn_mocap: + ubuntu: + focal: [ros-humble-vrpn-mocap] + jammy: [ros-humble-vrpn-mocap] +vrpn_mocap_dbgsym: + ubuntu: + focal: [ros-humble-vrpn-mocap-dbgsym] + jammy: [ros-humble-vrpn-mocap-dbgsym] +wall_follower_ros2: + ubuntu: + focal: [ros-humble-wall-follower-ros2] + jammy: [ros-humble-wall-follower-ros2] +wall_follower_ros2_dbgsym: + ubuntu: + focal: [ros-humble-wall-follower-ros2-dbgsym] + jammy: [ros-humble-wall-follower-ros2-dbgsym] +warehouse_ros: + ubuntu: + focal: [ros-humble-warehouse-ros] + jammy: [ros-humble-warehouse-ros] +warehouse_ros_dbgsym: + ubuntu: + focal: [ros-humble-warehouse-ros-dbgsym] + jammy: [ros-humble-warehouse-ros-dbgsym] +warehouse_ros_sqlite: + ubuntu: + focal: [ros-humble-warehouse-ros-sqlite] + jammy: [ros-humble-warehouse-ros-sqlite] +warehouse_ros_sqlite_dbgsym: + ubuntu: + focal: [ros-humble-warehouse-ros-sqlite-dbgsym] + jammy: [ros-humble-warehouse-ros-sqlite-dbgsym] +webots_ros2_importer: + ubuntu: + focal: [ros-humble-webots-ros2-importer] + jammy: [ros-humble-webots-ros2-importer] +webots_ros2_msgs: + ubuntu: + focal: [ros-humble-webots-ros2-msgs] + jammy: [ros-humble-webots-ros2-msgs] +webots_ros2_msgs_dbgsym: + ubuntu: + focal: [ros-humble-webots-ros2-msgs-dbgsym] + jammy: [ros-humble-webots-ros2-msgs-dbgsym] +weight_scale_interfaces: + ubuntu: + focal: [ros-humble-weight-scale-interfaces] + jammy: [ros-humble-weight-scale-interfaces] +weight_scale_interfaces_dbgsym: + ubuntu: + focal: [ros-humble-weight-scale-interfaces-dbgsym] + jammy: [ros-humble-weight-scale-interfaces-dbgsym] +wiimote: + ubuntu: + focal: [ros-humble-wiimote] + jammy: [ros-humble-wiimote] +wiimote_dbgsym: + ubuntu: + focal: [ros-humble-wiimote-dbgsym] + jammy: [ros-humble-wiimote-dbgsym] +wiimote_msgs: + ubuntu: + focal: [ros-humble-wiimote-msgs] + jammy: [ros-humble-wiimote-msgs] +wiimote_msgs_dbgsym: + ubuntu: + focal: [ros-humble-wiimote-msgs-dbgsym] + jammy: [ros-humble-wiimote-msgs-dbgsym] +wireless_msgs: + ubuntu: + focal: [ros-humble-wireless-msgs] + jammy: [ros-humble-wireless-msgs] +wireless_msgs_dbgsym: + ubuntu: + focal: [ros-humble-wireless-msgs-dbgsym] + jammy: [ros-humble-wireless-msgs-dbgsym] +wireless_watcher: + ubuntu: + focal: [ros-humble-wireless-watcher] + jammy: [ros-humble-wireless-watcher] +x264: + ubuntu: + focal: [libx264-dev] + jammy: [libx264-dev] +xacro: + ubuntu: + focal: [ros-humble-xacro] + jammy: [ros-humble-xacro] +yaml_cpp_vendor: + ubuntu: + focal: [ros-humble-yaml-cpp-vendor] + jammy: [ros-humble-yaml-cpp-vendor] +zbar_ros: + ubuntu: + focal: [ros-humble-zbar-ros] + jammy: [ros-humble-zbar-ros] +zbar_ros_dbgsym: + ubuntu: + focal: [ros-humble-zbar-ros-dbgsym] + jammy: [ros-humble-zbar-ros-dbgsym] +zed_components: + ubuntu: + focal: [ros-humble-zed-components] + jammy: [ros-humble-zed-components] +zed_interfaces: + ubuntu: + focal: [ros-humble-zed-interfaces] + jammy: [ros-humble-zed-interfaces] +zed_ros2: + ubuntu: + focal: [ros-humble-zed-ros2] + jammy: [ros-humble-zed-ros2] +zed_wrapper: + ubuntu: + focal: [ros-humble-zed-wrapper] + jammy: [ros-humble-zed-wrapper] +zenoh_bridge_dds: + ubuntu: + focal: [ros-humble-zenoh-bridge-dds] + jammy: [ros-humble-zenoh-bridge-dds] +zenoh_bridge_dds_dbgsym: + ubuntu: + focal: [ros-humble-zenoh-bridge-dds-dbgsym] + jammy: [ros-humble-zenoh-bridge-dds-dbgsym] +zlib_point_cloud_transport: + ubuntu: + focal: [ros-humble-zlib-point-cloud-transport] + jammy: [ros-humble-zlib-point-cloud-transport] +zlib_point_cloud_transport_dbgsym: + ubuntu: + focal: [ros-humble-zlib-point-cloud-transport-dbgsym] + jammy: [ros-humble-zlib-point-cloud-transport-dbgsym] +zmqpp_vendor: + ubuntu: + focal: [ros-humble-zmqpp-vendor] + jammy: [ros-humble-zmqpp-vendor] +zmqpp_vendor_dbgsym: + ubuntu: + focal: [ros-humble-zmqpp-vendor-dbgsym] + jammy: [ros-humble-zmqpp-vendor-dbgsym] +zstd_point_cloud_transport: + ubuntu: + focal: [ros-humble-zstd-point-cloud-transport] + jammy: [ros-humble-zstd-point-cloud-transport] +zstd_point_cloud_transport_dbgsym: + ubuntu: + focal: [ros-humble-zstd-point-cloud-transport-dbgsym] + jammy: [ros-humble-zstd-point-cloud-transport-dbgsym] +zstd_vendor: + ubuntu: + focal: [ros-humble-zstd-vendor] + jammy: [ros-humble-zstd-vendor] +zstd_vendor_dbgsym: + ubuntu: + focal: [ros-humble-zstd-vendor-dbgsym] + jammy: [ros-humble-zstd-vendor-dbgsym] diff --git a/docker/scripts/install-zed-x86_64.sh b/docker/scripts/install-zed-x86_64.sh index 198aa796..484babc8 100644 --- a/docker/scripts/install-zed-x86_64.sh +++ b/docker/scripts/install-zed-x86_64.sh @@ -14,6 +14,10 @@ export CUDA_MINOR="$(nvcc --version | grep -o -P ' release .{0,4}' | cut -d. -f2 sudo apt-get update -y || true sudo apt-get install --no-install-recommends lsb-release wget less udev sudo zstd build-essential cmake libpng-dev libgomp1 -y +# TODO: Remove this when zed-ros2-wrapper has a compatible version with ZED_SDK 4.1 (which supports cuda 12.2). +CUDA_MAJOR=12 +CUDA_MINOR=1 + # Download zed SDK installation RUN file to /tmp directory cd /tmp wget -q -O ZED_SDK_Linux_Ubuntu${UBUNTU_RELEASE_YEAR}.run https://download.stereolabs.com/zedsdk/${ZED_SDK_MAJOR}.${ZED_SDK_MINOR}/cu${CUDA_MAJOR}${CUDA_MINOR%.*}/ubuntu${UBUNTU_RELEASE_YEAR} diff --git a/docker/scripts/workspace-entrypoint.sh b/docker/scripts/workspace-entrypoint.sh index 466cd88b..50c76cfd 100755 --- a/docker/scripts/workspace-entrypoint.sh +++ b/docker/scripts/workspace-entrypoint.sh @@ -12,9 +12,6 @@ echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> ~/.bashrc source /opt/ros/${ROS_DISTRO}/setup.bash -sudo apt-get update -rosdep update - # Restart udev daemon sudo service udev restart diff --git a/docker/tao/tao-converter-aarch64-tensorrt8.4.zip b/docker/tao/tao-converter-aarch64-tensorrt8.4.zip deleted file mode 100644 index 12e97d32..00000000 --- a/docker/tao/tao-converter-aarch64-tensorrt8.4.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:945a1a82ee638fbe7c7d4fd102a9764dd0a427b3983d95de9b68d697e3ae3fc2 -size 35923 diff --git a/isaac_ros_apriltag_interfaces/CMakeLists.txt b/isaac_ros_apriltag_interfaces/CMakeLists.txt index 774769b1..0dd5ed02 100644 --- a/isaac_ros_apriltag_interfaces/CMakeLists.txt +++ b/isaac_ros_apriltag_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_apriltag_interfaces/package.xml b/isaac_ros_apriltag_interfaces/package.xml index 78d1a9b3..803a39bb 100644 --- a/isaac_ros_apriltag_interfaces/package.xml +++ b/isaac_ros_apriltag_interfaces/package.xml @@ -11,17 +11,16 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_apriltag_interfaces - 2.1.0 + 3.0.0 Interfaces for performing Isaac ROS AprilTag detection - Hemal Shah + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Arjun Bhorkar Hemal Shah ament_cmake_auto - isaac_ros_common rosidl_default_generators rosidl_default_runtime diff --git a/isaac_ros_bi3d_interfaces/CMakeLists.txt b/isaac_ros_bi3d_interfaces/CMakeLists.txt index fb0ce136..bed59d3a 100644 --- a/isaac_ros_bi3d_interfaces/CMakeLists.txt +++ b/isaac_ros_bi3d_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_bi3d_interfaces/package.xml b/isaac_ros_bi3d_interfaces/package.xml index 4a225dda..cdc9c36a 100644 --- a/isaac_ros_bi3d_interfaces/package.xml +++ b/isaac_ros_bi3d_interfaces/package.xml @@ -11,10 +11,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_bi3d_interfaces - 2.1.0 + 3.0.0 Interfaces for Isaac ROS Bi3D - Hemal Shah + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Peter Du @@ -24,8 +24,6 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. std_msgs - isaac_ros_common - ament_lint_auto ament_lint_common diff --git a/isaac_ros_common/CMakeLists.txt b/isaac_ros_common/CMakeLists.txt index 9e4c9c2e..d9ed26fa 100644 --- a/isaac_ros_common/CMakeLists.txt +++ b/isaac_ros_common/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ find_package(vpi REQUIRED) # vpi utilities ament_auto_add_library(${PROJECT_NAME} SHARED src/vpi_utilities.cpp + src/qos.cpp ) target_link_libraries(${PROJECT_NAME} vpi) @@ -41,7 +42,14 @@ ament_index_register_resource(isaac_ros_common_cmake_path CONTENT "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/cmake") list(APPEND ${PROJECT_NAME}_CONFIG_EXTRAS cmake/isaac_ros_common-extras.cmake - cmake/isaac_ros_common-extras-modules.cmake) + cmake/isaac_ros_common-extras-modules.cmake + cmake/isaac_ros_common-extras-assets.cmake +) + +install( + DIRECTORY scripts/ + DESTINATION bin +) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) @@ -51,4 +59,4 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -ament_auto_package(INSTALL_TO_SHARE cmake) \ No newline at end of file +ament_auto_package(INSTALL_TO_SHARE cmake) diff --git a/isaac_ros_common/cmake/isaac_ros_common-extras-assets.cmake b/isaac_ros_common/cmake/isaac_ros_common-extras-assets.cmake new file mode 100644 index 00000000..b5c89862 --- /dev/null +++ b/isaac_ros_common/cmake/isaac_ros_common-extras-assets.cmake @@ -0,0 +1,54 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. + + +# Create a target that installs a single asset file. +# * An install script asset_scripts/{TARGET_NAME}.sh must be available. +# * The script must support a "--print-install-paths" arg that does nothing except printing a +# space-separated list of all outputs produced by the script. This is used to handle build +# dependencies. +function(install_isaac_ros_asset TARGET_NAME) + + set(INSTALL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/asset_scripts/${TARGET_NAME}.sh") + + if(NOT EXISTS "${INSTALL_SCRIPT}") + message(FATAL_ERROR "File not found: ${INSTALL_SCRIPT}") + endif() + + message(STATUS "Install script path: ${INSTALL_SCRIPT}") + + # Dry-run the install script to get the expected output path + execute_process(COMMAND + "${INSTALL_SCRIPT}" --print-install-paths + RESULT_VARIABLE DRYRUN_RESULT + OUTPUT_VARIABLE DRYRUN_STDOUT + ERROR_VARIABLE DRYRUN_STDERR + ) + + if(NOT ${DRYRUN_RESULT} STREQUAL "0") + message(FATAL_ERROR "${DRYRUN_STDOUT}\n${DRYRUN_STDERR}") + endif() + + # Make a CMAKE list out of the output paths + string(REPLACE " " ";" OUTPUT_PATHS ${DRYRUN_STDOUT}) + + message(STATUS "Installing asset: ${OUTPUT_PATHS}") + + # Add a command with a cmake-recognized output that calls the script + add_custom_command( + OUTPUT ${OUTPUT_PATHS} + COMMAND ${INSTALL_SCRIPT} + ) + + # Hook the command up with a target + add_custom_target("${TARGET_NAME}" ALL DEPENDS ${OUTPUT_PATHS}) +endfunction() + + + + diff --git a/isaac_ros_common/cmake/isaac_ros_common-extras-modules.cmake b/isaac_ros_common/cmake/isaac_ros_common-extras-modules.cmake index 7fc80f30..319792e2 100644 --- a/isaac_ros_common/cmake/isaac_ros_common-extras-modules.cmake +++ b/isaac_ros_common/cmake/isaac_ros_common-extras-modules.cmake @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_common/cmake/isaac_ros_common-extras.cmake b/isaac_ros_common/cmake/isaac_ros_common-extras.cmake index 5ec2d593..60106c6c 100644 --- a/isaac_ros_common/cmake/isaac_ros_common-extras.cmake +++ b/isaac_ros_common/cmake/isaac_ros_common-extras.cmake @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_common/cmake/modules/FindTENSORRT.cmake b/isaac_ros_common/cmake/modules/FindTENSORRT.cmake index ad537a95..6844bbe3 100644 --- a/isaac_ros_common/cmake/modules/FindTENSORRT.cmake +++ b/isaac_ros_common/cmake/modules/FindTENSORRT.cmake @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_common/include/isaac_ros_common/qos.hpp b/isaac_ros_common/include/isaac_ros_common/qos.hpp new file mode 100644 index 00000000..cc757052 --- /dev/null +++ b/isaac_ros_common/include/isaac_ros_common/qos.hpp @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +// Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +#ifndef ISAAC_ROS_COMMON__QOS_HPP_ +#define ISAAC_ROS_COMMON__QOS_HPP_ + +#include + +#include + +namespace isaac_ros +{ +namespace common +{ + +rclcpp::QoS AddQosParameter( + rclcpp::Node & node, + std::string default_qos = "SYSTEM_DEFAULT", + std::string parameter_name = "qos"); + +rclcpp::QoS ParseQosString(const std::string & str); + +} // namespace common +} // namespace isaac_ros + +#endif // ISAAC_ROS_COMMON__QOS_HPP_ diff --git a/isaac_ros_common/include/isaac_ros_common/vpi_utilities.hpp b/isaac_ros_common/include/isaac_ros_common/vpi_utilities.hpp index 730a4e40..132a311c 100644 --- a/isaac_ros_common/include/isaac_ros_common/vpi_utilities.hpp +++ b/isaac_ros_common/include/isaac_ros_common/vpi_utilities.hpp @@ -1,5 +1,5 @@ // SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -// Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/isaac_ros_common/package.xml b/isaac_ros_common/package.xml index 9af1adeb..aba455ca 100644 --- a/isaac_ros_common/package.xml +++ b/isaac_ros_common/package.xml @@ -13,10 +13,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_common - 2.1.0 + 3.0.0 Utilities for performing common functions in Isaac ROS packages - Hemal Shah + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Jaiveer Singh diff --git a/isaac_ros_common/scripts/isaac_ros_asset_eula.sh b/isaac_ros_common/scripts/isaac_ros_asset_eula.sh new file mode 100644 index 00000000..0e4291f7 --- /dev/null +++ b/isaac_ros_common/scripts/isaac_ros_asset_eula.sh @@ -0,0 +1,123 @@ +#!/bin/bash + + +# Helper script for handling EULA prompts when installing assets. Should be sourced at the beginning +# of a script that installs a *single* asset. +# +# The script: +# * Fails if EULA has not yet been displayed. +# * Displays an EULA notice prompt if "--eula" is given. +# * Checks for EULA acceptance and prints asset output paths if "--print-install-paths" is given (for cmake integration). +# +# The following variables are expected to be defined when sourcing this script: +# +# ISAAC_ROS_WS: Path to Workspace root. +# ASSET_NAME: Name of asset. snake_case is recommended here. +# ASSET_DIR: Directory to install the asset. +# EULA_URL Location of the EULA. +# ASSET_INSTALL_PATHS: Output path of the installed artifact. +# +# A marker file is created in "ASSET_DIR" for persistence between sessions. +# Alternatively, the env variable ISAAC_ROS_ACCEPT_EULA can be set. The env +# variable ISAAC_ROS_SKIP_ASSET_INSTALL can be set to skip the installation +# entirely, e.g. for CI runners that don't have a GPU. + +usage() { + # Note that the usage is intended for the script that sources this script. + echo "Usage: $0 [--show-eula|--print-install-paths|--no-cache]" + echo "Use this script to download the asset '${ASSET_NAME:?}'." + echo "" + echo "Explanation of arguments:" + echo " --show-eula Show the EULA and ask user to accept it" + echo " --print-install-paths Print the paths where assets will be installed" + echo " --no-cache Don't cache the assets" +} + +# Parse arguments +CACHE=true +while [ "$1" != "" ]; do + case $1 in + --help ) + usage + exit 0 + ;; + # TODO(lgulich): Deprecated, remove this. Use --show-eula instead. + --eula ) + SHOW_EULA=true + ;; + --show-eula ) + SHOW_EULA=true + ;; + --print-install-paths ) + PRINT_INSTALL_PATHS=true + ;; + --no-cache ) + CACHE=false + ;; + * ) + usage + exit 1 + ;; + esac + shift +done + +[[ -z "$ISAAC_ROS_WS" ]] && echo "ERROR: ISAAC_ROS_WS is not set." && exit 1 +[[ -z "$ASSET_NAME" ]] && echo "ERROR: ASSET_NAME is not set." && exit 1 +[[ -z "$ASSET_DIR" ]] && echo "ERROR: ASSET_DIR is not set." && exit 1 +[[ -z "$EULA_URL" ]] && echo "ERROR: EULA_URL is not set." && exit 1 +[[ -z "$ASSET_INSTALL_PATHS" ]] && echo "ERROR: ASSET_INSTALL_PATHS is not set." && exit 1 +[[ -z "$ISAAC_ROS_WS" ]] && echo "ERROR: ISAAC_ROS_WS is not set." && exit 1 + +MARKER_FILE="$ASSET_DIR/.eula_accepted" + + +# Print the install paths s.t. other tools can parse it. +if [[ "$PRINT_INSTALL_PATHS" == "true" ]]; then + echo -n "$ASSET_INSTALL_PATHS" + exit 0 +fi + +if [[ -n "$ISAAC_ROS_SKIP_ASSET_INSTALL" ]]; then + echo "Skipping asset installation." + exit 0 +fi + +# Show the EULA and ask user to accept. +if [ "$SHOW_EULA" == "true" ]; then + echo -e "\n**** EULA notice for asset: \"$ASSET_NAME\" ****\n" + echo -e "By continuing you accept the terms and conditions of the license as covered in the Model EULA, found here:" + echo -e " $EULA_URL" + echo -e "\nDo you accept? [y/n]" + + while true; do + read yn + case $yn in + [Yy]* ) + mkdir -p "$(dirname ${MARKER_FILE})" + touch "$MARKER_FILE" + break;; + [Nn]* ) + exit 1 + ;; + * ) echo "Please answer yes or no.";; + esac + done +fi + +# Check that the EULA was accepted and abort if not. +if [ ! -f "$MARKER_FILE" ] && [ -z $ISAAC_ROS_ACCEPT_EULA ]; then + echo -e "\nERROR: Please run the following command to view and accept the EULA before downloading \"$ASSET_NAME\":" + echo -e " $(realpath $0) --eula" + echo -e "or set environment variable: ISAAC_ROS_ACCEPT_EULA=1" + exit 1 +fi + +# Check if the assets were already download and abort early if they are. +if [ "$CACHE" == "true" ] && ls ${ASSET_INSTALL_PATHS} &> /dev/null; then + echo "All assets for $ASSET_NAME already exist in $ASSET_DIR. Skipping download." + exit 0 +fi + +# Create the ASSET_DIR to prepare the download. +mkdir -p "${ASSET_DIR}" diff --git a/isaac_ros_common/src/qos.cpp b/isaac_ros_common/src/qos.cpp new file mode 100644 index 00000000..8fc837c2 --- /dev/null +++ b/isaac_ros_common/src/qos.cpp @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +// Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +#include "isaac_ros_common/qos.hpp" + +#include +#include + +#include "rclcpp/rclcpp.hpp" + +namespace isaac_ros +{ +namespace common +{ + +rclcpp::QoS AddQosParameter( + rclcpp::Node & node, + std::string default_qos, + std::string parameter_name) +{ + return ParseQosString(node.declare_parameter(parameter_name, default_qos)); +} + +rclcpp::QoS ParseQosString(const std::string & str) +{ + std::string profile = str; + // Convert to upper case. + std::transform(profile.begin(), profile.end(), profile.begin(), ::toupper); + + if (profile == "SYSTEM_DEFAULT") { + return rclcpp::QoS(rclcpp::SystemDefaultsQoS()); + } + if (profile == "DEFAULT") { + return rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(rmw_qos_profile_default)); + } + if (profile == "PARAMETER_EVENTS") { + return rclcpp::QoS(rclcpp::ParameterEventsQoS()); + } + if (profile == "SERVICES_DEFAULT") { + return rclcpp::QoS(rclcpp::ServicesQoS()); + } + if (profile == "PARAMETERS") { + return rclcpp::QoS(rclcpp::ParametersQoS()); + } + if (profile == "SENSOR_DATA") { + return rclcpp::QoS(rclcpp::SensorDataQoS()); + } + RCLCPP_WARN_STREAM( + rclcpp::get_logger("parseQoSString"), + "Unknown QoS profile: " << profile << ". Returning profile: DEFAULT"); + return rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(rmw_qos_profile_default)); +} + +} // namespace common +} // namespace isaac_ros diff --git a/isaac_ros_common/src/vpi_utilities.cpp b/isaac_ros_common/src/vpi_utilities.cpp index 5061b5d7..1a43b174 100644 --- a/isaac_ros_common/src/vpi_utilities.cpp +++ b/isaac_ros_common/src/vpi_utilities.cpp @@ -1,5 +1,5 @@ // SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -// Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/isaac_ros_launch_utils/isaac_ros_launch_utils/__init__.py b/isaac_ros_launch_utils/isaac_ros_launch_utils/__init__.py new file mode 100644 index 00000000..337ce584 --- /dev/null +++ b/isaac_ros_launch_utils/isaac_ros_launch_utils/__init__.py @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +from isaac_ros_launch_utils.core import * diff --git a/isaac_ros_launch_utils/isaac_ros_launch_utils/all_types.py b/isaac_ros_launch_utils/isaac_ros_launch_utils/all_types.py new file mode 100644 index 00000000..ae9b0654 --- /dev/null +++ b/isaac_ros_launch_utils/isaac_ros_launch_utils/all_types.py @@ -0,0 +1,61 @@ +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +""" +Use this file to import all regularly used launch types in one go. +# from isaac_ros_launch_utils.all_types import * +""" +# pylint: disable=unused-import + +from launch import Action +from launch import Condition +from launch import LaunchDescription +from launch import Substitution +from launch.actions import DeclareLaunchArgument +from launch.actions import ExecuteProcess +from launch.actions import GroupAction +from launch.actions import IncludeLaunchDescription +from launch.actions import LogInfo +from launch.actions import OpaqueFunction +from launch.actions import RegisterEventHandler +from launch.actions import Shutdown +from launch.actions import TimerAction +from launch.conditions import IfCondition +from launch.conditions import UnlessCondition +from launch.event_handlers import OnExecutionComplete +from launch.event_handlers import OnProcessExit +from launch.event_handlers import OnProcessIO +from launch.launch_context import LaunchContext +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import AndSubstitution +from launch.substitutions import Command +from launch.substitutions import EnvironmentVariable +from launch.substitutions import FindExecutable +from launch.substitutions import LaunchConfiguration +from launch.substitutions import NotSubstitution +from launch.substitutions import OrSubstitution +from launch.substitutions import PythonExpression +from launch.substitutions import TextSubstitution +from launch.substitutions import ThisLaunchFileDir +from launch_ros.actions import ComposableNodeContainer +from launch_ros.actions import LoadComposableNodes +from launch_ros.actions import Node +from launch_ros.actions import PushRosNamespace +from launch_ros.actions import SetParameter +from launch_ros.actions import SetParametersFromFile +from launch_ros.descriptions import ComposableNode +from launch_ros.parameter_descriptions import ParameterValue +from launch_xml.launch_description_sources import XMLLaunchDescriptionSource \ No newline at end of file diff --git a/isaac_ros_launch_utils/isaac_ros_launch_utils/core.py b/isaac_ros_launch_utils/isaac_ros_launch_utils/core.py new file mode 100644 index 00000000..781ec041 --- /dev/null +++ b/isaac_ros_launch_utils/isaac_ros_launch_utils/core.py @@ -0,0 +1,678 @@ +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +import argparse +from enum import Enum +import pathlib +import platform +import uuid +from typing import Any, Callable, List, Tuple, Dict +import yaml +import os + +from ament_index_python.packages import get_package_share_directory + +from isaac_ros_launch_utils.all_types import * + + +class NovaRobot(Enum): + """Enum defining the type of nova robot.""" + + NOVA_CARTER = 1 + NOVA_DEVELOPER_KIT = 2 + NOVA_BENCHTOP = 3 + UNKNOWN = 4 + + +def _add_delay_if_set(action: Action, delay: Any = None) -> Action: + if is_valid(delay): + delay = float(delay) if isinstance(delay, str) else delay + return TimerAction(period=delay, actions=[action]) + return action + + +class ArgumentContainer(argparse.Namespace): + """ + A helper class to make it easier to define launch arguments and easier to see what arguments + can be used with a launch graph. + """ + + def __init__(self): + self._launch_configurations = [] + self._cli_launch_args = [] + self._opaque_functions = [] + + def add_arg(self, + name: str, + default: Any = None, + description: str | None = None, + choices: list[str] | None = None, + cli: bool = False) -> LaunchConfiguration: + """ Add an argument to the arg container. """ + default = str(default) if default is not None else None + launch_configuration = LaunchConfiguration(name, default=default) + self._launch_configurations.append(launch_configuration) + setattr(self, name, launch_configuration) + if cli: + self._cli_launch_args.append( + DeclareLaunchArgument( + name, + default_value=default, + description=description, + choices=choices, + )) + return launch_configuration + + def get_launch_actions(self) -> list[Action]: + """ Get all launch actions contained in this argument container. """ + return self._cli_launch_args + self._opaque_functions + + def add_opaque_function( + self, + function: Callable[['ArgumentContainer'], list[Action] | None], + ) -> OpaqueFunction: + """ + Helper function to add an opaque function that has access to all the evaluated arguments. + """ + + def helper_function(context: LaunchContext): + evaluated_args = argparse.Namespace() + for launch_configuration in self._launch_configurations: + name = launch_configuration.variable_name[0].perform(context) + value_str = launch_configuration.perform(context) + try: + #pylint: disable=eval-used, + value = eval(value_str) + #pylint: disable=bare-except, + except: + value = value_str + setattr(evaluated_args, name, value) + return function(evaluated_args) + + opaque_function = OpaqueFunction(function=helper_function) + self._opaque_functions.append(opaque_function) + return opaque_function + + +def get_path(package: str, path: str) -> pathlib.Path: + """ Get the path of an installed share file. """ + package_dir = pathlib.Path(get_package_share_directory(package)) + launch_path = package_dir / path + return launch_path + + +def add_robot_description( + nominals_package: Any, + nominals_file: Any, + robot_calibration_path: Any = "/etc/nova/calibration/isaac_calibration.urdf", + override_path: Any = None) -> Action: + """ + Loads an URDF file and adds a robot state publisher node. + We select the first existing URDF file based on the following priorities: + 1) override urdf + 2) calibration urdf + 3) nominals urdf + + Args: + nominals_package (Any): Package containing the nominals URDF file. + nominals_file (Any): URDF nominals path, within nominals_package. + robot_calibration_path (Any): Path to the URDF calibration file in the robot. + override_path (Any): Path to the URDF override file. + + """ + + def impl(context: LaunchContext) -> Action: + nominals_package_str = perform_context(context, nominals_package) + nominals_file_str = perform_context(context, nominals_file) + robot_calibration_path_str = perform_context(context, robot_calibration_path) + override_path_str = perform_context(context, override_path) + + override_urdf = pathlib.Path(override_path_str or '') + calibrated_urdf = pathlib.Path(robot_calibration_path_str) + nominals_urdf = get_path(nominals_package_str, nominals_file_str) + + if is_valid(override_path_str): + if not override_urdf.is_file(): + raise FileNotFoundError(f'[add_robot_description]: Path of override URDF ' \ + f'{override_path_str} does not exist.') + print(f"Using override URDF from: {override_path_str}") + urdf_path = override_urdf + elif calibrated_urdf.is_file(): + print(f"Using calibrated URDF from: {robot_calibration_path}") + urdf_path = calibrated_urdf + elif nominals_urdf.is_file(): + print("Using nominals URDF") + urdf_path = nominals_urdf + else: + raise Exception(f'No robot description found.') + + robot_description = Command(['xacro ', str(urdf_path)]) + + robot_state_publisher = Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + parameters=[{ + 'robot_description': ParameterValue(robot_description, value_type=str), + }], + ) + return [robot_state_publisher] + + return OpaqueFunction(function=impl) + + +def include(package: str, + path: str, + launch_arguments: dict | None = None, + condition: Condition = None, + delay: float | None = None): + """ Include another launch file. """ + launch_path = get_path(package, path) + if path.endswith('.py'): + source = PythonLaunchDescriptionSource([str(launch_path)]) + elif path.endswith('.xml'): + source = XMLLaunchDescriptionSource([str(launch_path)]) + + # Convert values to strings because launch arguments can only be strings. + def make_valid_launch_argument(value: Any): + if isinstance(value, (LaunchConfiguration, Substitution)): + return value + return str(value) + + launch_arguments = { + k: make_valid_launch_argument(v) for k, v in (launch_arguments or {}).items() + } + + include_action = IncludeLaunchDescription( + source, + launch_arguments=(launch_arguments or {}).items(), + condition=condition, + ) + + action = _add_delay_if_set(include_action, delay) + return action + + +def load_composable_nodes(container_name: str, + composable_nodes: list[ComposableNode], + log_message: Any = None, + condition: Condition = None) -> Action: + """" Add a GroupAction that loads composable nodes and a log info depending on a condition. """ + actions = [] + actions.append( + LoadComposableNodes( + target_container=container_name, + composable_node_descriptions=composable_nodes, + )) + + if log_message is None: + node_names = ['[ '] + for node in composable_nodes: + node_names.append('/') + if node.node_namespace is not None: + node_names.extend(node.node_namespace) + node_names.append('/') + if node.node_name is not None: + node_names.extend(node.node_name) + node_names.append(', ') + node_names.pop() # remove trailing comma and space + node_names.append(' ]') + log_message = ['Adding nodes '] + node_names + [' to container ', container_name, '.'] + + actions.append(log_info(log_message)) + + return GroupAction(actions, condition=condition) + + +def get_default_negotiation_time(x86_negotiation_time_s: int = 5, + aarch64_negotiation_time_s: int = 20) -> int: + """ Get a default negotiation time depending on the platform (x86/aarch64). """ + arch = platform.machine() + negotiation_time = None + if arch == 'x86_64': + negotiation_time = x86_negotiation_time_s + elif arch == 'aarch64': + negotiation_time = aarch64_negotiation_time_s + else: + print(f'Warning platform type: {arch} not recognized. Using aarch64 negotiation time.') + negotiation_time = aarch64_negotiation_time_s + print(f'Platform detected as: {arch}. Setting negotiation time to: {negotiation_time}') + return negotiation_time + + +def component_container(container_name: str, + log_level: str = 'info', + prefix=None, + condition=None, + container_type='multithreaded'): + """" Add a component container. """ + # NOTE: We expose various component_container types, including the isolated component container + # with the `use_multi_threaded_executor` argument. The reason is that we saw: + # - issues with component_container_mt related to https://github.com/ros2/rclcpp/issues/2242. + # - some GXF components don't function when using `component_container_isolated` *without* + # the `--use_multi_threaded_executor` flag. + arguments = [] + if container_type == 'multithreaded': + container_executable = 'component_container_mt' + elif container_type == 'isolated': + container_executable = 'component_container_isolated' + elif container_type == 'isolated_multithreaded': + container_executable = 'component_container_isolated' + arguments.append('--use_multi_threaded_executor') + else: + print(f"Warning: component_container type: {container_type} not recognized." + "Using component_container_mt.") + container_executable = 'component_container_mt' + arguments.extend(['--ros-args', '--log-level', log_level]) + print(f"Using container type: {container_executable}, with arguments: {arguments}") + return Node( + name=container_name, + package='rclcpp_components', + executable=container_executable, + on_exit=Shutdown(), + prefix=prefix, + arguments=arguments, + output='screen', + condition=condition) + + +def service_call( + service: str, + type: str, # pylint: disable=redefined-builtin + content: str, + delay: float | None = None) -> Action: + """ Add a service call to a launch graph. """ + actions: list[Action] = [] + actions.append( + ExecuteProcess( + cmd=[FindExecutable(name='ros2'), ' service call ', service, type, content], + shell=True, + )) + actions.append(log_info(['Calling service ', service, '.'])) + + action = GroupAction(actions=actions) + action = _add_delay_if_set(action, delay) + return action + + +def perform_context(context: LaunchContext, expression: Any) -> Any: + """ If the expression is a substitution perform its substitution else just return the expression. """ + if isinstance(expression, (Substitution)): + return expression.perform(context) + else: + return expression + + +def play_rosbag(bag_path: Any, + clock: Any = True, + loop: Any = None, + rate: Any = None, + delay: Any = None, + additional_bag_play_args: Any = None, + condition: Substitution = None) -> Action: + """ Add a process playing back a ros2bag to the launch graph. """ + + def impl(context: LaunchContext) -> Action: + bag_path_str = perform_context(context, bag_path) + loop_str = perform_context(context, loop) + clock_str = perform_context(context, clock) + rate_str = perform_context(context, rate) + delay_str = perform_context(context, delay) + bag_args_str = perform_context(context, additional_bag_play_args) + + assert pathlib.Path(bag_path_str).exists(), \ + f'[play_rosbag]: Path of rosbag {bag_path_str} does not exist.' + + cmd = f'ros2 bag play {bag_path_str}'.split() + if is_valid(loop_str) and is_true(loop_str): + cmd.append('--loop') + if is_valid(clock_str) and is_true(clock_str): + cmd.append('--clock') + if is_valid(rate_str): + cmd.extend(['--rate', rate_str]) + if is_valid(bag_args_str): + cmd.extend((bag_args_str).split()) + + print("[play_rosbag]: Running the following command:", ' '.join(cmd)) + + bag_play_action = ExecuteProcess(cmd=cmd, output='screen', on_exit=Shutdown()) + return [_add_delay_if_set(bag_play_action, delay_str)] + + return OpaqueFunction(function=impl, condition=condition) + + +def record_rosbag(topics: Any = '--all', + delay: Any = None, + bag_path: Any = None, + additional_bag_record_args: Any = None, + storage='mcap', + condition: Substitution = None) -> Action: + """ Add a process recording a ros2bag to the launch graph. """ + + def impl(context: LaunchContext) -> Action: + topics_str = perform_context(context, topics) + delay_str = perform_context(context, delay) + bag_path_str = perform_context(context, bag_path) + bag_args_str = perform_context(context, additional_bag_record_args) + + cmd = f'ros2 bag record --storage {storage} {topics_str}'.split() + + if is_valid(bag_path_str): + path = pathlib.Path(bag_path_str) + assert not path.exists(), \ + f'[record_rosbag]: Path of output folder {path} already exist.' + assert path.parent.exists(), \ + f'[record_rosbag]: Parent path of output folder {path.parent} does not exist.' + cmd.extend(['--output', bag_path_str]) + + if is_valid(bag_args_str): + cmd.extend((bag_args_str).split()) + + print("[record_rosbag]: Running the following command:", ' '.join(cmd)) + + bag_play_action = ExecuteProcess(cmd=cmd, output='screen') + return [_add_delay_if_set(bag_play_action, delay_str)] + + return OpaqueFunction(function=impl, condition=condition) + + +def static_transform(parent: str, + child: str, + translation: list[float] | None = None, + orientation_rpy: list[float] | None = None, + orientation_quaternion: list[float] | None = None, + condition=None): + if translation is None: + translation = [0, 0, 0] + if orientation_rpy is None: + orientation_rpy = [0, 0, 0] + + orientation = orientation_quaternion if orientation_quaternion is not None else orientation_rpy + + translation = [str(x) for x in translation] + orientation = [str(x) for x in orientation] + + return Node( + package='tf2_ros', + name='my_stat_tf_pub', + executable='static_transform_publisher', + output='screen', + arguments=translation + orientation + [parent, child], + condition=condition, + ) + + +def shutdown_if_stderr(action: Action) -> Action: + """ Stop the app if the passed actions prints to stderr. """ + + def handler(event) -> Action: + # pylint: disable=protected-access + source_action = event._RunningProcessEvent__action + error = event._ProcessIO__text + reason = f"Action '{source_action}' failed with error '{error}'." + print('Shutdown reason:', reason) + return Shutdown(reason=reason) + + return RegisterEventHandler(OnProcessIO( + target_action=action, + on_stderr=handler, + )) + + +def set_parameter(parameter: str, value: str, namespace='', condition=None): + if not namespace: + return SetParameter(parameter, value, condition=condition) + + yaml_dict = {namespace: {'ros__parameters': {parameter: value}}} + path = pathlib.Path(f'/tmp/{uuid.uuid4()}.yaml') + print(f"Writing parameter '{namespace}/{parameter}' to path '{path}'.") + with open(path, 'w') as file: + yaml.dump(yaml_dict, file) + + return SetParametersFromFile(str(path), condition=condition) + + +def has_substring(expression: Any, substring: str) -> bool | Substitution: + """ + A condition that's true if the expression contains a substring. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return PythonExpression(['"', str(substring), '" in "', expression, '"']) + else: + return str(substring) in expression + + +def is_not(expression: Any) -> bool | Substitution: + """ + Inverts and expression. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return NotSubstitution(expression) + else: + return not expression + + +def is_empty(expression: Any) -> bool | Substitution: + """ + Checks if the expression is empty. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return PythonExpression(['len("', expression, '") == 0']) + else: + return len(str(expression)) == 0 + + +def is_not_empty(expression: Any) -> bool | Substitution: + """ + Deprecated: Use `NotSubstitution(is_empty(...))` instead. + + A substitution that's true if the expression is not empty. + """ + return NotSubstitution(is_empty(expression)) + + +def is_none_or_null(expression: Any) -> bool | Substitution: + """ + Checks if the expression is 'null' or 'none' or 'False'. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + is_none = PythonExpression(['"', expression, '".lower() == "none"']) + is_null = PythonExpression(['"', expression, '".lower() == "null"']) + return OrSubstitution(is_none, is_null) + else: + return expression is None or str(expression).lower() in ['none', 'null'] + + +def is_true(expression: Any) -> bool | Substitution: + """ + Checks if the expression is true. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return PythonExpression(['"', expression, '".lower() == "true"']) + elif isinstance(expression, str): + return expression.lower() == 'true' + else: + return bool(expression) + + +def is_false(expression: Any) -> bool | Substitution: + """ + Checks if the expression is false. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return PythonExpression(['"', expression, '".lower() == "false"']) + elif isinstance(expression, str): + return expression.lower() == 'false' + else: + return not bool(expression) + + +def is_valid(expression: Any) -> bool | Substitution: + """ + Checks if the expression is valid. + We define a valid expression as not being empty and not being null or none. + Returns a substitution if the expression is a substitution else returns a boolean. + """ + if isinstance(expression, (Substitution)): + return AndSubstitution( + AndSubstitution( + NotSubstitution(is_none_or_null(expression)), + NotSubstitution(is_empty(expression)), + ), + NotSubstitution(is_false(expression)), + ) + else: + return not is_none_or_null(expression) and not is_empty(expression) and not is_false( + expression) + + +def is_equal(lhs: Any, rhs: Any) -> bool | Substitution: + """ + Checks if the two expressions are equal. + """ + if isinstance(lhs, Substitution) or isinstance(rhs, Substitution): + return PythonExpression(["'", lhs, "' == '", rhs, "'"]) + else: + return lhs == rhs + + +def both_false(a: Substitution, b: Substitution) -> Substitution: + """ Return substitution which is true if both arguments are false. """ + return AndSubstitution(is_not(a), is_not(b)) + + +def to_bool(expression: Substitution) -> bool | Substitution: + """ Returns a substitution which is the argument converted to a bool. """ + return is_true(expression) + + +def union(a: Any, b: Any) -> Substitution: + """ Unite the expressions a and b. A and be are expected to contain comma-separated strings. """ + return PythonExpression(["','.join(list(set(('", a, "'+','+'", b, "').split(','))))"]) + + +def if_else_substitution(condition: LaunchConfiguration, if_value: Any, else_value: Any) -> Any: + """ Return if_value if the condition is true, else it returns else_value. """ + return PythonExpression( + ['"', if_value, '"if "', condition, '".lower() == "true" else"', else_value, '"']) + + +def get_dict_value(dictionary: Any, key: Any) -> Any: + """ Returns the value of the item with the specified key. """ + return PythonExpression(['str(', dictionary, '.get("', key, '"))']) + + +def dict_values_contain_substring(dictionary: Any, substring: str) -> Any: + """ A substitution that's true if the dictionary holds a value which contains the substring. """ + return PythonExpression(["'", substring, "' in ','.join(list(", dictionary, ".values()))"]) + + +def get_keys_with_substring_in_value(dictionary: Any, substring: str) -> Any: + """ Return all keys of the items with a value containing the substring. """ + return PythonExpression([ + "','.join(list(key for key, value in ", dictionary, ".items() if '", substring, + "' in value))" + ]) + + +def remove_substring_from_dict_values(dictionary: Any, substring: str) -> Any: + """ Return a dict with a substring being removed from all values of an input dict. """ + return PythonExpression([ + "{ key: ','.join(filter(lambda x: x != '", substring, + "', value.split(','))) for key, value in", dictionary, ".items()}" + ]) + +def remove_substrings_from_dict_values(dictionary: Any, substrings: str) -> Any: + """ Return a dict with all substrings being removed from all values of an input dict. """ + for substring in substrings: + dictionary = remove_substring_from_dict_values(dictionary, substring) + return dictionary + + +def assert_path_exists(expression: LaunchConfiguration, condition=None) -> Action: + """ + A condition that's true if the expression evalutes to 'False' in Python. + Note that the default UnlessCondition is only true if the expression is 'false' or '0'. This is + more generic, ie. it would also return true for a None type or an empty string. + """ + + def impl(context: LaunchContext) -> None: + path = pathlib.Path(expression.perform(context)) + assert path.exists(), f'Path {path} does not exist.' + + return OpaqueFunction(function=impl, condition=condition) + + +def assert_condition(assert_message: str, condition: Condition) -> Action: + """ + Asserting the condition and printing the assert message if the condition is false. + """ + + def impl(context: LaunchContext) -> None: + assert False, assert_message + + return OpaqueFunction(function=impl, condition=condition) + + +def log_info(msg, condition=None) -> Action: + """ Helper to create a message that is logged from ros launch. """ + return LogInfo(msg=msg, condition=condition) + + +def get_nova_system_info(path: str = '/etc/nova/systeminfo.yaml') -> dict: + """ Get the system info dict created by nova init. """ + pathlib_path = pathlib.Path(path) + assert pathlib_path.exists(), f'Path {pathlib_path} does not exist.' + yaml_content = pathlib_path.read_text() + return yaml.safe_load(yaml_content) + + +def get_nova_robot(path: str = '/etc/nova/manager_selection') -> NovaRobot: + """ Get the nova robot name stored in the manager_selection file created by nova init. """ + pathlib_path = pathlib.Path(path) + if not pathlib_path.exists(): + raise FileNotFoundError(f'[get_nova_robot]: manager selection file ' \ + f'{pathlib_path} does not exist.') + name = pathlib_path.read_text().strip('\n') + if name == 'nova-carter': + print(f'Detected NovaRobot: {NovaRobot.NOVA_CARTER.name}') + return NovaRobot.NOVA_CARTER + elif name == 'nova-devkit': + print(f'Detected NovaRobot: {NovaRobot.NOVA_DEVELOPER_KIT.name}') + return NovaRobot.NOVA_DEVELOPER_KIT + elif name == 'nova-benchtop': + print(f'Detected NovaRobot: {NovaRobot.NOVA_BENCHTOP.name}') + return NovaRobot.NOVA_BENCHTOP + else: + print(f'Detection of NovaRobot failed: {NovaRobot.UNKNOWN.name}') + return NovaRobot.UNKNOWN + + +def get_isaac_ros_ws_path() -> str: + isaac_ros_ws_path = os.environ.get('ISAAC_ROS_WS') + if isaac_ros_ws_path is None: + isaac_ros_ws_path = "/workspaces/isaac_ros-dev" + print( + f"Warning: Isaac ROS workspace path requested, but environment variable ISAAC_ROS_WS " + "not set. Returning default path {isaac_ros_ws_path}" + ) + return isaac_ros_ws_path diff --git a/isaac_ros_launch_utils/package.xml b/isaac_ros_launch_utils/package.xml new file mode 100644 index 00000000..75672148 --- /dev/null +++ b/isaac_ros_launch_utils/package.xml @@ -0,0 +1,15 @@ + + + + isaac_ros_launch_utils + 3.0.0 + Helper functions to simplify ROS2 launch files. + Isaac ROS Maintainers + Apache-2.0 + https://developer.nvidia.com/isaac-ros-gems/ + Lionel Gulich + + + ament_python + + diff --git a/isaac_ros_launch_utils/resource/isaac_ros_launch_utils b/isaac_ros_launch_utils/resource/isaac_ros_launch_utils new file mode 100644 index 00000000..e69de29b diff --git a/isaac_ros_launch_utils/setup.cfg b/isaac_ros_launch_utils/setup.cfg new file mode 100644 index 00000000..1f4d0813 --- /dev/null +++ b/isaac_ros_launch_utils/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/isaac_ros_launch_utils +[install] +install_scripts=$base/lib/isaac_ros_launch_utils diff --git a/isaac_ros_launch_utils/setup.py b/isaac_ros_launch_utils/setup.py new file mode 100644 index 00000000..86e24b69 --- /dev/null +++ b/isaac_ros_launch_utils/setup.py @@ -0,0 +1,46 @@ +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +from setuptools import setup + +PACKAGE_NAME = 'isaac_ros_launch_utils' + +LICENSE = """ +Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. +NVIDIA CORPORATION and its licensors retain all intellectual property +and proprietary rights in and to this software, related documentation +and any modifications thereto. Any use, reproduction, disclosure or +distribution of this software and related documentation without an express +license agreement from NVIDIA CORPORATION is strictly prohibited. +""" + +setup( + name=PACKAGE_NAME, + version='0.0.1', + packages=[PACKAGE_NAME], + data_files=[ + ('share/ament_index/resource_index/packages', ['resource/' + PACKAGE_NAME]), + ('share/' + PACKAGE_NAME, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='Isaac ROS Maintainers', + maintainer_email='isaac-ros-maintainers@nvidia.com', + description='Helper functions to simplify ROS2 launch files.', + license=LICENSE, + tests_require=[], + entry_points={}, +) diff --git a/isaac_ros_nitros_bridge_interfaces/CMakeLists.txt b/isaac_ros_nitros_bridge_interfaces/CMakeLists.txt index 8a8653ef..b1575ceb 100644 --- a/isaac_ros_nitros_bridge_interfaces/CMakeLists.txt +++ b/isaac_ros_nitros_bridge_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage.msg b/isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage.msg index 0130ea26..0c703fd3 100644 --- a/isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage.msg +++ b/isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage.msg @@ -4,5 +4,5 @@ uint32 width string encoding uint8 is_bigendian uint32 step -# Filled with CUDA IPC Handle points to the GPU data -uint8[] data +# Filled with PID and file descriptor(exported from GPU memory) +int32[] data diff --git a/isaac_ros_nitros_bridge_interfaces/package.xml b/isaac_ros_nitros_bridge_interfaces/package.xml index 92c318d9..2c5bc0c9 100644 --- a/isaac_ros_nitros_bridge_interfaces/package.xml +++ b/isaac_ros_nitros_bridge_interfaces/package.xml @@ -13,10 +13,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_nitros_bridge_interfaces - 2.1.0 + 3.0.0 Interfaces for Isaac ROS NITROS Bridge Msgs - Yuankun Zhu + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Yuankun Zhu @@ -24,7 +24,6 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. ament_cmake_auto rosidl_default_generators - isaac_ros_common rosidl_default_runtime diff --git a/isaac_ros_nova_interfaces/CMakeLists.txt b/isaac_ros_nova_interfaces/CMakeLists.txt index b44ecf67..de5cf668 100644 --- a/isaac_ros_nova_interfaces/CMakeLists.txt +++ b/isaac_ros_nova_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_nova_interfaces/package.xml b/isaac_ros_nova_interfaces/package.xml index ffc7d9dc..c5bf6d5d 100644 --- a/isaac_ros_nova_interfaces/package.xml +++ b/isaac_ros_nova_interfaces/package.xml @@ -13,10 +13,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_nova_interfaces - 2.1.0 + 3.0.0 Interfaces for Isaac ROS Nova - Ashwin Varghese Kuruttukulam + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Ashwin Varghese Kuruttukulam @@ -25,8 +25,6 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. std_msgs - isaac_ros_common - ament_cmake_auto rosidl_default_generators diff --git a/isaac_ros_pointcloud_interfaces/CMakeLists.txt b/isaac_ros_pointcloud_interfaces/CMakeLists.txt index 2a7eeef9..94ff2650 100644 --- a/isaac_ros_pointcloud_interfaces/CMakeLists.txt +++ b/isaac_ros_pointcloud_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_pointcloud_interfaces/package.xml b/isaac_ros_pointcloud_interfaces/package.xml index 0da78f48..a87b1fdc 100644 --- a/isaac_ros_pointcloud_interfaces/package.xml +++ b/isaac_ros_pointcloud_interfaces/package.xml @@ -13,10 +13,10 @@ isaac_ros_pointcloud_interfaces - 2.1.0 + 3.0.0 Pointcloud interfaces for Isaac ROS NITROS - Ashwin Varghese Kuruttukulam + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/blog/accelerating-ai-modules-for-ros-and-ros-2-on-jetson/ Ashwin Varghese Kuruttukulam @@ -27,8 +27,6 @@ rosidl_default_generators rosidl_default_runtime - isaac_ros_common - ament_lint_auto ament_lint_common diff --git a/isaac_ros_tensor_list_interfaces/CMakeLists.txt b/isaac_ros_tensor_list_interfaces/CMakeLists.txt index 736c8581..06dcf1ac 100644 --- a/isaac_ros_tensor_list_interfaces/CMakeLists.txt +++ b/isaac_ros_tensor_list_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_tensor_list_interfaces/package.xml b/isaac_ros_tensor_list_interfaces/package.xml index d39acc3a..60f7c67b 100644 --- a/isaac_ros_tensor_list_interfaces/package.xml +++ b/isaac_ros_tensor_list_interfaces/package.xml @@ -13,10 +13,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_tensor_list_interfaces - 2.1.0 + 3.0.0 Interfaces for Isaac ROS tensor list - CY Chen + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Hemal Shah @@ -26,8 +26,6 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. std_msgs - isaac_ros_common - ament_cmake_auto rosidl_default_generators diff --git a/isaac_ros_test/isaac_ros_test/__init__.py b/isaac_ros_test/isaac_ros_test/__init__.py index 790b6e2a..06265ed4 100644 --- a/isaac_ros_test/isaac_ros_test/__init__.py +++ b/isaac_ros_test/isaac_ros_test/__init__.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/cpu_profiler.py b/isaac_ros_test/isaac_ros_test/cpu_profiler.py index 4afa8ff5..a804a051 100644 --- a/isaac_ros_test/isaac_ros_test/cpu_profiler.py +++ b/isaac_ros_test/isaac_ros_test/cpu_profiler.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_comparison_test.py b/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_comparison_test.py index d9610602..fdc4af6f 100644 --- a/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_comparison_test.py +++ b/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_comparison_test.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_test.py b/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_test.py index 1925ba89..f350d418 100644 --- a/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_test.py +++ b/isaac_ros_test/isaac_ros_test/examples/isaac_ros_talker_test.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/isaac_ros_base_test.py b/isaac_ros_test/isaac_ros_test/isaac_ros_base_test.py index 2335f5db..055480d2 100644 --- a/isaac_ros_test/isaac_ros_test/isaac_ros_base_test.py +++ b/isaac_ros_test/isaac_ros_test/isaac_ros_base_test.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -427,6 +427,44 @@ def synchronize_timestamps( return image, camera_info + def spin_node_until_messages_received(self, received_messages: Dict[str, List[any]], + timeout_s: float): + """ + Spin until at least one message received on each channel or the timeout is reached. + + Parameters + ---------- + received_messages : Dict[str, List[any]] + Map from topic name to list of messages. + Note that this function assumes that `received_messages` is being populated + by ROS subscribers from outside this function. + + timeout_s : float + The time in seconds, after which we give up waiting and return. + + """ + end_time = time.time() + timeout_s + while time.time() < end_time: + SPIN_TIMEOUT = 0.1 + rclpy.spin_once(self.node, timeout_sec=SPIN_TIMEOUT) + if all(len(value) > 0 for value in received_messages.values()): + return + + def assert_messages_received(self, received_messages: Dict[str, List[any]]): + """ + Assert that all channels received at least one message. + + Parameters + ---------- + received_messages : Dict[str, List[any]] + Map from topic name to list of messages. + + """ + empty_topics = [name for name, value in received_messages.items() if len(value) == 0] + self.assertTrue( + len(empty_topics) == 0, + f'Didnt receive output on some of the topics. Empty topics: {empty_topics}') + @classmethod def setUpClass(cls) -> None: """Set up before first test method.""" diff --git a/isaac_ros_test/isaac_ros_test/json_conversion.py b/isaac_ros_test/isaac_ros_test/json_conversion.py index 408f051a..b4b83131 100644 --- a/isaac_ros_test/isaac_ros_test/json_conversion.py +++ b/isaac_ros_test/isaac_ros_test/json_conversion.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/pcd_loader.py b/isaac_ros_test/isaac_ros_test/pcd_loader.py index c6257ead..0aa1ab6b 100644 --- a/isaac_ros_test/isaac_ros_test/pcd_loader.py +++ b/isaac_ros_test/isaac_ros_test/pcd_loader.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/pose_utilities.py b/isaac_ros_test/isaac_ros_test/pose_utilities.py index 36306a9e..9e5511d2 100644 --- a/isaac_ros_test/isaac_ros_test/pose_utilities.py +++ b/isaac_ros_test/isaac_ros_test/pose_utilities.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/profiler.py b/isaac_ros_test/isaac_ros_test/profiler.py index ff413a6b..96f80016 100644 --- a/isaac_ros_test/isaac_ros_test/profiler.py +++ b/isaac_ros_test/isaac_ros_test/profiler.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/isaac_ros_test/tegrastats_profiler.py b/isaac_ros_test/isaac_ros_test/tegrastats_profiler.py index 1490751a..7306f2d5 100644 --- a/isaac_ros_test/isaac_ros_test/tegrastats_profiler.py +++ b/isaac_ros_test/isaac_ros_test/tegrastats_profiler.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/isaac_ros_test/package.xml b/isaac_ros_test/package.xml index d6115611..a35e557d 100644 --- a/isaac_ros_test/package.xml +++ b/isaac_ros_test/package.xml @@ -13,10 +13,10 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. isaac_ros_test - 2.1.0 + 3.0.0 Isaac ROS testing utilities - Hemal Shah + Isaac ROS Maintainers NVIDIA Isaac ROS Software License https://developer.nvidia.com/isaac-ros-gems/ Ethan Yu @@ -25,6 +25,7 @@ license agreement from NVIDIA CORPORATION is strictly prohibited. cv_bridge + ament_copyright ament_flake8 ament_pep257 python3-pytest diff --git a/isaac_ros_test/setup.py b/isaac_ros_test/setup.py index 241e93fe..9c9e8f9e 100644 --- a/isaac_ros_test/setup.py +++ b/isaac_ros_test/setup.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -30,8 +30,8 @@ ], install_requires=['setuptools'], zip_safe=True, - maintainer='Hemal Shah', - maintainer_email='hemals@nvidia.com', + maintainer='Isaac ROS Maintainers', + maintainer_email='isaac-ros-maintainers@nvidia.com', description='Isaac ROS testing utilities', license='NVIDIA Isaac ROS Software License', tests_require=['pytest'], diff --git a/isaac_ros_test/test/test_copyright.py b/isaac_ros_test/test/test_copyright.py new file mode 100644 index 00000000..cc8ff03f --- /dev/null +++ b/isaac_ros_test/test/test_copyright.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/scripts/README.md b/scripts/README.md index 9fa98875..1398cf9f 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,5 +1,5 @@ # Isaac ROS Dev Build Scripts -For Jetson or x86_64: +For Jetson or x86_64: `run_dev.sh` creates a dev environment with ROS 2 installed. By default, the directory `/workspaces/isaac_ros-dev` in the container is mapped from `~/workspaces/isaac_ros-dev` on the host machine if it exists OR the current working directory from where the script was invoked otherwise. The host directory the container maps to can be explicitly set by running the script with the desired path as the first argument: - `run_dev.sh ` + `run_dev.sh -d ` diff --git a/scripts/build_base_image.sh b/scripts/build_base_image.sh index c6194681..a8438293 100755 --- a/scripts/build_base_image.sh +++ b/scripts/build_base_image.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash # # Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. # @@ -7,196 +7,14 @@ # and any modifications thereto. Any use, reproduction, disclosure or # distribution of this software and related documentation without an express # license agreement from NVIDIA CORPORATION is strictly prohibited. +set -e ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" source $ROOT/utils/print_color.sh -DOCKER_DIR="${ROOT}/../docker" -function usage() { - print_info "Usage: build_base_image.sh" {target image, period delimited components, required} {target image name, optional} {disable_build boolean, optional} - print_info "Copyright (c) 2022, NVIDIA CORPORATION." -} - -DOCKER_SEARCH_DIRS=(${DOCKER_DIR}) - -# Read and parse config file if exists -# -# CONFIG_DOCKER_SEARCH_DIRS (array, can be empty) - -if [[ -f "${ROOT}/.isaac_ros_common-config" ]]; then - . "${ROOT}/.isaac_ros_common-config" - - # Prepend configured docker search dirs - if [ ${#CONFIG_DOCKER_SEARCH_DIRS[@]} -gt 0 ]; then - for (( i=${#CONFIG_DOCKER_SEARCH_DIRS[@]}-1 ; i>=0 ; i-- )); do - - # If the path is relative, then prefix ROOT to the path - if [[ "${CONFIG_DOCKER_SEARCH_DIRS[i]}" != /* ]]; then - CONFIG_DOCKER_SEARCH_DIRS[$i]="${ROOT}/${CONFIG_DOCKER_SEARCH_DIRS[i]}" - fi - done - - CONFIG_DOCKER_SEARCH_DIRS+=(${DOCKER_SEARCH_DIRS[@]}) - DOCKER_SEARCH_DIRS=(${CONFIG_DOCKER_SEARCH_DIRS[@]}) - - print_info "Using configured docker search paths: ${DOCKER_SEARCH_DIRS[*]}" - fi -fi - -TARGET_IMAGE_STR="$1" -if [[ -z "$TARGET_IMAGE_STR" ]]; then - print_error "target image not specified" - exit 1 +BUILDKIT_DISABLED_STR="" +if [[ ! -z "$5" ]]; then + BUILDKIT_DISABLED_STR="--disable_buildkit" fi -shift 1 - -TARGET_IMAGE_NAME="$1" -if [[ -z "$TARGET_IMAGE_NAME" ]]; then - TARGET_IMAGE_NAME="${TARGET_IMAGE_STR//./-}-image" - print_warning "Target image name not specified, using ${TARGET_IMAGE_NAME}" -fi -shift 1 - - -BASE_IMAGE_NAME="$1" -if [[ -z "$BASE_IMAGE_NAME" ]]; then - print_warning "Using base image name not specified, using '${BASE_IMAGE_NAME}'" -fi -shift 1 - -DOCKER_CONTEXT_DIR="$1" -if [[ -z "$DOCKER_CONTEXT_DIR" ]]; then - print_warning "Using docker context dir not specified, using Dockerfile directory" -fi -shift 1 - -DOCKER_BUILDKIT=1 -DISABLE_BUILDKIT_STR="$1" -if [[ ! -z "$DISABLE_BUILDKIT_STR" ]]; then - print_warning "WARNING: Explicitly disabling BuildKit" - DOCKER_BUILDKIT=0 -fi -shift 1 - -ON_EXIT=() -function cleanup { - for command in "${ON_EXIT[@]}" - do - $command &>/dev/null - done -} -trap cleanup EXIT - -PLATFORM="$(uname -m)" - -# Resolve Dockerfiles by matching target image ids to available files -TARGET_IMAGE_IDS=(${TARGET_IMAGE_STR//./ }) -IMAGE_IDS=(${TARGET_IMAGE_IDS[@]}) - -# Loop over components and find largest tail sequences -# For example, a target image id of 'aarch64.jp5.carter.nav' should match -# Dockerfiles with suffixes in the following order: -# ".aarch64.jp5.carter.nav", ".jp5.carter.nav", ".carter.nav", ".nav" -# If the first file found is ".carter.nav", the matching recurses by then -# looking for the preceding components ".aarch64.jp5" in the same manner - -DOCKERFILES=() -DOCKERFILE_CONTEXT_DIRS=() -until [ ${#IMAGE_IDS[@]} -le 0 ]; do - UNMATCHED_ID_COUNT=${#IMAGE_IDS[@]} - - for (( i=0; i<${#IMAGE_IDS[@]}; i++ )) do - LAYER_IMAGE_IDS=${IMAGE_IDS[@]:i} - LAYER_IMAGE_SUFFIX="${LAYER_IMAGE_IDS[@]// /.}" - - for DOCKER_SEARCH_DIR in ${DOCKER_SEARCH_DIRS[@]}; do - DOCKERFILE="${DOCKER_SEARCH_DIR}/Dockerfile.${LAYER_IMAGE_SUFFIX}" - - if [[ -f "${DOCKERFILE}" ]]; then - DOCKERFILES+=(${DOCKERFILE}) - DOCKERFILE_CONTEXT_DIRS+=(${DOCKER_SEARCH_DIR}) - IMAGE_IDS=(${IMAGE_IDS[@]:0:i}) - break 2 - fi - done - done - - if [ ${UNMATCHED_ID_COUNT} -eq ${#IMAGE_IDS[@]} ]; then - UNMATCHED_IDS=${IMAGE_IDS[@]} - MATCHED_DOCKERFILES=${DOCKERFILES[@]} - print_error "Could not resolve Dockerfiles for target image ids: ${UNMATCHED_IDS// /.}" - - if [ ${#DOCKERFILES[@]} -gt 0 ]; then - print_warning "Partially resolved the following Dockerfiles for target image: ${TARGET_IMAGE_STR}" - for DOCKERFILE in ${DOCKERFILES[@]}; do - print_warning "${DOCKERFILE}" - done - fi - exit 1 - fi -done - -# Arguments for docker build -BUILD_ARGS+=("--build-arg" "USERNAME="admin"") -BUILD_ARGS+=("--build-arg" "USER_UID=`id -u`") -BUILD_ARGS+=("--build-arg" "USER_GID=`id -g`") -BUILD_ARGS+=("--build-arg" "PLATFORM=$PLATFORM") - -# Check if GPU is installed -if [[ $PLATFORM == "x86_64" ]]; then - if type nvidia-smi &>/dev/null; then - GPU_ATTACHED=(`nvidia-smi -a | grep "Attached GPUs"`) - if [ ! -z $GPU_ATTACHED ]; then - BUILD_ARGS+=("--build-arg" "HAS_GPU="true"") - fi - fi -fi - -print_info "Resolved the following Dockerfiles for target image: ${TARGET_IMAGE_STR}" -for DOCKERFILE in ${DOCKERFILES[@]}; do - print_info "${DOCKERFILE}" -done - -# Build image layers -for (( i=${#DOCKERFILES[@]}-1 ; i>=0 ; i-- )); do - DOCKERFILE=${DOCKERFILES[i]} - DOCKERFILE_CONTEXT_DIR=${DOCKERFILE_CONTEXT_DIRS[i]} - IMAGE_NAME=${DOCKERFILE#*"/Dockerfile."} - IMAGE_NAME="${IMAGE_NAME//./-}-image" - - # Build the base images in layers first - BASE_IMAGE_ARG= - if [ $i -eq $(( ${#DOCKERFILES[@]} - 1 )) ]; then - if [[ ! -z "${BASE_IMAGE_NAME}" ]] ; then - BASE_IMAGE_ARG="--build-arg BASE_IMAGE="${BASE_IMAGE_NAME}"" - fi - fi - - if [ $i -lt $(( ${#DOCKERFILES[@]} - 1 )) ]; then - BASE_DOCKERFILE=${DOCKERFILES[i+1]} - BASE_IMAGE_NAME=${BASE_DOCKERFILE#*"/Dockerfile."} - BASE_IMAGE_NAME="${BASE_IMAGE_NAME//./-}-image" - - BASE_IMAGE_ARG="--build-arg BASE_IMAGE="${BASE_IMAGE_NAME}"" - fi - - # The last image should be the target image name - # Use docker context dir script arg only for last image - DOCKER_CONTEXT_ARG=${DOCKERFILE_CONTEXT_DIR} - if [ $i -eq 0 ]; then - IMAGE_NAME=${TARGET_IMAGE_NAME} - if [[ ! -z "${DOCKER_CONTEXT_DIR}" ]]; then - DOCKER_CONTEXT_ARG=${DOCKER_CONTEXT_DIR} - fi - fi - - print_warning "Building ${DOCKERFILE} as image: ${IMAGE_NAME} with base: ${BASE_IMAGE_NAME}" - DOCKER_BUILDKIT=${DOCKER_BUILDKIT} docker build -f ${DOCKERFILE} \ - --network host \ - -t ${IMAGE_NAME} \ - ${BASE_IMAGE_ARG} \ - "${BUILD_ARGS[@]}" \ - $@ \ - ${DOCKER_CONTEXT_ARG} -done +$ROOT/build_image_layers.sh --image_key "$1" --image_name "$2" --base_image "$3" --context_dir "$4" $BUILDKIT_DISABLED_STR \ No newline at end of file diff --git a/scripts/build_image_layers.sh b/scripts/build_image_layers.sh new file mode 100755 index 00000000..82243175 --- /dev/null +++ b/scripts/build_image_layers.sh @@ -0,0 +1,342 @@ +#!/bin/bash +# +# Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +set -e + +ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +source $ROOT/utils/print_color.sh +DOCKER_DIR="${ROOT}/../docker" + +function usage() { + print_info "Usage: ${0##*/}" + print_info "Copyright (c) 2024, NVIDIA CORPORATION." +} + +# Initialize arguments +DOCKER_BUILDKIT=1 +IGNORE_COMPOSITE_KEYS=0 +ADDITIONAL_BUILD_ARGS=() +DOCKER_SEARCH_DIRS=(${DOCKER_DIR}) +SKIP_REGISTRY_CHECK=0 +BASE_DOCKER_REGISTRY_NAMES=("nvcr.io/isaac/ros") + +# Read and parse config file if exists +# +# CONFIG_DOCKER_SEARCH_DIRS (array, can be empty) + +if [[ -f "${ROOT}/.isaac_ros_common-config" ]]; then + . "${ROOT}/.isaac_ros_common-config" +fi + +# Override with config from user home directory if exists +if [[ -f ~/.isaac_ros_common-config ]]; then + . ~/.isaac_ros_common-config +fi + +# Prepend configured docker search dirs +if [ ${#CONFIG_DOCKER_SEARCH_DIRS[@]} -gt 0 ]; then + for (( i=${#CONFIG_DOCKER_SEARCH_DIRS[@]}-1 ; i>=0 ; i-- )); do + + # If the path is relative, then prefix ROOT to the path + if [[ "${CONFIG_DOCKER_SEARCH_DIRS[i]}" != /* ]]; then + CONFIG_DOCKER_SEARCH_DIRS[$i]="${ROOT}/${CONFIG_DOCKER_SEARCH_DIRS[i]}" + fi + done + + CONFIG_DOCKER_SEARCH_DIRS+=(${DOCKER_SEARCH_DIRS[@]}) + DOCKER_SEARCH_DIRS=(${CONFIG_DOCKER_SEARCH_DIRS[@]}) +fi + +# Parse command-line args +VALID_ARGS=$(getopt -o hra:b:c:ki:n:u --long help,skip_registry_check,build_arg:,base_image:,context_dir:,disable_buildkit,image_key:,image_name:,ignore_composite_keys -- "$@") +eval set -- "$VALID_ARGS" +while [ : ]; do + case "$1" in + -a | --build_arg) + ADDITIONAL_BUILD_ARGS+=("$2") + shift 2 + ;; + -b | --base_image) + BASE_IMAGE_NAME="$2" + shift 2 + ;; + -c | --context_dir) + DOCKER_CONTEXT_DIR="$2" + shift 2 + ;; + -k | --disable_buildkit) + DOCKER_BUILDKIT=0 + shift + ;; + -i | --image_key) + TARGET_IMAGE_STR="$2" + shift 2 + ;; + -n | --image_name) + TARGET_IMAGE_NAME="$2" + shift 2 + ;; + -r | --skip_registry_check) + SKIP_REGISTRY_CHECK=1 + shift + ;; + -y | --ignore_composite_keys) + IGNORE_COMPOSITE_KEYS=1 + shift + ;; + -h | --help) + usage + exit 0 + ;; + --) shift; + break + ;; + esac +done + +# Check arguments +if [[ -z "$TARGET_IMAGE_STR" ]]; then + print_error "Target image not specified with -i/--image_key" + exit 1 +fi + +if [[ -z "$TARGET_IMAGE_NAME" ]]; then + TARGET_IMAGE_NAME="${TARGET_IMAGE_STR//./-}-image" + print_warning "Target image name not specified, using ${TARGET_IMAGE_NAME}" +fi + +if [[ ! -z "$DOCKER_CONTEXT_DIR" ]]; then + DOCKER_SEARCH_DIRS+=($DOCKER_CONTEXT_DIR) +fi + +# Summarize final arguments for script +print_info "Building layered image for key ${TARGET_IMAGE_STR} as ${TARGET_IMAGE_NAME}" +if [[ ! -z "${BASE_IMAGE_NAME}" ]]; then + print_info "Build image on top of base: |${BASE_IMAGE_NAME}|" +fi + +print_info "Using configured docker search paths: ${DOCKER_SEARCH_DIRS[*]}" +if [[ ! -z "${DOCKER_CONTEXT_DIR}" ]]; then + print_info "Docker context directory for final layer: ${DOCKER_CONTEXT_DIR}" +fi +for BUILD_ARG in "${ADDITIONAL_BUILD_ARGS[@]}" +do + print_info "Additional build arg: ${BUILD_ARG}" +done +if [[ $DOCKER_BUILDKIT -eq 0 ]]; then + print_warning "WARNING: Explicitly disabling BuildKit" +fi + +if [[ $IGNORE_COMPOSITE_KEYS -eq 1 ]]; then + print_warning "WARNING: Explicitly disabling matching composite image keys" +fi + +if [[ $SKIP_REGISTRY_CHECK -eq 1 ]]; then + print_warning "WARNING: Skipping remote registry check for prebuilt images" +fi + +# Setup on-exit cleanup +ON_EXIT=() +function cleanup { + for command in "${ON_EXIT[@]}" + do + $command &>/dev/null + done +} +trap cleanup EXIT + +PLATFORM="$(uname -m)" + +# Resolve Dockerfiles by matching target image ids to available files +TARGET_IMAGE_IDS=(${TARGET_IMAGE_STR//./ }) +IMAGE_IDS=(${TARGET_IMAGE_IDS[@]}) + +# Loop over components and find largest tail sequences +# For example, a target image id of 'aarch64.jp5.carter.nav' should match +# Dockerfiles with suffixes in the following order: +# ".aarch64.jp5.carter.nav", ".jp5.carter.nav", ".carter.nav", ".nav" +# If the first file found is ".carter.nav", the matching recurses by then +# looking for the preceding components ".aarch64.jp5" in the same manner +DOCKERFILES=() +DOCKERFILE_CONTEXT_DIRS=() +until [ ${#IMAGE_IDS[@]} -le 0 ]; do + UNMATCHED_ID_COUNT=${#IMAGE_IDS[@]} + + for (( i=0; i<${#IMAGE_IDS[@]}; i++ )) do + # Abort matching composite keys if disabled + if [[ $IGNORE_COMPOSITE_KEYS -gt 1 && $i -eq 1 ]]; then + break + fi + + LAYER_IMAGE_IDS=${IMAGE_IDS[@]:i} + LAYER_IMAGE_SUFFIX="${LAYER_IMAGE_IDS[@]// /.}" + + for DOCKER_SEARCH_DIR in ${DOCKER_SEARCH_DIRS[@]}; do + DOCKERFILE="${DOCKER_SEARCH_DIR}/Dockerfile.${LAYER_IMAGE_SUFFIX}" + + if [[ -f "${DOCKERFILE}" ]]; then + DOCKERFILES+=(${DOCKERFILE}) + DOCKERFILE_CONTEXT_DIRS+=(${DOCKER_SEARCH_DIR}) + IMAGE_IDS=(${IMAGE_IDS[@]:0:i}) + break 2 + fi + done + done + + if [ ${UNMATCHED_ID_COUNT} -eq ${#IMAGE_IDS[@]} ]; then + UNMATCHED_IDS=${IMAGE_IDS[@]} + MATCHED_DOCKERFILES=${DOCKERFILES[@]} + print_error "Could not resolve Dockerfiles for target image ids: ${UNMATCHED_IDS// /.}" + + if [ ${#DOCKERFILES[@]} -gt 0 ]; then + print_warning "Partially resolved the following Dockerfiles for target image: ${TARGET_IMAGE_STR}" + for DOCKERFILE in ${DOCKERFILES[@]}; do + print_warning "${DOCKERFILE}" + done + fi + exit 1 + fi +done + +# Find pre-built image if available +if [[ $SKIP_REGISTRY_CHECK -eq 0 && -z "${BASE_IMAGE_NAME}" ]]; then + # Generate the possible base image names to look for from first image key onward + BASE_IMAGE_FULLNAMES=() + BASE_DOCKERFILES=() + BASE_DOCKERFILE_CONTEXT_DIRS=() + BASE_IMAGE_DOCKERFILES_INDICES=() + for (( i=${#DOCKERFILES[@]}-1 ; i>=0 ; i-- )); do + BASE_DOCKERFILES+=(${DOCKERFILES[i]}) + BASE_DOCKERFILE_CONTEXT_DIRS+=(${DOCKERFILE_CONTEXT_DIRS[i]}) + BASE_IMAGE_KEYS=() + + DOCKER_HASH_FILE=$(mktemp) + ON_EXIT+=("rm -Rf ${DOCKER_HASH_FILE}") + + # Determine hash of all Dockerfiles for this base image name + for (( j=0 ; j<${#BASE_DOCKERFILES[@]} ; j++ )); do + BASE_DOCKERFILE=${BASE_DOCKERFILES[j]} + BASE_DOCKERFILE_CONTEXT_DIR=${BASE_DOCKERFILE_CONTEXT_DIRS[j]} + LAYER_IMAGE_SUFFIX=${BASE_DOCKERFILE#*"/Dockerfile."} + BASE_IMAGE_KEYS+=(${LAYER_IMAGE_SUFFIX//./ }) + + pushd . >/dev/null + cd $BASE_DOCKERFILE_CONTEXT_DIR + BASE_DOCKERFILE="Dockerfile.${LAYER_IMAGE_SUFFIX}" + md5sum ${BASE_DOCKERFILE} >> $DOCKER_HASH_FILE + popd >/dev/null + done + SOURCE_DOCKERFILE_HASH=($(md5sum $DOCKER_HASH_FILE)) + + # Determine base image name + for (( j=${#BASE_DOCKER_REGISTRY_NAMES[@]}-1 ; j>= 0; j-- )); do + BASE_DOCKER_REGISTRY_NAME=${BASE_DOCKER_REGISTRY_NAMES[j]} + BASE_IMAGE_TAG=${BASE_IMAGE_KEYS[*]} + BASE_IMAGE_TAG=${BASE_IMAGE_TAG// /.} + BASE_IMAGE_FULLNAME="${BASE_DOCKER_REGISTRY_NAME}:${BASE_IMAGE_TAG//./-}_${SOURCE_DOCKERFILE_HASH}" + BASE_IMAGE_FULLNAMES+=(${BASE_IMAGE_FULLNAME}) + + # Remember which index goes with this base image so we can skip those Dockerfiles + # if this image exists + BASE_IMAGE_DOCKERFILES_INDICES+=($i) + done + done + + for (( i=${#BASE_IMAGE_FULLNAMES[@]}-1 ; i>=0 ; i-- )); do + BASE_IMAGE_FULLNAME=${BASE_IMAGE_FULLNAMES[i]} + + # Check if image exists on remote server + print_info "Checking if base image ${BASE_IMAGE_FULLNAME} exists on remote registry" + OUTPUT=$(docker manifest inspect ${BASE_IMAGE_FULLNAME} >/dev/null 2>&1 ; echo $?) + if [[ ${OUTPUT} -eq 0 ]]; then + BASE_IMAGE_NAME=${BASE_IMAGE_FULLNAME} + DOCKERFILES=(${DOCKERFILES[@]:0:${BASE_IMAGE_DOCKERFILES_INDICES[i]-1}}) + print_info "Found pre-built base image: ${BASE_IMAGE_FULLNAME}" + docker pull ${BASE_IMAGE_FULLNAME} + print_info "Finished pulling pre-built base image: ${BASE_IMAGE_FULLNAME}" + break + fi + done +fi + +# Arguments for docker build +BUILD_ARGS+=("--build-arg" "USERNAME="admin"") +BUILD_ARGS+=("--build-arg" "USER_UID=`id -u`") +BUILD_ARGS+=("--build-arg" "USER_GID=`id -g`") +BUILD_ARGS+=("--build-arg" "PLATFORM=$PLATFORM") + +for BUILD_ARG in ${ADDITIONAL_BUILD_ARGS[@]} +do + BUILD_ARGS+=("--build-arg" "${BUILD_ARG}") +done + +# Check if GPU is installed +if [[ $PLATFORM == "x86_64" ]]; then + GPU_ATTACHED=(`nvidia-smi -a | grep "Attached GPUs" || true`) + if [ -z $GPU_ATTACHED ]; then + print_warning "No GPU detected! Not setting build args for HAS_GPU" + else + BUILD_ARGS+=("--build-arg" "HAS_GPU="true"") + fi +fi + +if [ ${#DOCKERFILES[@]} -gt 0 ]; then + print_info "Resolved the following ${#DOCKERFILES[@]} Dockerfiles for target image: ${TARGET_IMAGE_STR}" + for DOCKERFILE in ${DOCKERFILES[@]}; do + print_info "${DOCKERFILE}" + done +else + docker tag ${BASE_IMAGE_NAME} ${TARGET_IMAGE_NAME} + print_info "Nothing to build, retagged ${BASE_IMAGE_NAME} as ${TARGET_IMAGE_NAME}" + exit 0 +fi + +# Build image layers +for (( i=${#DOCKERFILES[@]}-1 ; i>=0 ; i-- )); do + DOCKERFILE=${DOCKERFILES[i]} + DOCKERFILE_CONTEXT_DIR=${DOCKERFILE_CONTEXT_DIRS[i]} + IMAGE_NAME=${DOCKERFILE#*"/Dockerfile."} + IMAGE_NAME="${IMAGE_NAME//./-}-image" + + # Build the base images in layers first + BASE_IMAGE_ARG= + if [ $i -eq $(( ${#DOCKERFILES[@]} - 1 )) ]; then + if [[ ! -z "${BASE_IMAGE_NAME}" ]] ; then + BASE_IMAGE_ARG="--build-arg BASE_IMAGE="${BASE_IMAGE_NAME}"" + fi + fi + + if [ $i -lt $(( ${#DOCKERFILES[@]} - 1 )) ]; then + BASE_DOCKERFILE=${DOCKERFILES[i+1]} + BASE_IMAGE_NAME=${BASE_DOCKERFILE#*"/Dockerfile."} + BASE_IMAGE_NAME="${BASE_IMAGE_NAME//./-}-image" + + BASE_IMAGE_ARG="--build-arg BASE_IMAGE="${BASE_IMAGE_NAME}"" + fi + + # The last image should be the target image name + # Use docker context dir script arg only for last image + DOCKER_CONTEXT_ARG=${DOCKERFILE_CONTEXT_DIR} + if [ $i -eq 0 ]; then + IMAGE_NAME=${TARGET_IMAGE_NAME} + if [[ ! -z "${DOCKER_CONTEXT_DIR}" ]]; then + DOCKER_CONTEXT_ARG=${DOCKER_CONTEXT_DIR} + fi + fi + + print_warning "Building ${DOCKERFILE} as image: ${IMAGE_NAME} with base: ${BASE_IMAGE_NAME}" + + DOCKER_BUILDKIT=${DOCKER_BUILDKIT} docker build -f ${DOCKERFILE} \ + --network host \ + -t ${IMAGE_NAME} \ + ${BASE_IMAGE_ARG} \ + "${BUILD_ARGS[@]}" \ + $@ \ + ${DOCKER_CONTEXT_ARG} +done diff --git a/scripts/deploy/_Dockerfile.deploy b/scripts/deploy/_Dockerfile.deploy new file mode 100644 index 00000000..4b3acc90 --- /dev/null +++ b/scripts/deploy/_Dockerfile.deploy @@ -0,0 +1,48 @@ +# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. + +ARG SET_LAUNCH_CMD +ARG BASE_IMAGE=nvidia/cuda:12.2.2-runtime-ubuntu22.04 +FROM ${BASE_IMAGE} as deploy_base + +# Setup entrypoint +COPY deploy-entrypoint.sh /usr/local/bin/scripts/deploy-entrypoint.sh +RUN chmod +x /usr/local/bin/scripts/deploy-entrypoint.sh +ENTRYPOINT [ "/usr/local/bin/scripts/deploy-entrypoint.sh" ] + +# Install additional debians +ARG INSTALL_DEBIANS_CSV +RUN --mount=type=cache,target=/var/cache/apt \ + if [[ ! -z "${INSTALL_DEBIANS_CSV}" ]]; then \ + apt-get update && apt-get install -y ${INSTALL_DEBIANS_CSV//,/ } ; \ + fi + +# Copy built products into container +COPY staging/ / + +# Switch to non-root user +USER ${USERNAME:?} + +# ----------- + +FROM deploy_base as deploy_has_launch_0 +# ----------- + +FROM deploy_base as deploy_has_launch_1 +# Default argument +ARG LAUNCH_FILE +ENV LAUNCH_FILE=${LAUNCH_FILE:?} + +ARG LAUNCH_PACKAGE +ENV LAUNCH_PACKAGE=${LAUNCH_PACKAGE:?} + +CMD ros2 launch $LAUNCH_PACKAGE $LAUNCH_FILE +# ----------- + + +FROM deploy_has_launch_${SET_LAUNCH_CMD} as final \ No newline at end of file diff --git a/scripts/deploy/_Dockerfile.deploy_ws b/scripts/deploy/_Dockerfile.deploy_ws new file mode 100644 index 00000000..135fe3b1 --- /dev/null +++ b/scripts/deploy/_Dockerfile.deploy_ws @@ -0,0 +1,21 @@ +# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. + +ARG BASE_IMAGE=nvidia/cuda:12.2.2-runtime-ubuntu22.04 +FROM ${BASE_IMAGE} as deploy_ros_ws + +ARG ROS_WS +ENV ROS_WS=${ROS_WS:?} + +RUN --mount=type=cache,target=/var/cache/apt \ +. /opt/ros/${ROS_DISTRO}/setup.sh && rosdep update --rosdistro ${ROS_DISTRO} \ + && rosdep install -y -r \ + --from-path ${ROS_WS}/install \ + --rosdistro ${ROS_DISTRO} \ + --ignore-src \ + --skip-keys "libyaml-cpp-dev fastcdr rti-connext-dds-6.0.1 rti-connext-dds-5.3.1 urdfdom_headers libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv" diff --git a/scripts/deploy/_deploy-entrypoint.sh b/scripts/deploy/_deploy-entrypoint.sh new file mode 100644 index 00000000..262a4efa --- /dev/null +++ b/scripts/deploy/_deploy-entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash +##################################################################################### +# SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +##################################################################################### + + +source ${ROS_ROOT:?}/setup.bash + +# Source ROS workspace if exists +if [[ ! -z "${ROS_WS}" ]]; then + source ${ROS_WS}/install/setup.bash +fi + +set -x +exec "$@" diff --git a/scripts/docker_deploy.sh b/scripts/docker_deploy.sh new file mode 100755 index 00000000..a11013e1 --- /dev/null +++ b/scripts/docker_deploy.sh @@ -0,0 +1,261 @@ +#!/bin/bash -e +# +# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. + +ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +source $ROOT/utils/print_color.sh + +# Builds image (ARG MODE=deploy) with base image key, then layers any roots or debians you specify, +# then does rosdep install of a ROS WS if you specify one, then layers on suffix image key, and +# sets a default command to run 'ros2 launch {launch package} {launch file}' + +# Example: installs two debians, copies three directories (includes ROS_WS/remaps one), runs package and launch file +# ./docker_deploy.sh -i "libnvvpi3,tensorrt" -d /workspaces/isaac_ros-dev/tests -d /home/nvidia/scripts:/home/admin/scripts -w /workspaces/isaac_ros-dev/ros_ws -b "aarch64.ros2_humble" -p "isaac_ros_image_proc" -f "isaac_ros_image_flip.launch.py" + +# Read and parse config file if exists +# +# CONFIG_BASE_IMAGE_KEY (string, can be empty) + +if [[ -f "${ROOT}/.isaac_ros_common-config" ]]; then + . "${ROOT}/.isaac_ros_common-config" +fi + +# Override with config from user home directory if exists +if [[ -f ~/.isaac_ros_common-config ]]; then + . ~/.isaac_ros_common-config +fi + +INCLUDE_DIRS=() +INCLUDE_TARBALLS=() +SET_LAUNCH_CMD=0 +CUSTOM_APT_SOURCES=() +VALID_ARGS=$(getopt -o w:d:b:n:s:f:p:i:t:a: --long ros_ws:include_dir:base_image_key:name:suffix_image_key:launch_file:launch_package:install_debians:include_tarball:custom_apt_source -- "$@") +eval set -- "$VALID_ARGS" +while [ : ]; do + case "$1" in + -a | --custom_apt_source) + CUSTOM_APT_SOURCES+=("$2") + shift 2 + ;; + -b | --base_image_key) + BASE_IMAGE_KEY="$2" + shift 2 + ;; + -d | --include_dir) + INCLUDE_DIRS+=("$2") + shift 2 + ;; + -f | --launch_file) + LAUNCH_FILE="$2" + shift 2 + ;; + -i | --install_debians) + INSTALL_DEBIANS_CSV="$2" + shift 2 + ;; + -n | --name) + DEPLOY_IMAGE_NAME="$2" + shift 2 + ;; + -p | --launch_package) + LAUNCH_PACKAGE="$2" + shift 2 + ;; + -s | --suffix_image_key) + SUFFIX_IMAGE_KEY="$2" + shift 2 + ;; + -t | --include_tarball) + INCLUDE_TARBALLS+=("$2") + shift 2 + ;; + -w | --ros_ws) + ROS_WS="$2" + shift 2 + ;; + --) shift; + break + ;; + esac +done + +# Check arguments +PLATFORM="$(uname -m)" + +# Check that both launch file and package are set, or neither +if [[ ! -z "${LAUNCH_FILE}${LAUNCH_PACKAGE}" ]]; then + if [[ -z "${LAUNCH_FILE}" || -z "${LAUNCH_PACKAGE}" ]]; then + print_error "Launch package (-p/--launch_package) and launch file (-f/--launch_file) must both be specified or both empty." + exit 1 + fi +fi + +if [[ ! -z "${LAUNCH_FILE}" ]]; then + SET_LAUNCH_CMD=1 +fi + +if [[ -z "${BASE_IMAGE_KEY}" ]]; then + BASE_IMAGE_KEY="${PLATFORM}.ros2_humble" + print_warning "Base image key not specified, assuming $BASE_IMAGE_KEY" +fi + +if [[ -z "${DEPLOY_IMAGE_NAME}" ]]; then + DEPLOY_IMAGE_NAME="isaac_ros_deploy" + print_warning "Deploy image name not specified, assuming $DEPLOY_IMAGE_NAME" +fi + +if [[ ${#CUSTOM_APT_SOURCES[@]} -gt 100 ]]; then + print_error "Unable to handle more than 100 custom apt sources." + exit 1 +fi + +# Always include install directory of ROS workspace +if [[ ! -z "${ROS_WS}" ]]; then + SYMLINKS_IN_INSTALL_SPACE=$(find "${ROS_WS}/install" -type l) + if [ -n "${SYMLINKS_IN_INSTALL_SPACE}" ]; then + print_warning "Found symlinks in install space. Symlinked install spaces are not supported. Please use an isolated or merge install instead. Symlinks:" + print_warning $SYMLINKS_IN_INSTALL_SPACE + fi + + # Resolve ROS_WS_DEST from install directory setup.sh + ROS_WS_DEST=/workspaces/isaac_ros-dev + FILE_CONTENT=$(< "${ROS_WS}/install/setup.sh") + REGEX="_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=([^[:space:]]*)" + if [[ $FILE_CONTENT =~ $REGEX ]]; then + ROS_WS_DEST="${BASH_REMATCH[1]%/*}" + fi + + INCLUDE_DIRS+=( "$ROS_WS/install:${ROS_WS_DEST}/install" ) +fi + +# Always suffix .user to base image +# If the configured key does not have .user, append it last +if [[ $BASE_IMAGE_KEY != *".user"* ]]; then + BASE_IMAGE_KEY="${BASE_IMAGE_KEY}.user" +fi + +# Summarize final arguments for script +print_info "Building deployable image ${DEPLOY_IMAGE_NAME}" +print_info "Base image key: |${BASE_IMAGE_KEY}| / suffix image_key: |${SUFFIX_IMAGE_KEY}|" +if [[ ! -z "${LAUNCH_FILE}" ]]; then + print_info "Entrypoint to launch ${LAUNCH_PACKAGE}/${LAUNCH_FILE}" +fi +if [[ ! -z "${INSTALL_DEBIANS_CSV}" ]]; then + print_info "Installing debians: ${INSTALL_DEBIANS_CSV}" +fi +if [[ ! -z "${ROS_WS}" ]]; then + print_info "Installing ROS workspace at ${ROS_WS} to ${ROS_WS_DEST}" +fi +for INCLUDE_DIR in "${INCLUDE_DIRS[@]}" +do + print_info "Installing directory: ${INCLUDE_DIR}" +done +for INCLUDE_TARBALL in "${INCLUDE_TARBALLS[@]}" +do + print_info "Installing tarball: ${INCLUDE_TARBALL}" +done +for CUSTOM_APT_SOURCE in "${CUSTOM_APT_SOURCES[@]}" +do + print_info "Adding custom apt source: ${CUSTOM_APT_SOURCE}" +done +print_info "Begin building deployable image" + +# Setup on-exit cleanup tasks +ON_EXIT=() +function cleanup { + for command in "${ON_EXIT[@]}" + do + $command + done +} +trap cleanup EXIT + +pushd . >/dev/null +cd $ROOT +ON_EXIT+=("popd") + +# Setup staging temp directory +TEMP_DIR=`mktemp -d -t isaac_ros_deploy_XXXXXXXX` +ON_EXIT+=("rm -Rf ${TEMP_DIR}") + +pushd . >/dev/null +ON_EXIT+=("popd") + +cd $TEMP_DIR +cp -f $ROOT/deploy/_Dockerfile.deploy ${TEMP_DIR}/Dockerfile.deploy +cp -f $ROOT/deploy/_Dockerfile.deploy_ws ${TEMP_DIR}/Dockerfile.deploy_ws +cp -f $ROOT/deploy/_deploy-entrypoint.sh ${TEMP_DIR}/deploy-entrypoint.sh + +mkdir -p ${TEMP_DIR}/staging + +# Stage directories +for INCLUDE_DIR in "${INCLUDE_DIRS[@]}" +do + SRC_DIR=${INCLUDE_DIR} + DEST_DIR=${INCLUDE_DIR} + INCLUDE_DIR_REMAP_ARRAY=(${INCLUDE_DIR//:/ }) + if [[ ${#INCLUDE_DIR_REMAP_ARRAY[@]} -gt 1 ]]; then + SRC_DIR=${INCLUDE_DIR_REMAP_ARRAY[0]} + DEST_DIR=${INCLUDE_DIR_REMAP_ARRAY[1]} + fi + + print_info "Staging $SRC_DIR->$DEST_DIR" + mkdir -p ${TEMP_DIR}/staging/${DEST_DIR#/} + rsync -azL ${SRC_DIR}/ ${TEMP_DIR}/staging/${DEST_DIR#/} +done + +# Stage tarballs +for INCLUDE_TARBALL in "${INCLUDE_TARBALLS[@]}" +do + print_info "Staging tarball $INCLUDE_TARBALL" + tar -xzvf $INCLUDE_TARBALL -C ${TEMP_DIR}/staging +done + +# Delete all .git files and credentials +find $TEMP_DIR -type d -name ".git" | xargs -d '\n' rm -rf + +BASE_DEPLOY_IMAGE_NAME="${DEPLOY_IMAGE_NAME}-base" +INSTALLED_DEPLOY_IMAGE_NAME="${DEPLOY_IMAGE_NAME}-installed" + +# Stage custom apt sources +for (( i=0; i<${#CUSTOM_APT_SOURCES[@]}; i++ )) do + printf -v APT_SOURCE_IDX "%02d" $i + CUSTOM_APT_SOURCE_FILE="${TEMP_DIR}/staging/etc/apt/sources.list.d/${APT_SOURCE_IDX}_custom_apt_source" + mkdir -p ${CUSTOM_APT_SOURCE_FILE%/*} + echo "${CUSTOM_APT_SOURCES[$i]}" >> ${CUSTOM_APT_SOURCE_FILE} +done + +# Build base image +print_info "Building deploy base image: ${BASE_DEPLOY_IMAGE_NAME} with key ${BASE_IMAGE_KEY}" +$ROOT/build_image_layers.sh --image_key "${BASE_IMAGE_KEY}" --image_name "${BASE_DEPLOY_IMAGE_NAME}" --build_arg "MODE=deploy" + +# Install staged files and setup launch command +print_info "Building install image with launch file ${LAUNCH_FILE} in package ${LAUNCH_PACKAGE}" +$ROOT/build_image_layers.sh --image_key "deploy" --image_name "${INSTALLED_DEPLOY_IMAGE_NAME}" --base_image "${BASE_DEPLOY_IMAGE_NAME}" --context_dir "${TEMP_DIR}" \ + --build_arg "MODE=deploy" --build_arg "SET_LAUNCH_CMD=${SET_LAUNCH_CMD}" --build_arg "LAUNCH_FILE=${LAUNCH_FILE}" --build_arg "LAUNCH_PACKAGE=${LAUNCH_PACKAGE}" --build_arg "INSTALL_DEBIANS_CSV=${INSTALL_DEBIANS_CSV}" + +# Optional, if ROS_WS, install rosdeps +if [[ ! -z "${ROS_WS}" ]]; then + print_info "Building ROS workspace image for path ${ROS_WS}" + PREVIOUS_STAGE="${INSTALLED_DEPLOY_IMAGE_NAME}" + INSTALLED_DEPLOY_IMAGE_NAME="${DEPLOY_IMAGE_NAME}-rosws" + $ROOT/build_image_layers.sh --image_key "deploy_ws" --image_name "${INSTALLED_DEPLOY_IMAGE_NAME}" --base_image "${PREVIOUS_STAGE}" --context_dir "${TEMP_DIR}" --build_arg "MODE=deploy ROS_WS=${ROS_WS_DEST}" +fi + +# Optional, build suffix image if specified +if [[ ! -z "${SUFFIX_IMAGE_KEY}" ]]; then + print_info "Building suffix deploy image for key ${SUFFIX_IMAGE_KEY}" + PREVIOUS_STAGE="${INSTALLED_DEPLOY_IMAGE_NAME}" + INSTALLED_DEPLOY_IMAGE_NAME="${DEPLOY_IMAGE_NAME}-suffix" + $ROOT/build_image_layers.sh --image_key "SUFFIX_IMAGE_KEY" --image_name "${INSTALLED_DEPLOY_IMAGE_NAME}" --base_image "${PREVIOUS_STAGE}" --build_arg "MODE=deploy" +fi + +# Retag last image +docker tag "${INSTALLED_DEPLOY_IMAGE_NAME}" "${DEPLOY_IMAGE_NAME}" +print_info "DONE, image: ${DEPLOY_IMAGE_NAME}" diff --git a/scripts/run_dev.sh b/scripts/run_dev.sh index 9147bf1f..9f1c849b 100755 --- a/scripts/run_dev.sh +++ b/scripts/run_dev.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved. # # NVIDIA CORPORATION and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation @@ -8,14 +8,18 @@ # distribution of this software and related documentation without an express # license agreement from NVIDIA CORPORATION is strictly prohibited. +set -e + ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" source $ROOT/utils/print_color.sh function usage() { - print_info "Usage: run_dev.sh" {isaac_ros_dev directory path OPTIONAL} - print_info "Copyright (c) 2021-2022, NVIDIA CORPORATION." + print_info "Usage: run_dev.sh {-d isaac_ros_dev directory path OPTIONAL}" + print_info "Copyright (c) 2021-2024, NVIDIA CORPORATION." } +DOCKER_ARGS=() + # Read and parse config file if exists # # CONFIG_IMAGE_KEY (string, can be empty) @@ -24,28 +28,57 @@ if [[ -f "${ROOT}/.isaac_ros_common-config" ]]; then . "${ROOT}/.isaac_ros_common-config" fi -ISAAC_ROS_DEV_DIR="$1" -if [[ -z "$ISAAC_ROS_DEV_DIR" ]]; then - ISAAC_ROS_DEV_DIR_DEFAULTS=("$HOME/workspaces/isaac_ros-dev" "/workspaces/isaac_ros-dev") - for ISAAC_ROS_DEV_DIR in "${ISAAC_ROS_DEV_DIR_DEFAULTS[@]}" - do - if [[ -d "$ISAAC_ROS_DEV_DIR" ]]; then - break - fi - done +# Override with config from user home directory if exists +if [[ -f ~/.isaac_ros_common-config ]]; then + . ~/.isaac_ros_common-config +fi - if [[ ! -d "$ISAAC_ROS_DEV_DIR" ]]; then - ISAAC_ROS_DEV_DIR=$(realpath "$ROOT/../") - fi - print_warning "isaac_ros_dev not specified, assuming $ISAAC_ROS_DEV_DIR" -else - if [[ ! -d "$ISAAC_ROS_DEV_DIR" ]]; then - print_error "Specified isaac_ros_dev does not exist: $ISAAC_ROS_DEV_DIR" - exit 1 - fi - shift 1 +# Parse command-line args +IMAGE_KEY=ros2_humble + +# Pick up config image key if specified +if [[ ! -z "${CONFIG_IMAGE_KEY}" ]]; then + IMAGE_KEY=$CONFIG_IMAGE_KEY fi +ISAAC_ROS_DEV_DIR="${ISAAC_ROS_WS}" +SKIP_IMAGE_BUILD=0 +VERBOSE=0 +VALID_ARGS=$(getopt -o hvd:i:ba: --long help,verbose,isaac_ros_dev_dir:,image_key_suffix:,skip_image_build,docker_arg: -- "$@") +eval set -- "$VALID_ARGS" +while [ : ]; do + case "$1" in + -d | --isaac_ros_dev_dir) + ISAAC_ROS_DEV_DIR="$2" + shift 2 + ;; + -i | --image_key) + IMAGE_KEY="$2" + shift 2 + ;; + -b | --skip_image_build) + SKIP_IMAGE_BUILD=1 + shift + ;; + -a | --docker_arg) + DOCKER_ARGS+=("$2") + shift 2 + ;; + -v | --verbose) + VERBOSE=1 + shift + ;; + -h | --help) + usage + exit 0 + ;; + --) shift; + break + ;; + esac +done + +# Setup on-exit traps ON_EXIT=() function cleanup { for command in "${ON_EXIT[@]}" @@ -59,6 +92,28 @@ pushd . >/dev/null cd $ROOT ON_EXIT+=("popd") +# Fall back if isaac_ros_dev_dir not specified +if [[ -z "$ISAAC_ROS_DEV_DIR" ]]; then + ISAAC_ROS_DEV_DIR_DEFAULTS=("$HOME/workspaces/isaac_ros-dev" "/workspaces/isaac_ros-dev" "/mnt/nova_ssd/workspaces/isaac_ros-dev") + for ISAAC_ROS_DEV_DIR in "${ISAAC_ROS_DEV_DIR_DEFAULTS[@]}" + do + if [[ -d "$ISAAC_ROS_DEV_DIR" ]]; then + break + fi + done + + if [[ ! -d "$ISAAC_ROS_DEV_DIR" ]]; then + ISAAC_ROS_DEV_DIR=$(realpath "$ROOT/../") + fi + print_warning "isaac_ros_dev not specified, assuming $ISAAC_ROS_DEV_DIR" +fi + +# Validate isaac_ros_dev_dir +if [[ ! -d "$ISAAC_ROS_DEV_DIR" ]]; then + print_error "Specified isaac_ros_dev does not exist: $ISAAC_ROS_DEV_DIR" + exit 1 +fi + # Prevent running as root. if [[ $(id -u) -eq 0 ]]; then print_error "This script cannot be executed with root privileges." @@ -97,15 +152,38 @@ if [[ $? -eq 0 ]]; then for (( i=0; i<${#LFS_FILES_STATUS}; i++ )); do f="${LFS_FILES_STATUS:$i:1}" if [[ "$f" == "-" ]]; then - print_error "LFS files are missing. Please re-clone the repo after installing git-lfs." + print_error "LFS files are missing. Please re-clone repos after installing git-lfs." exit 1 fi done fi +# Determine base image key PLATFORM="$(uname -m)" +BASE_IMAGE_KEY=$PLATFORM.user +if [[ ! -z "${IMAGE_KEY}" ]]; then + BASE_IMAGE_KEY=$PLATFORM.$IMAGE_KEY + + # If the configured key does not have .user, append it last + if [[ $IMAGE_KEY != *".user"* ]]; then + BASE_IMAGE_KEY=$BASE_IMAGE_KEY.user + fi +fi + +# Check skip image build from env +if [[ ! -z $SKIP_DOCKER_BUILD ]]; then + SKIP_IMAGE_BUILD=1 +fi + +# Check skip image build from config +if [[ ! -z $CONFIG_SKIP_IMAGE_BUILD ]]; then + SKIP_IMAGE_BUILD=1 +fi BASE_NAME="isaac_ros_dev-$PLATFORM" +if [[ ! -z "$CONFIG_CONTAINER_NAME_SUFFIX" ]] ; then + BASE_NAME="$BASE_NAME-$CONFIG_CONTAINER_NAME_SUFFIX" +fi CONTAINER_NAME="$BASE_NAME-container" # Remove any exited containers. @@ -120,27 +198,28 @@ if [ "$(docker ps -a --quiet --filter status=running --filter name=$CONTAINER_NA exit 0 fi -# Build image -IMAGE_KEY=ros2_humble -if [[ ! -z "${CONFIG_IMAGE_KEY}" ]]; then - IMAGE_KEY=$CONFIG_IMAGE_KEY -fi +# Summarize launch +print_info "Launching Isaac ROS Dev container with image key ${BASE_IMAGE_KEY}: ${ISAAC_ROS_DEV_DIR}" -BASE_IMAGE_KEY=$PLATFORM.user -if [[ ! -z "${IMAGE_KEY}" ]]; then - BASE_IMAGE_KEY=$PLATFORM.$IMAGE_KEY +# Build imag to launch +if [[ $SKIP_IMAGE_BUILD -ne 1 ]]; then + print_info "Building $BASE_IMAGE_KEY base as image: $BASE_NAME" + $ROOT/build_image_layers.sh --image_key "$BASE_IMAGE_KEY" --image_name "$BASE_NAME" - # If the configured key does not have .user, append it last - if [[ $IMAGE_KEY != *".user"* ]]; then - BASE_IMAGE_KEY=$BASE_IMAGE_KEY.user + # Check result + if [ $? -ne 0 ]; then + if [[ -z $(docker image ls --quiet $BASE_NAME) ]]; then + print_error "Building image failed and no cached image found for $BASE_NAME, aborting." + exit 1 + else + print_warning "Unable to build image, but cached image found." + fi fi fi -print_info "Building $BASE_IMAGE_KEY base as image: $BASE_NAME using key $BASE_IMAGE_KEY" -$ROOT/build_base_image.sh $BASE_IMAGE_KEY $BASE_NAME '' '' '' - -if [ $? -ne 0 ]; then - print_error "Failed to build base image: $BASE_NAME, aborting." +# Check image is available +if [[ -z $(docker image ls --quiet $BASE_NAME) ]]; then + print_error "No built image found for $BASE_NAME, aborting." exit 1 fi @@ -153,24 +232,16 @@ DOCKER_ARGS+=("-e NVIDIA_DRIVER_CAPABILITIES=all") DOCKER_ARGS+=("-e FASTRTPS_DEFAULT_PROFILES_FILE=/usr/local/share/middleware_profiles/rtps_udp_profile.xml") DOCKER_ARGS+=("-e ROS_DOMAIN_ID") DOCKER_ARGS+=("-e USER") +DOCKER_ARGS+=("-e ISAAC_ROS_WS=/workspaces/isaac_ros-dev") if [[ $PLATFORM == "aarch64" ]]; then DOCKER_ARGS+=("-v /usr/bin/tegrastats:/usr/bin/tegrastats") - DOCKER_ARGS+=("-v /tmp/argus_socket:/tmp/argus_socket") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcusolver.so.11:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcusolver.so.11") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcusparse.so.11:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcusparse.so.11") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcurand.so.10:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcurand.so.10") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcufft.so.10:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcufft.so.10") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libnvToolsExt.so:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libnvToolsExt.so") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcupti.so.11.4:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcupti.so.11.4") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudla.so.1:/usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudla.so.1") - DOCKER_ARGS+=("-v /usr/local/cuda-11.4/targets/aarch64-linux/include/nvToolsExt.h:/usr/local/cuda-11.4/targets/aarch64-linux/include/nvToolsExt.h") + DOCKER_ARGS+=("-v /tmp/:/tmp/") DOCKER_ARGS+=("-v /usr/lib/aarch64-linux-gnu/tegra:/usr/lib/aarch64-linux-gnu/tegra") DOCKER_ARGS+=("-v /usr/src/jetson_multimedia_api:/usr/src/jetson_multimedia_api") - DOCKER_ARGS+=("-v /opt/nvidia/nsight-systems-cli:/opt/nvidia/nsight-systems-cli") DOCKER_ARGS+=("--pid=host") - DOCKER_ARGS+=("-v /opt/nvidia/vpi2:/opt/nvidia/vpi2") - DOCKER_ARGS+=("-v /usr/share/vpi2:/usr/share/vpi2") + DOCKER_ARGS+=("-v /usr/share/vpi3:/usr/share/vpi3") + DOCKER_ARGS+=("-v /dev/input:/dev/input") # If jtop present, give the container access if [[ $(getent group jtop) ]]; then @@ -181,10 +252,20 @@ if [[ $PLATFORM == "aarch64" ]]; then fi # Optionally load custom docker arguments from file -DOCKER_ARGS_FILE="$ROOT/.isaac_ros_dev-dockerargs" -if [[ -f "$DOCKER_ARGS_FILE" ]]; then - print_info "Using additional Docker run arguments from $DOCKER_ARGS_FILE" - readarray -t DOCKER_ARGS_FILE_LINES < $DOCKER_ARGS_FILE +if [[ -z "${DOCKER_ARGS_FILE}" ]]; then + DOCKER_ARGS_FILE=".isaac_ros_dev-dockerargs" +fi + +# Check for dockerargs file in home directory, then locally in root +if [[ -f ~/${DOCKER_ARGS_FILE} ]]; then + DOCKER_ARGS_FILEPATH=`realpath ~/${DOCKER_ARGS_FILE}` +elif [[ -f "${ROOT}/${DOCKER_ARGS_FILE}" ]]; then + DOCKER_ARGS_FILEPATH="${ROOT}/${DOCKER_ARGS_FILE}" +fi + +if [[ -f "${DOCKER_ARGS_FILEPATH}" ]]; then + print_info "Using additional Docker run arguments from $DOCKER_ARGS_FILEPATH" + readarray -t DOCKER_ARGS_FILE_LINES < $DOCKER_ARGS_FILEPATH for arg in "${DOCKER_ARGS_FILE_LINES[@]}"; do DOCKER_ARGS+=($(eval "echo $arg | envsubst")) done @@ -192,18 +273,19 @@ fi # Run container from image print_info "Running $CONTAINER_NAME" +if [[ $VERBOSE -eq 1 ]]; then + set -x +fi docker run -it --rm \ --privileged \ --network host \ ${DOCKER_ARGS[@]} \ -v $ISAAC_ROS_DEV_DIR:/workspaces/isaac_ros-dev \ - -v /dev/*:/dev/* \ -v /etc/localtime:/etc/localtime:ro \ --name "$CONTAINER_NAME" \ --runtime nvidia \ --user="admin" \ --entrypoint /usr/local/bin/scripts/workspace-entrypoint.sh \ --workdir /workspaces/isaac_ros-dev \ - $@ \ $BASE_NAME \ /bin/bash