Create and use Docker images for ZED and ROS 2
You will find examples about how to build and run such a container on our GitHub.
You should modify the Dockerfile to put your application inside it and start it automatically with the container by overriding the CMD
.
Build the Docker images #
Choose a name for the image and replace <image_tag>
with it, e.g. zed-ubuntu22.04-cuda11.7-ros2-humble
📌 Note: You can find the Docker images pre-built for the latest version of the
master
branch in the Docker hub stereolabs/zedbot.
Release image #
The Release image internally clones the master branch of this repository to build the ZED ROS 2 Wrapper code.
Build the image for desktop:
docker build -t "<image_tag>" -f Dockerfile.u22-cu117-humble-release .
or build the image for NVIDIA® Jetson:
docker build -t "<image_tag>" -f Dockerfile.l4t35_1-humble-release .
Devel image #
The devel image internally includes the source code of the current branch, so you can modify it. For this reason we must first copy the source to a temporary folder reachable while building the Docker image. The folder can be removed when the Docker image is ready.
Create a temporary tmp_sources
folder for the sources and copy the files:
mkdir -p ./tmp_sources
cp -r ../zed* ./tmp_sources
Build the image for desktop:
docker build -t "<image_tag>" -f Dockerfile.u22-cu117-humble-devel .
or build the image for NVIDIA® Jetson:
docker build -t "<image_tag>" -f Dockerfile.l4t35_1-humble-devel .
Remove the temporary sources to avoid future compiling issues:
rm -r ./tmp_sources
📌 Note: It is important that the name of the temporary folder is
tmp_sources
because it is used in the Dockerfile we provide.
Run the Docker image #
NVIDIA® runtime #
NVIDIA® drivers must be accessible from the Docker image to run the ZED SDK code on the GPU. You’ll need :
- The
nvidia
container runtime installed, following this guide - A specific docker runtime environment with
-gpus all
or-e NVIDIA_DRIVER_CAPABILITIES=all
- Docker privileged mode with
--privileged
Volumes #
A few volumes should also be shared with the host.
/usr/local/zed/resources:/usr/local/zed/resources
if you plan to use the AI module of the ZED SDK (Object Detection, Skeleton Tracking, NEURAL depth) we suggest binding mounting a folder to avoid downloading and optimizing the AI models each time the Docker image is restarted. The first time you use the AI model inside the Docker image, it will be downloaded and optimized in the local bound-mounted folder, and stored there for the next runs./dev:/dev
to share the video devices- For GMSL cameras (ZED X) you’ll also need
/tmp:/tmp
/var/nvidia/nvcam/settings/:/var/nvidia/nvcam/settings/
/etc/systemd/system/zed_x_daemon.service:/etc/systemd/system/zed_x_daemon.service
Start the Docker container #
The following command starts an interactive session:
docker run --runtime nvidia -it --privileged --ipc=host --pid=host -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY \
-v /dev:/dev -v /tmp/.X11-unix/:/tmp/.X11-unix \
-v ${HOME}/zed_docker_ai/:/usr/local/zed/resources/ \
<image_tag>
For GMSL cameras
docker run --runtime nvidia -it --privileged --ipc=host --pid=host -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY \
-v /dev:/dev \
-v /tmp:/tmp \
-v /var/nvidia/nvcam/settings/:/var/nvidia/nvcam/settings/ \
-v /etc/systemd/system/zed_x_daemon.service:/etc/systemd/system/zed_x_daemon.service \
-v ${HOME}/zed_docker_ai/:/usr/local/zed/resources/ \
<image_tag>