#!/usr/bin/env bash # Проверка собранного образа: на месте ли пакеты, сообщения, зависимости. # Запускается внутри контейнера, окружение ROS уже поднято точкой входа. set -u echo "=== пакеты ===" ros2 pkg list | grep -i flyguard || echo " НЕТ пакетов flyguard" echo echo "=== исполняемые ===" ros2 pkg executables flyguard || echo " НЕТ исполняемых" echo echo "=== сообщение ObstacleStatus ===" ros2 interface show flyguard_msgs/msg/ObstacleStatus 2>&1 | grep -v '^#' | grep -v '^$' | head -12 echo echo "=== python-зависимости ===" python3 - <<'PY' import numpy, scipy print("numpy", numpy.__version__, "| scipy", scipy.__version__) try: import cv2 print("opencv", cv2.__version__) except Exception as e: print("opencv НЕТ:", e) PY echo echo "=== импорт конвейера ===" python3 - <<'PY' from flyguard.pipeline import FlyGuard, Params from flyguard.mushroom_body import MushroomBody from pathlib import Path import glob fg = FlyGuard(Params()) print("конвейер импортируется, стадий в параметрах:", len(Params().__dataclass_fields__)) hits = glob.glob("/opt/ros/**/flyguard/artifacts/mushroom_body.npz", recursive=True) \ + glob.glob("/opt/flyguard/**/mushroom_body.npz", recursive=True) if hits: mb = MushroomBody.load(hits[0]) print(f"память тоннеля: {hits[0]}") print(f" клеток Кеньона {mb.cfg.n_kc}, активных {mb.n_active}, " f"обучена на {mb.n_seen} примерах, признаков {mb.n_pn}") else: print("память тоннеля НЕ НАЙДЕНА в образе") from flyguard.mbon_readout import MbonReadout hits = glob.glob("/opt/ros/**/flyguard/artifacts/mbon_readout.npz", recursive=True) \ + glob.glob("/opt/flyguard/**/mbon_readout.npz", recursive=True) if hits: rd = MbonReadout.load(hits[0]) print(f"считывание MBON: {hits[0]}") print(f" клеток Кеньона {rd.cfg.n_kc}, признаков {rd.n_pn}") else: print("считывание MBON НЕ НАЙДЕНО в образе") PY echo echo "=== rosbag ===" if ros2 bag --help >/dev/null 2>&1; then echo "ros2 bag доступен" python3 -c "import rosbag2_py; print('rosbag2_py ok')" 2>&1 | tail -1 else echo "ros2 bag НЕДОСТУПЕН" fi echo echo "=== launch-файл ===" ros2 launch flyguard detect.launch.py --show-args 2>&1 | head -20