isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble isaac_ros_h264_decoder isaac_ros_h264_encoder

Repository Summary

Description NVIDIA-accelerated data compression
Checkout URI https://github.com/nvidia-isaac-ros/isaac_ros_compression.git
VCS Type git
VCS Version main
Last Updated 2025-02-28
Dev Status UNKNOWN
CI status No Continuous Integration
Released UNRELEASED
Tags compression gpu nvidia jetson ros2 ros2-humble
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

README

Isaac ROS Compression

NVIDIA-accelerated data compression.

image

Overview

Isaac ROS Compression provides H.264 image encoder and decoder that leverages the specialized hardware in NVIDIA GPUs and the Jetson platform. The isaac_ros_h264_encoder package can compress an image into H.264 data using the NVENC. The isaac_ros_h264_decoder package can decode the H.264 data into original images using the NVDEC.

Image compression reduces the data footprint of images when written to storage or transmitted between computers. A 1080p camera at 30fps produces 177MB/s of data; image compression reduces this by approximately 10 times to 17MB/s of data, reducing the throughput needed to send this to another computer or write out to storage; a one minute 1080p camera recording is reduced from ~10GB to ~1GB. This compression is provided by dedicated NVIDIA acceleration (NvEnc) separate from other hardware engines such as the GPU.

A common use case for image compression during the development of robots is to capture camera images to storage. This captured data is processed offline from the robot to produce training datasets for AI models, test datasets for perception functions, and test data for open-loop re-simulation of software in development with real data. The compression parameters are tuned to minimize visual quality reduction from lossy compression for AI model and perception function development. Compression reduces the amount of data written to storage, the time required to offload the recording, and footprint of the data at rest in a data lake.

Compression can be used with event data recorders to capture camera images to storage when an event of interest occurs, often due to failures on the robot. This provides visual information to assist in the debugging of the event or to improve perception and robot functions.

H.264 is an efficient and popular compression algorithm with broad support across many platforms. The output of the isaac_ros_h264_encoder package can then be decoded with NVIDIA acceleration using the isaac_ros_h264_decoder on Jetson and x86_64 systems, or by third-party H.264 decoder packages on non-NVIDIA platforms.

This package is powered by NVIDIA Isaac Transport for ROS (NITROS), which leverages type adaptation and negotiation to optimize message formats and dramatically accelerate communication between participating nodes.

[!Note] ROS 2 relies on image_transport_plugins for CPU based compression. We recommend using isaac_ros_h264_encoder as part of the graph of nodes when capturing to a rosbag for performance benefits of NITROS; ROS 2 type adaptation used by NITROS is not supported by image_transport_plugins, resulting in more CPU load, and less encode performance.

Performance

Sample Graph

Input Size

AGX Orin

x86_64 w/ RTX 4090

H.264 Decoder Node



1080p



188 fps


7.3 ms @ 30Hz

596 fps


2.6 ms @ 30Hz

H.264 Encoder Node


I-frame Support

1080p



402 fps


12 ms @ 30Hz

412 fps


3.2 ms @ 30Hz

H.264 Encoder Node


P-frame Support

1080p



465 fps


11 ms @ 30Hz

596 fps


2.0 ms @ 30Hz


Documentation

Please visit the Isaac ROS Documentation to learn how to use this repository.


Packages

Latest

Update 2024-12-10: Update to be compatible with JetPack 6.1

CONTRIBUTING

Isaac ROS Contribution Rules

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).


isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble

isaac_ros_compression repository

compression gpu nvidia jetson ros2 ros2-humble