Skip to content

Commit a66e227

Browse files
authored
Merge pull request #367 from stereolabs/add_nitros_transport
Add Isaac ROS integration with NITROS
2 parents e9f5490 + 4dc36cb commit a66e227

File tree

13 files changed

+1051
-629
lines changed

13 files changed

+1051
-629
lines changed

CHANGELOG.rst

Lines changed: 43 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,55 @@
11
LATEST CHANGES
22
==============
33

4-
2025-07-08
5-
-----------
6-
- Change `pos_tracking.area_memory_db_path` to `pos_tracking.area_file_path` to match the ZED SDK parameter name
7-
- Add parameter `pos_tracking.save_area_memory_on_closing` to save the Area Memory before closing the camera
8-
- Fix Area Mapping file handling according to the ZED SDK policies.
9-
- The Area Memory file is now saved only if the Area Memory is enabled, if the `pos_tracking.save_area_memory_on_closing`
10-
parameter is set to `true`, if the `pos_tracking.area_file_path` is set and if the `pos_tracking.area_file_path` is valid.
11-
- Add `save_area_memory` service
12-
- Set the filename as a parameter. If the filename is empty, it uses the value of the parameter `pos_tracking.area_file_path` if not empty.
13-
14-
2025-06-18
15-
----------
16-
- Added a new launch option 'node_log_type' to set the type of log to be used by the ZED Node.
17-
- The available options are `screen`, `log`, and `both`.
18-
19-
2025-05-29
20-
----------
21-
- Separated Video/Depth data publishing into its own thread for more precise control over the publishing rate,
22-
independent of the camera grab rate. This enables recording SVO files or processing positional tracking at
23-
full grab rate, while publishing data at a reduced rate to optimize bandwidth usage.
24-
25-
2025-05-20
26-
----------
4+
v5.0.0
5+
------
6+
- Backward compatible with SDK v4.2
7+
- Added official support for ROS 2 Jazzy Jalisco
8+
- Note: requires the latest `zed_msgs` package v5.0.0
9+
- Added SVO Status topic to monitor the current SVO status of type `zed_msgs::SvoStatus`
10+
- Added fully integrated Health Status topic of type `zed_msgs::HealthStatusStamped`
11+
- Remove the single health status topics to simplicy health monitoring
12+
- Remove `cob_srvs` dependency to use the custom `zed_msgs::SetSvoFrame` service
13+
- Added Heartbeat status message at 1 Hz: `~/status/heartbeat`
14+
- Improve performance with the default stereo configuration
15+
- Fix Positional Tracking enabling when required by ZED SDK modules
16+
- Fix realtime IMU data publishing when using SVO2
17+
- Added parameter 'debug.sdk_verbose_log_file' to Stereo and Mono components to set the path of the SDK verbose log file
18+
- Clean shutdown of ZED components using `pre_shutdown_callback`
19+
- Added new parameter `svo.replay_rate` to set the replay rate for the SVO when not used in realtime mode (range [0.10-5.0])
20+
- Improved diagnostic information for SVO playback
21+
- Default SVO Recording Compression mode [`0`] is forced to `H265` replacing the old `LOSSLESS` mode
22+
- H265 is far superior as it uses hardware encoder, resulting in faster, lighter encoding, and dramatically smaller SVO2 files
23+
- Added `/clock` publisher to be used in SVO Mode to synchronize other nodes with the SVO timestamp
24+
- Added parameter `svo.publish_svo_clock` to enable the `/clock` publisher
25+
- The parameter 'svo.publish_svo_clock' is normally overridden by the `publish_svo_clock` launch option
26+
- Moved `brightness`, `contrast`, and `hue` from `common_stereo.yaml` to `zed.yaml`, `zed2.yaml`, `zed2i.yaml`, and `zedm.yaml` files
2727
- Add advanced handling of the Object Detection and Tracking module of the ZED SDK
28-
2928
- Move the multi-box native object detection parameters to the `object_detection.yaml` file
3029
- Add specific parameters to set the confidence threshold for each of the includes object detection classes of the ZED SDK
3130
- Move the Custom Object Detection parameters to the `custom_object_detection.yaml` file
3231
- Support all the new parameters of the ZED SDK v5 separately for each of the custom object detection classes
33-
3432
- The usage of the new Object Detection support is fully described on the ZED ROS 2 online documentation:
35-
- Object Detection: https://www.stereolabs.com/docs/ros2/object-detection/
36-
- Custom Object Detection: https://www.stereolabs.com/docs/ros2/custom-object-detection/
37-
38-
2025-05-19
39-
-----------
40-
- Move `brightness`, `contrast`, and `hue` from `common_stereo.yaml` to `zed.yaml`, `zed2.yaml`, `zed2i.yaml`, and `zedm.yaml` files
41-
42-
2025-05-14
43-
----------
44-
- Add `/clock` publisher to be used in SVO Mode to synchronize other nodes with the SVO timestamp
45-
- Add parameter `svo.publish_svo_clock` to enable the `/clock` publisher
46-
- The parameter 'svo.publish_svo_clock' is normally overridden by the `publish_svo_clock` launch option
47-
48-
2025-04-30
49-
----------
50-
- Default SVO Recording Compression mode [`0`] is forced to `H265` replacing the old `LOSSLESS` mode
51-
- H265 is far superior as it uses hardware encoder, resulting in faster, lighter encoding, and dramatically smaller SVO2 files
52-
53-
2025-04-28
54-
----------
55-
- Add new parameter `svo.replay_rate` to set the replay rate for the SVO when not used in realtime mode (range [0.10-5.0])
56-
- Improved diagnostic information for SVO playback
57-
58-
2025-04-23
59-
----------
60-
- Clean shutdown of ZED components using `pre_shutdown_callback`
61-
62-
2025-04-22
63-
----------
64-
- Add backward compatibility with SDK v4.2
65-
66-
2025-04-18
67-
----------
68-
- Add parameter 'debug.sdk_verbose_log_file' to Stereo and Mono components to set the path of the SDK verbose log file
69-
70-
2025-04-16
71-
----------
72-
- Fix realtime IMU data publishing when using SVO2
73-
74-
2025-04-15
75-
----------
76-
- Improve performance with the default stereo configuration
77-
- Fix Positional Tracking enabling when required by ZED SDK modules
78-
79-
2025-04-01
80-
----------
81-
- Add Heartbeat status message at 1 Hz: `~/status/heartbeat`
82-
83-
2025-03-28
84-
----------
85-
- Note: requires the latest `zed_msgs` package v5.0.0
86-
- Add SVO Status topic to monitor the current SVO status of type `zed_msgs::SvoStatus`
87-
- Add fully integrated Health Status topic of type `zed_msgs::HealthStatusStamped`
88-
- Remove the single health status topics to simplicy health monitoring
89-
- Remove `cob_srvs` dependency to use the custom `zed_msgs::SetSvoFrame` service
90-
91-
2025-03-26
92-
----------
93-
- Add official support for ROS 2 Jazzy Jalisco
33+
- Object Detection: https://docs.stereolabs.com/ros2/object-detection/
34+
- Custom Object Detection: https://docs.stereolabs.com/ros2/custom-object-detection/
35+
- Separated Video/Depth data publishing into its own thread for more precise control over the publishing rate,
36+
independent of the camera grab rate. This enables recording SVO files or processing positional tracking at
37+
full grab rate, while publishing data at a reduced rate to optimize bandwidth usage.
38+
- Added a new launch option 'node_log_type' to set the type of log to be used by the ZED Node.
39+
- The available options are `screen`, `log`, and `both`.
40+
- Changed `pos_tracking.area_memory_db_path` to `pos_tracking.area_file_path` to match the ZED SDK parameter name
41+
- Added parameter `pos_tracking.save_area_memory_on_closing` to save the Area Memory before closing the camera
42+
- Fixed Area Mapping file handling according to the ZED SDK policies.
43+
- The Area Memory file is now saved only if the Area Memory is enabled, if the `pos_tracking.save_area_memory_on_closing`
44+
parameter is set to `true`, if the `pos_tracking.area_file_path` is set and if the `pos_tracking.area_file_path` is valid.
45+
- Added `save_area_memory` service
46+
- Set the filename as a parameter. If the filename is empty, it uses the value of the parameter `pos_tracking.area_file_path` if not empty.
47+
- Added `enable_ipc` launch argument to enable intra-process communication (IPC) when using ROS 2 Composition.
48+
- Note: NITROS requires IPC to be disabled to work properly.
49+
- Fixed plane topic names, adding missing node name prefix
50+
- Added camera_info to Confidence Map topic
51+
- Enabled Isaac ROS integration and automatic NITROS usage: https://docs.stereolabs.com/isaac-ros/
52+
- Added the parameter `debug.disable_nitros` to disable NITROS usage. This is useful for debugging and testing purposes.
9453

