Error building ZED ROS2 wrapper on JetPack 6.0.0 with NVIDIA ROS Isaac 3.1

Hi there,

I’m working on getting ZED ROS2 nodes running with 4 ZED X cameras and NTROS enabled on a Jetpack 6.0.0 system, following these instructions:

Since I’m using JetPack 6.0.0, I’m using Isaac ROS 3.1 instead of 3.2 as specified in the instructions:

git clone --branch release-3.1 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git --recurse-submodules1

Since I’m using ZED SDK 5.0.5, I’ve also cloned the corresponding zed-ros2-wrapper version:

 git clone --branch humble-v5.0.0 https://github.com/stereolabs/zed-ros2-wrapper.git

However, when building the zed_wrapper ROS2 package, I see this error:

admin@nvidia-desktop:/workspaces/isaac_ros-dev$ colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release --packages-up-to zed_wrapper
Starting >>> zed_components
[Processing: zed_components]                             
[Processing: zed_components]                                     
--- stderr: zed_components                                       
 * ISAAC ROS Nitros transport is available
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_main.cpp: In member function ‘void stereolabs::ZedCamera::callback_setRoi(std::shared_ptr<rmw_request_id_s>, std::shared_ptr<zed_msgs::srv::SetROI_Request_<std::allocator<void> > >, std::shared_ptr<zed_msgs::srv::SetROI_Response_<std::allocator<void> > >)’:
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_main.cpp:8063:40: error: ‘NitrosDiagnosticsConfig’ is not a member of ‘nvidia::isaac_ros::nitros’; did you mean ‘NitrosStatisticsConfig’?
 8063 |             nvidia::isaac_ros::nitros::NitrosDiagnosticsConfig(), mQos);
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~
      |                                        NitrosStatisticsConfig
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_video_depth.cpp: In lambda function:
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_video_depth.cpp:177:38: error: ‘NitrosDiagnosticsConfig’ is not a member of ‘nvidia::isaac_ros::nitros’; did you mean ‘NitrosStatisticsConfig’?
  177 |           nvidia::isaac_ros::nitros::NitrosDiagnosticsConfig(), mQos);
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~
      |                                      NitrosStatisticsConfig
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_video_depth.cpp: In member function ‘void stereolabs::ZedCamera::initVideoDepthPublishers()’:
/workspaces/isaac_ros-dev/src/zed-ros2-wrapper/zed_components/src/zed_camera/src/zed_camera_component_video_depth.cpp:201:34: error: ‘NitrosDiagnosticsConfig’ is not a member of ‘nvidia::isaac_ros::nitros’; did you mean ‘NitrosStatisticsConfig’?
  201 |       nvidia::isaac_ros::nitros::NitrosDiagnosticsConfig(), mQos);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~
      |                                  NitrosStatisticsConfig
gmake[2]: *** [CMakeFiles/zed_camera_component.dir/build.make:146: CMakeFiles/zed_camera_component.dir/src/zed_camera/src/zed_camera_component_video_depth.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[2]: *** [CMakeFiles/zed_camera_component.dir/build.make:132: CMakeFiles/zed_camera_component.dir/src/zed_camera/src/zed_camera_component_main.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:166: CMakeFiles/zed_camera_component.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
gmake: *** [Makefile:146: all] Error 2
---
Failed   <<< zed_components [1min 2s, exited with code 2]

Summary: 0 packages finished [1min 3s]
  1 package failed: zed_components
  1 package had stderr output: zed_components
  1 package not processed

Looking at the isaac_ros_nitros repo, it seems that the member name was changed between v3.1.0 and 3.2.1:

  • v3.1.0NitrosStatisticsConfig
  • v3.2.1NitrosDiagnosticsConfig

Since NITROS support was added in zed-ros2-wrapper version humble-v5.0.0, referencing the NitrosDiagnosticsConfig member, it seems that the zed-ros2-wrapper isn’t compatible with Isaac ROS2 versions earlier than 3.2.

Question 1: Is this intentional, or is it just a bug?

I assume it’s just a bug since this section of the setup instructions implies that JetPack 6.0.0 (and hence Isaac ROS 3.1) is supported:

If you are using a different version of the JetPack SDK, you must adjust the URL accordingly. For example, if you are using JetPack 6.0, you must change l4t36.4 to l4t36.3.

I’ve also been able to build the zed_wrapper package on this system and get the camera nodes running by changing the references from NitrosStatisticsConfig to NitrosDiagnosticsConfig.

Question 2: Is the ZED ROS2 w/ NITROS integration expected to work with Jetpack 6.0.0 and Isaac ROS 3.1 systems? If so, are there any caveats to working with this configuration, or should it be fully supported?

Thanks in advance!

System Overview

  • Platform: Syslogic RML A4NX (GMSL)
  • JetPack: 6.0.0
  • Cameras: 4x ZED X cameras
  • ZED SDK: 5.0.5
  • Drivers: 1.3.0

Hi @andrew.stringfield

NITROS support was introduced in zed-ros2-wrapper humble-v5.0.0 against the Isaac ROS 3.2 API. The struct was renamed from NitrosStatisticsConfig (v3.1) to NitrosDiagnosticsConfig (v3.2) by NVIDIA, and we built against the new name. The wrapper is currently only compatible with Isaac ROS 3.2.x — this is documented on our Isaac ROS integration page, but I agree it’s not as prominent as it should be on the setup guide itself. I’ll flag it internally.

Support for Isaac ROS 4.x (JetPack 7 / Jetson Thor) is planned for a future release.

The note you quoted about adjusting l4t36.4l4t36.3 only refers to the ZED SDK installer URL, not to the Isaac ROS version. It’s there because the ZED SDK ships separate L4T-specific binaries. The supported path for the wrapper with NITROS is JetPack 6.1+ with Isaac ROS 3.2.x — JetPack 6.0 is below the floor NVIDIA set for Isaac ROS 3.2.

I’ll make sure this prerequisite is called out more clearly in the setup guide.

About your workaround

Renaming the symbol back to NitrosStatisticsConfig builds, but I’d be cautious about relying on it in production. The wrapper currently default-constructs the config (NitrosDiagnosticsConfig()) without setting fields, so you’ll likely get a working build — but the two structs are not field-compatible across the rename, and the diagnostics behavior may silently differ. Given that you’ve been chasing the 5 Hz / 30 Hz instability on this same platform, I’d rather you weren’t also debugging on a patched diagnostics path.

Recommended options, in order

  1. Upgrade to JetPack 6.1+ and use Isaac ROS 3.2.x. This is the configuration we test against. Worth checking with Syslogic first whether their BSP for the RML A4NX supports JP 6.1 or 6.2.
  2. If JP 6.1 is blocked by the BSP, fall back to a pre-NITROS wrapper tag (anything before humble-v5.0.0). You lose NITROS acceleration but you get a tested build on your current stack. With 4× ZED X at 30 Hz this is a measurable performance hit, so option 1 is preferable when feasible.
  3. Keep your local patch only as a short-term unblock while you work toward option 1.

Let me know which path makes sense for your setup, and if you do go the BSP-upgrade route, I’m happy to help debug if anything breaks on the wrapper side.