ROS2 package using DW APIs for PVA and encoder

Please provide the following info (check/uncheck the boxes after clicking “+ Create Topic”):
Software Version
DRIVE OS Linux 5.2.0
DRIVE OS Linux 5.2.0 and DriveWorks 3.5
NVIDIA DRIVE™ Software 10.0 (Linux)
NVIDIA DRIVE™ Software 9.0 (Linux)
other DRIVE OS version

Target Operating System

Hardware Platform
NVIDIA DRIVE™ AGX Xavier DevKit (E3550)
NVIDIA DRIVE™ AGX Pegasus DevKit (E3550)

SDK Manager Version

Host Machine Version
native Ubuntu 18.04

Hi All,

Would anyone happen to know of an attempt to develop ROS2 package which uses PVA and encoder accelerators ? When I search I do see GMSL camera driver/producer ROS2 package with DW. However from my search I was not able to get to anything which used accelerators like PVA and Encoder. I would like to understand the how image buffers are passed and topic from camera node package to PVA and encoder concurrently ? How NvStreams is used on this path.


Dear @ai.trucker,
Is the ask, you want to use PVA/Encoder APIs with ROS2 package?

Yes. Ideally I am looking to implement

  1. CameraProducer (ROS2 package) → This uses ISP and feeds to following two
  2. Encoder (ROS2 package, uses encoder, input yuv20 image, output h264/h265)
  3. CV Processor (ROS2 package, uses PVA, input RGB image, output few bounding boxes)

I’m guessing that I would need to use NvStreams between 1 → 2 and 1 → 3. How that works with DW APIs and ROS2 ? Furthermore any suggestion how do we manage #1 to give same image in two different formats - yuv 420 for #2 and RGB for #3 ?


Dear @ai.trucker,
We don’t have any repo based on ROS2. we have GitHub - NVIDIA/dw-ros: ROS cross-compilation with DriveWorks based on ROS1 and it does not include Accelerators/nvstreams.

If you want to use DW APIs, the image should be either dwImageCPU/dwImageCUDA/dwImageNvmedia format. If so, you can use conversion APIs and dwImageStreamer to share image across different APIs like CUDA/NvMedia/GL.