9554
v4.2.5
9655
------

README.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,20 @@ The services `toLL` and `fromLL` can be used to convert Latitude/Longitude coord
245245
246246
> :pushpin: **Note:** This feature is incompatible with the ZED X One camera.
247247
248-
For robots moving on a planar surface, activating the "2D mode" (parameter `pos_tracking/two_d_mode` in `common_stereo.yaml`) is possible.
249-
The value of the coordinate Z for odometry and pose will have a fixed value (parameter `pos_tracking/fixed_z_value` in `common_stereo.yaml`).
248+
For robots moving on a planar surface, activating the "2D mode" (parameter `pos_tracking/two_d_mode` in `common_stereo.yaml`) is possible.
249+
The value of the coordinate Z for odometry and pose will have a fixed value (parameter `pos_tracking/fixed_z_value` in `common_stereo.yaml`).
250250
Roll, Pitch, and the relative velocities will be fixed to zero.
251251
252+
## NVIDIA® Isaac ROS integration
253+
254+
The ZED ROS 2 Wrapper is compatible with the [NVIDIA® Isaac ROS](https://nvidia-isaac-ros.github.io/) framework, which provides a set of tools and libraries for building robotics applications on NVIDIA® platforms.
255+
256+
The ZED ROS 2 Wrapper leverages [NITROS](https://nvidia-isaac-ros.github.io/concepts/nitros/index.html) (NVIDIA® Isaac Transport for ROS) a technology to enable data streaming through NVIDIA-accelerated ROS graphs.
257+
258+
![NITROS communication](./images/nitros-graph.gif)
259+
260+
Read the full [Isaac ROS integration guide](https://docs.stereolabs.com/isaac-ros/) and learn how to setup your development environment to use the ZED ROS2 Wrapper with Isaac ROS and NITROS.
261+
252262
## Examples and Tutorials
253263
254264
Examples and tutorials are provided to better understand how to use the ZED wrapper and how to integrate it into the ROS 2 framework.
@@ -298,3 +308,6 @@ colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release --paralle
298308
299309
## Known issues
300310
311+
- Nothindg to report yet.
312+
313+
If you find a bug or want to request a new feature, please open an issue on the [GitHub issues page](https://github.com/stereolabs/zed-ros2-wrapper/issues).

images/nitros-graph.gif

578 KB
Loading

zed_components/CMakeLists.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,34 @@ find_package(visualization_msgs REQUIRED)
145145
find_package(shape_msgs REQUIRED)
146146
find_package(robot_localization REQUIRED)
147147

148+
# Check ISAAC ROS Nitros availability
149+
find_package(isaac_ros_common QUIET)
150+
if(isaac_ros_common_FOUND)
151+
find_package(isaac_ros_nitros)
152+
if(isaac_ros_nitros_FOUND)
153+
find_package(isaac_ros_managed_nitros QUIET)
154+
if(isaac_ros_managed_nitros_FOUND)
155+
find_package(isaac_ros_nitros_image_type QUIET)
156+
if(isaac_ros_nitros_image_type_FOUND)
157+
list(APPEND DEPENDENCIES isaac_ros_common)
158+
list(APPEND DEPENDENCIES isaac_ros_nitros)
159+
list(APPEND DEPENDENCIES isaac_ros_managed_nitros)
160+
list(APPEND DEPENDENCIES isaac_ros_nitros_image_type)
161+
add_definitions(-DFOUND_ISAAC_ROS_NITROS)
162+
message(" * ISAAC ROS Nitros transport is available")
163+
else()
164+
message(WARNING " * 'isaac_ros_nitros_image_type' not found, ISAAC ROS NITROS transport will not be available.")
165+
endif()
166+
else()
167+
message(WARNING " * 'isaac_ros_managed_nitros' not found, ISAAC ROS NITROS transport will not be available.")
168+
endif()
169+
else()
170+
message(WARNING " * 'isaac_ros_nitros' not found, ISAAC ROS NITROS transport will not be available.")
171+
endif()
172+
else()
173+
message(" * 'isaac_ros_common' not found, ISAAC ROS NITROS transport will not be available.")
174+
endif()
175+
148176
if(NOT ${FOUND_ROS2_DISTRO} STREQUAL "foxy")
149177
find_package(point_cloud_transport REQUIRED)
150178
list(APPEND DEPENDENCIES point_cloud_transport)

zed_components/src/tools/include/sl_types.hpp

Lines changed: 51 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <geometry_msgs/msg/point_stamped.hpp>
3030
#include <geometry_msgs/msg/pose_stamped.hpp>
3131
#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
32-
#include <image_transport/camera_publisher.hpp>
3332
#include <image_transport/image_transport.hpp>
3433
#include <image_transport/publisher.hpp>
3534
#include <memory>
@@ -69,6 +68,11 @@
6968
#include <zed_msgs/srv/start_svo_rec.hpp>
7069
// #include <zed_msgs/srv/save_area_memory.hpp> TODO(Walter): Uncomment when available in `zed_msgs` package from APT
7170

71+
#ifdef FOUND_ISAAC_ROS_NITROS
72+
#include "isaac_ros_managed_nitros/managed_nitros_publisher.hpp"
73+
#include "isaac_ros_nitros_image_type/nitros_image.hpp"
74+
#endif
75+
7276
#ifndef FOUND_FOXY
7377
#include <point_cloud_transport/point_cloud_transport.hpp>
7478
#endif
@@ -99,64 +103,52 @@ const bool IS_JETSON = false;
99103
const float NOT_VALID_TEMP = -273.15f;
100104

101105
// ----> Typedefs to simplify declarations
106+
107+
#ifdef FOUND_ISAAC_ROS_NITROS
108+
typedef std::shared_ptr<nvidia::isaac_ros::nitros::ManagedNitrosPublisher<
109+
nvidia::isaac_ros::nitros::NitrosImage>> nitrosImgPub;
110+
#endif
111+
102112
typedef std::shared_ptr<sensor_msgs::msg::CameraInfo> camInfoMsgPtr;
103-
typedef std::shared_ptr<rclcpp::Publisher<rosgraph_msgs::msg::Clock>> clockPub;
104-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::SvoStatus>>
105-
svoStatusPub;
106-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::HealthStatusStamped>>
107-
healthStatusPub;
108-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::Heartbeat>>
109-
heartbeatStatusPub;
110-
111-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::Image>> imagePub;
112-
typedef std::shared_ptr<rclcpp::Publisher<stereo_msgs::msg::DisparityImage>>
113-
disparityPub;
114-
115-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::PointCloud2>>
116-
pointcloudPub;
117-
118-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::Imu>> imuPub;
119-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::MagneticField>>
120-
magPub;
121-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::FluidPressure>>
122-
pressPub;
123-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::Temperature>>
124-
tempPub;
125-
126-
typedef std::shared_ptr<rclcpp::Publisher<geometry_msgs::msg::PoseStamped>>
127-
posePub;
128-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::PosTrackStatus>>
129-
poseStatusPub;
130-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::GnssFusionStatus>>
131-
gnssFusionStatusPub;
132-
typedef std::shared_ptr<
133-
rclcpp::Publisher<geometry_msgs::msg::PoseWithCovarianceStamped>>
134-
poseCovPub;
135-
typedef std::shared_ptr<rclcpp::Publisher<geometry_msgs::msg::TransformStamped>>
136-
transfPub;
137-
typedef std::shared_ptr<rclcpp::Publisher<nav_msgs::msg::Odometry>> odomPub;
138-
typedef std::shared_ptr<rclcpp::Publisher<nav_msgs::msg::Path>> pathPub;
139-
140-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::ObjectsStamped>>
141-
objPub;
142-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::DepthInfoStamped>>
143-
depthInfoPub;
144-
145-
typedef std::shared_ptr<rclcpp::Publisher<zed_msgs::msg::PlaneStamped>>
146-
planePub;
147-
typedef std::shared_ptr<rclcpp::Publisher<visualization_msgs::msg::Marker>>
148-
markerPub;
149-
150-
typedef std::shared_ptr<rclcpp::Publisher<geographic_msgs::msg::GeoPoseStamped>>
151-
geoPosePub;
152-
typedef std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::NavSatFix>>
153-
gnssFixPub;
154-
155-
typedef std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Bool>> healthPub;
156-
157-
typedef std::shared_ptr<rclcpp::Subscription<geometry_msgs::msg::PointStamped>> clickedPtSub;
158-
typedef std::shared_ptr<rclcpp::Subscription<sensor_msgs::msg::NavSatFix>> gnssFixSub;
159-
typedef std::shared_ptr<rclcpp::Subscription<rosgraph_msgs::msg::Clock>> clockSub;
113+
114+
typedef rclcpp::Publisher<sensor_msgs::msg::CameraInfo>::SharedPtr camInfoPub;
115+
typedef rclcpp::Publisher<rosgraph_msgs::msg::Clock>::SharedPtr clockPub;
116+
typedef rclcpp::Publisher<zed_msgs::msg::SvoStatus>::SharedPtr svoStatusPub;
117+
typedef rclcpp::Publisher<zed_msgs::msg::HealthStatusStamped>::SharedPtr healthStatusPub;
118+
typedef rclcpp::Publisher<zed_msgs::msg::Heartbeat>::SharedPtr heartbeatStatusPub;
119+
120+
typedef rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr imagePub;
121+
typedef rclcpp::Publisher<stereo_msgs::msg::DisparityImage>::SharedPtr disparityPub;
122+
123+
typedef rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr pointcloudPub;
124+
125+
typedef rclcpp::Publisher<sensor_msgs::msg::Imu>::SharedPtr imuPub;
126+
typedef rclcpp::Publisher<sensor_msgs::msg::MagneticField>::SharedPtr magPub;
127+
typedef rclcpp::Publisher<sensor_msgs::msg::FluidPressure>::SharedPtr pressPub;
128+
typedef rclcpp::Publisher<sensor_msgs::msg::Temperature>::SharedPtr tempPub;
129+
130+
typedef rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr posePub;
131+
typedef rclcpp::Publisher<zed_msgs::msg::PosTrackStatus>::SharedPtr poseStatusPub;
132+
typedef rclcpp::Publisher<zed_msgs::msg::GnssFusionStatus>::SharedPtr gnssFusionStatusPub;
133+
typedef rclcpp::Publisher<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr poseCovPub;
134+
typedef rclcpp::Publisher<geometry_msgs::msg::TransformStamped>::SharedPtr transfPub;
135+
typedef rclcpp::Publisher<nav_msgs::msg::Odometry>::SharedPtr odomPub;
136+
typedef rclcpp::Publisher<nav_msgs::msg::Path>::SharedPtr pathPub;
137+
138+
typedef rclcpp::Publisher<zed_msgs::msg::ObjectsStamped>::SharedPtr objPub;
139+
typedef rclcpp::Publisher<zed_msgs::msg::DepthInfoStamped>::SharedPtr depthInfoPub;
140+
141+
typedef rclcpp::Publisher<zed_msgs::msg::PlaneStamped>::SharedPtr planePub;
142+
typedef rclcpp::Publisher<visualization_msgs::msg::Marker>::SharedPtr markerPub;
143+
144+
typedef rclcpp::Publisher<geographic_msgs::msg::GeoPoseStamped>::SharedPtr geoPosePub;
145+
typedef rclcpp::Publisher<sensor_msgs::msg::NavSatFix>::SharedPtr gnssFixPub;
146+
147+
typedef rclcpp::Publisher<std_msgs::msg::Bool>::SharedPtr healthPub;
148+
149+
typedef rclcpp::Subscription<geometry_msgs::msg::PointStamped>::SharedPtr clickedPtSub;
150+
typedef rclcpp::Subscription<sensor_msgs::msg::NavSatFix>::SharedPtr gnssFixSub;
151+
typedef rclcpp::Subscription<rosgraph_msgs::msg::Clock>::SharedPtr clockSub;
160152

161153
typedef rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr resetOdomSrvPtr;
162154
typedef rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr resetPosTrkSrvPtr;
@@ -168,8 +160,7 @@ typedef rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr enableObjDetPtr;
168160
typedef rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr enableBodyTrkPtr;
169161
typedef rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr enableMappingPtr;
170162

171-
typedef rclcpp::Service<zed_msgs::srv::StartSvoRec>::SharedPtr
172-
startSvoRecSrvPtr;
163+
typedef rclcpp::Service<zed_msgs::srv::StartSvoRec>::SharedPtr startSvoRecSrvPtr;
173164
typedef rclcpp::Service<zed_msgs::srv::SetROI>::SharedPtr setRoiSrvPtr;
174165
typedef rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr stopSvoRecSrvPtr;
175166
typedef rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr pauseSvoSrvPtr;

0 commit comments

Comments
 (0)