45 lines
2.2 KiB
Bash
45 lines
2.2 KiB
Bash
#!/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}"
|