From 6228501581157f3ee314cb1e13edfa3c09e89422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=93=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=B0=D1=80=D1=8C?= Date: Tue, 19 May 2026 16:26:05 +0300 Subject: [PATCH] Refactor Dockerfile and run script for improved GPU handling and environment variable management --- docker/jazzy/ros-iiwa7-webots/Dockerfile | 2 - docker/jazzy/ros-iiwa7-webots/run.sh | 48 ++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/docker/jazzy/ros-iiwa7-webots/Dockerfile b/docker/jazzy/ros-iiwa7-webots/Dockerfile index cb8f560..4180928 100644 --- a/docker/jazzy/ros-iiwa7-webots/Dockerfile +++ b/docker/jazzy/ros-iiwa7-webots/Dockerfile @@ -5,8 +5,6 @@ ARG BUILD_TYPE=release ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp ENV WEBOTS_HOME=/usr/local/webots -ENV LIBGL_ALWAYS_SOFTWARE=1 -ENV GALLIUM_DRIVER=llvmpipe # X11 utilities and Mesa software renderer RUN apt-get update && apt-get install -y --no-install-recommends \ diff --git a/docker/jazzy/ros-iiwa7-webots/run.sh b/docker/jazzy/ros-iiwa7-webots/run.sh index 3a38eb4..ff327c8 100755 --- a/docker/jazzy/ros-iiwa7-webots/run.sh +++ b/docker/jazzy/ros-iiwa7-webots/run.sh @@ -1,22 +1,62 @@ #!/bin/bash # Run the Webots container with X11 forwarding. +# # Usage: -# ./run.sh — interactive shell -# ./run.sh ros2 launch iiwa_bringup webots_spawn.launch.py ... +# ./run.sh [--gpu nvidia|mesa|software] [CMD...] +# +# Examples: +# ./run.sh — software rendering (llvmpipe), по умолчанию +# ./run.sh --gpu mesa — Intel/AMD GPU через DRI (ноутбук без NVIDIA) +# ./run.sh --gpu nvidia — NVIDIA GPU rendering +# ./run.sh --gpu nvidia ros2 launch ... — NVIDIA GPU rendering + команда + +set -e IMAGE="${WEBOTS_IMAGE:-evilfisru/lwc:webots-jazzy}" +GPU_MODE="software" + +# Parse --gpu flag +if [[ "${1}" == "--gpu" ]]; then + GPU_MODE="${2:?--gpu requires an argument: nvidia|mesa|software}" + shift 2 +fi # Allow local Docker processes to connect to the X server xhost +local:docker > /dev/null +case "${GPU_MODE}" in + nvidia) + RENDER_FLAGS=( + --gpus all + -e NVIDIA_VISIBLE_DEVICES=all + -e NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute + ) + ;; + mesa) + # Intel/AMD integrated/discrete — Mesa через DRI, без NVIDIA toolkit + RENDER_FLAGS=( + --device /dev/dri + ) + ;; + software) + RENDER_FLAGS=( + -e LIBGL_ALWAYS_SOFTWARE=1 + -e GALLIUM_DRIVER=llvmpipe + ) + ;; + *) + echo "Unknown --gpu value: '${GPU_MODE}'. Use 'nvidia', 'mesa' or 'software'." >&2 + exit 1 + ;; +esac + docker run -it --rm \ --name ros-webots \ --network host \ -e USER=root \ -e DISPLAY="${DISPLAY}" \ -e QT_X11_NO_MITSHM=1 \ - -e LIBGL_ALWAYS_SOFTWARE=1 \ - -e GALLIUM_DRIVER=llvmpipe \ + "${RENDER_FLAGS[@]}" \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ "${IMAGE}" \ "$@"