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}" \ "$@"