The ZED ROS2 Wrapper on NVIDIA Jetson: Setting Up a ZED X Robotics Stack
The ZED ROS2 wrapper turns a Stereolabs camera into ROS 2 depth, point cloud and odometry topics. Here is how the stack fits together on a Jetson, from the ZED X driver and ZED SDK to the launch file your robot runs.
What the ZED ROS2 Wrapper Does
The ZED ROS2 wrapper is the open-source package from Stereolabs that runs a ZED camera as a ROS 2 node, publishing its colour images, depth maps, point clouds, odometry, pose and IMU data as standard ROS 2 topics. It sits on top of the ZED SDK, so the depth and positional tracking the SDK computes on the Jetson GPU arrive in your robot software without custom driver code.
For a robot built on a Stereolabs ZED X and an NVIDIA Jetson, that makes the wrapper the bridge between the camera and the rest of the navigation stack. Getting there means four layers lined up in the right order, and most of the time spent on a first build goes into matching their versions.
Key Takeaways
- 01Four layers, in order
- JetPack on the Jetson, the ZED X driver for GMSL cameras, the ZED SDK, then ROS 2 and the wrapper.
- 02Versions have to match
- The ZED X driver is built for one L4T release and capture card, and each wrapper release targets a specific ZED SDK version.
- 03One launch file, many cameras
- The same launch file runs every ZED model; the camera_model argument tells it which one is connected.
- 04Standard topics out
- Depth, registered point clouds, odometry, pose and IMU data arrive as normal ROS 2 topics for navigation and mapping.
- 05Multi-camera needs planning
- Each camera needs its own name and the host needs enough GMSL2 inputs and GPU headroom for every stream.
The Stack, Layer by Layer
On a Jetson, the camera data passes through each layer before your nodes see it. For USB cameras such as the ZED 2i the driver layer is not needed; for GMSL2 cameras such as the ZED X, ZED X Mini and ZED X One it is the layer that most often causes trouble.
| Layer | What it does | What to check |
|---|---|---|
| JetPack and L4T | The Jetson operating system, CUDA and camera stack | The L4T release the driver and SDK are built for |
| ZED X driver | Loads the GMSL2 deserialiser driver and device tree, with a daemon that restarts it if needed | Built for your capture card or carrier and L4T version |
| ZED SDK | Computes depth, tracking, mapping and detection on the GPU | The SDK version the wrapper release expects |
| ROS 2 | The middleware your robot software runs on | Humble on Ubuntu 22.04 or Jazzy on Ubuntu 24.04 |
| ZED ROS2 wrapper | Publishes the SDK output as ROS 2 topics | Built in your ROS 2 workspace against the installed SDK |
Our white paper on connecting a ZED X to a Jetson over GMSL covers the hardware side in depth, including the deserialiser, the device tree and the board support package.
Step One: Match JetPack, the ZED X Driver and the ZED SDK
Start from the JetPack release on the Jetson, because everything else is chosen to match it. Stereolabs ship the ZED X driver as a Debian package named for the driver version, the ZED Link capture card model and the L4T release, for example stereolabs-zedx_X.X.X-ZED-LINK-DUO-L4T36.X_arm64.deb. Install it with sudo dpkg -i, reboot, and confirm the driver loaded with sudo dmesg | grep zedx. ZED Box computers and partner carrier boards with their own deserialiser use the driver package built for that hardware.
Next, install the ZED SDK for Jetson from its .run installer, choosing the build for the same L4T release. The SDK includes ZED Explorer and ZED Depth Viewer, which are worth opening before ROS 2 comes into it. If the camera streams and shows depth there, any later problem is in the ROS layer, not the hardware.
Step Two: Build the Wrapper in a ROS 2 Workspace
With ROS 2 installed, the wrapper is cloned into a workspace and built with colcon, following the Stereolabs instructions.
mkdir -p ~/ros2_ws/src/
cd ~/ros2_ws/src/
git clone https://github.com/stereolabs/zed-ros2-wrapper.git
cd ..
sudo apt update
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release
source install/local_setup.bash
The wrapper supports the long-term ROS 2 releases, Humble on Ubuntu 22.04 and Jazzy on Ubuntu 24.04 among them. On JetPack 6, Stereolabs note that the nvidia-jetpack and nvidia-jetpack-dev packages must be installed first. If a build fails, check that the wrapper release matches the installed ZED SDK version before anything else; older SDK versions are supported through older wrapper releases.
Step Three: Launch the Camera and Check the Topics
One launch file starts every ZED model, with the camera named by the camera_model argument.
ros2 launch zed_wrapper zed_camera.launch.py camera_model:=zedx
The model values include zed2i, zedm (ZED Mini), zedx, zedxm (ZED X Mini), zedxnano, zedxonegs and zedxone4k. Once it runs, the node publishes topics such as rgb/color/rect/image, depth/depth_registered, point_cloud/cloud_registered, odom and pose, which navigation, mapping and perception packages can subscribe to directly. The separate zed_display_rviz2 package opens a ready-made RViz2 view to confirm the images, depth and point cloud look right.
Parameters in the wrapper’s configuration files then switch on the heavier SDK features, such as spatial mapping, object detection and body tracking, so you only spend GPU time on what the robot uses.
For GMSL2 cameras it also helps to keep the camera, the deserialiser and the module on a single power-up order and to check that the ZED X daemon is running before the node starts, since the wrapper can only open a camera the driver has already enumerated. Logging the ZED SDK diagnostics on first boot gives a reference to compare against if a camera later drops out in the field.
Settings That Catch Teams Out
- 01The wrong camera_model
- A ZED X Mini launched as zedx starts, but with the wrong calibration and baseline assumptions for depth.
- 02Duplicate camera names
- In a multi-camera rig every camera needs its own camera_name, or their topics collide.
- 03Driver and L4T drift
- Updating JetPack without the matching ZED X driver package leaves the camera missing after the next reboot.
- 04Point cloud bandwidth
- Full-resolution point clouds are heavy; Stereolabs document point cloud transport options to compress them across the ROS graph.
- 05GPU headroom
- Depth, tracking and AI models share the Jetson GPU, so size the module for every camera and feature you enable.
Multi-Camera Rigs and Isaac ROS
The wrapper runs several cameras on one Jetson, each as its own node with a unique name, and ZED X cameras can be hardware-synchronised so their frames line up. The limit is usually the host. A ZED Box Mini takes two GMSL2 cameras, a GMSL2 capture card such as the ZED Link Quad takes up to eight on a Jetson AGX Orin, and every stream adds to the GPU load.
For teams building on NVIDIA Isaac ROS, the wrapper supports NITROS, NVIDIA’s accelerated transport for ROS 2, so image and depth data can move between GPU-accelerated nodes without extra copies. That keeps a multi-camera perception pipeline efficient on the same Jetson that runs the cameras.
How We Supply a ZED X Robotics Stack
We supply ZED cameras with the Jetson computer they run on, set up and tested as standard, with JetPack, the matching ZED X driver, the ZED SDK and the ZED ROS2 wrapper installed, the cameras confirmed streaming and synchronised, and the launch configuration checked for your camera models. You start from a robot that already publishes depth and odometry, rather than a version-matching exercise.
Browse our GMSL2 cameras and stereo depth cameras, or read our explainer on how GMSL carries camera data.
Related Questions
-
What Is a Stereo Camera?
A stereo camera is a camera with two image sensors set a fixed distance apart, like a pair of eyes. By finding the same point in both images and measuring how far it shifts between them, it calculates the distance to every pixel, so one sensor gives a robot or vehicle a 3D depth map as well as a colour image.
Building a ZED X robot on Jetson?
Tell us about your cameras, the ROS 2 stack you run and the machine they go on, and we will recommend the Jetson platform and supply it with the driver, ZED SDK and wrapper set up and tested.