PyNITROS

PyNITROS eliminates the CPU<->GPU data movement across rclpy ROS nodes by integrating NITROS for Python.

PyNITROS was developed to bring the benefits of NITROS to Python’s large community. The benefits include the overall speedup of ROS graphs with heavy GPU utilization while reducing CPU overhead. PyNITROS also enables integration with available NITROS nodes through NITROS Bridge, allowing Python users to utilize NVIDIA’s hardware accelerated ROS 2 packages alongside their rclpy based nodes.

PyNITROS Publisher

PyNitrosPublisher is designed to publish NITROS Bridge messages and it can publish raw ROS messages if the enable_ros_publish flag is set to True. When this flag is enabled, PyNitrosPublisher publishes both NITROS Bridge messages and raw ROS messages. The publish function from PyNitrosPublisher needs to take messages that are created by PyNitrosBuilder.

PyNITROS Subscriber

PyNitrosSubscriber subscribes to NITROS Bridge messages. Developers can opt to fall back to the ROS subscriber to subscribe the raw ROS message by setting enable_ros_subscribe to True. After the flag is enabled, this subscriber exclusively subscribes to the raw ROS message.

The user-defined callback then receives a PyNitrosView.

PyNITROS Message Filter

PyNitrosMessageFilter is a wrapper of the ROS 2 MessageFilter class that synchronize incoming messages based on the provided synchronizer type. The synchronizer policy can be either TimeSynchronizer or ApproximateTimeSynchronizer. The subscribers can be either PyNitrosSubscriber or ROS 2 subscribers. If the subscriber is a PyNitrosSubscriber, the message will be converted to a PyNitrosView. The user-defined callback will be triggered once receive the synchronized messages.

PyNITROS View

PyNitrosView is a wrapper of the NITROS Bridge message that provides basic access to the GPU pointer and metadata that is sent from the publisher. Additionally, PyNitrosView supports the __cuda_array_interfaces__ attribute, allowing developers to convert the view to other types, for example, PyTorch tensor.

The following two NITROS Bridge message types are supported by PyNitrosView:

  • isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage

  • isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeTensorList

PyNITROS Builder

PyNitrosBuilder are a series of utility classes that streamline the process of creating a NITROS Bridge message. PyNitrosBuilder is responsible for setting up the CUDA IPC memory pool and returning a NITROS Bridge message that other PyNITROS and NITROS Bridge nodes can receive.

The following two NITROS Bridge message types are supported by PyNitrosBuilder:

  • isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeImage

  • isaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeTensorList

Repositories and Packages

The Isaac ROS implementations of this technology are available here: