NITROS#

What Is NITROS?#

NVIDIA Isaac Transport for ROS (NITROS) is the implementation of two hardware-acceleration features introduced with ROS 2 Humble-type adaptation and type negotiation.

Type adaptation enables ROS nodes to work in a data format optimized for specific hardware accelerators. The adapted type is used by processing graphs to eliminate memory copies between the CPU and the memory accelerator.

Through type negotiation, different ROS nodes in a processing graph can advertise their supported types and the ROS framework can choose data formats, resulting in ideal performance.

Purpose and Problem Solving#

Most middleware frameworks, including ROS, typically work with CPU-based messages. This becomes problematic when working with hardware accelerators like GPUs, VICs, or PVAs. Without NITROS, data processed on these accelerators would need to be copied back to CPU memory before being sent to the next node, causing inefficiencies.

../_images/nitrosgif.gif

NVIDIA Isaac Transport for ROS package for hardware-acceleration friendly movement of messages.#

NITROS addresses a significant limitation in traditional ROS communication. Let’s talk about how.

How NITROS Works#

NITROS introduces a more efficient way of handling data. It allows sending handles between nodes instead of full data copies.

  • If the receiving node understands NITROS, it can use the GPU handle directly, eliminating memory copies

  • For nodes that don’t support NITROS, the framework automatically converts the message to a standard ROS format

This approach makes NITROS both optimal when possible and compatible when necessary.

NITROS Technologies#

NVIDIA offers three NITROS-related technologies: CUDA with NITROS, NITROS Bridge, and PyNITROS.

CUDA With NITROS#

  • Allows developers to write their own ROS nodes that can send and receive GPU buffers

  • Compatible with other NITROS nodes developed by NVIDIA

NITROS Bridge#

  • Designed for inter-process communication

  • Initially introduced to work with ROS 1 users who hadn’t migrated to ROS 2

  • Uses a form of CUDA IPC (Inter-Process Communication)

PyNITROS#

  • Supports Python users

  • Allows sending raw PyTorch buffers to C++ nodes without memory copies

Benefits of NITROS#

NITROS represents a significant improvement in ROS 2 performance for NVIDIA hardware, allowing developers to leverage GPU acceleration more efficiently in their robotics applications. By leveraging NITROS, you’ll be able to:

  • Reduce unnecessary memory copies between CPU and GPU

  • Improve GPU utilization by avoiding synchronization bottlenecks

  • Enable faster processing of large data structures like point clouds or 4K images

  • Maintain compatibility with existing ROS tools and nodes