#!/usr/bin/env bash # Показ одной командой: узел, проигрывание записи, RViz со схемой мозга мухи. # # bash docker/demo.sh /папка/с/записями [запись] [с какой секунды] # bash docker/demo.sh /root/bags cloud_with_fake_obj # bash docker/demo.sh /root/bags doubleT_obstacle # # Видеокарта для RViz и CUDA выбирается сама: под WSL 2 — через /dev/dxg (одного # --gpus all там мало, RViz рисовал бы процессором), на Linux с NVIDIA — --gpus all, # со встроенной графикой — /dev/dri. Пульт проигрывания — из второго терминала: # docker exec -it flyguard_demo flyguard-keys /data/<запись> # Масштаб схемы мозга: BRAIN_SCALE=1|2|3 (по умолчанию 2 — под экран 2K). set -euo pipefail BAGS=${1:?"укажите папку с записями: bash docker/demo.sh /папка/с/записями [запись]"} BAG=${2:-cloud_with_fake_obj} START=${3:-0} IMAGE=${IMAGE:-flyguard} if [ ! -d "$BAGS/$BAG" ]; then echo "нет записи $BAGS/$BAG" >&2 exit 1 fi if [ -e /dev/dxg ]; then GPU=(--device /dev/dxg -v /usr/lib/wsl:/usr/lib/wsl:ro -e LD_LIBRARY_PATH=/usr/lib/wsl/lib) WHERE="WSL 2, видеокарта через /dev/dxg" elif command -v nvidia-smi >/dev/null 2>&1; then GPU=(--gpus all) WHERE="NVIDIA, --gpus all" elif [ -e /dev/dri ]; then GPU=(--device /dev/dri) WHERE="встроенная графика, /dev/dri" else GPU=() WHERE="без видеокарты: считает и рисует процессор" fi xhost +local: >/dev/null 2>&1 || true docker rm -f flyguard_demo >/dev/null 2>&1 || true echo "показ: $BAG с $START с, $WHERE" exec docker run --rm -it --name flyguard_demo --network host --ipc host "${GPU[@]}" \ -e DISPLAY="${DISPLAY:-:0}" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$BAGS":/data:ro \ "$IMAGE" ros2 launch flyguard detect.launch.py bag:=/data/"$BAG" start:="$START" \ rviz:=true brain_view:=true brain_scale:="${BRAIN_SCALE:-2}"