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/NitrosBridgeImageisaac_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/NitrosBridgeImageisaac_ros_nitros_bridge_interfaces/msg/NitrosBridgeTensorList
Repositories and Packages
The Isaac ROS implementations of this technology are available here: