Files
lightweight-cobot/docker/jazzy/ros-iiwa7-webots/run.sh
T

69 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Run the Webots container with X11 forwarding.
#
# Usage:
# ./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-dev}"
GPU_MODE="software"
# Resolve the project root (two levels above this script: docker/jazzy/ros-iiwa7-webots → project root)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
CONFIG_FILE="${PROJECT_ROOT}/cobot-setting.yaml"
# 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 \
"${RENDER_FLAGS[@]}" \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
${CONFIG_FILE:+-v "${CONFIG_FILE}:/ros2_ws/cobot-setting.yaml:ro"} \
"${IMAGE}" \
"$@"