#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" export PYTHONDONTWRITEBYTECODE=1 control_paused=false wait_for_smart_cam() { local deadline=$((SECONDS + 180)) local stable_checks=0 while (( SECONDS < deadline )); do if docker inspect -f '{{.State.Running}}' smart-cam 2>/dev/null | grep -qx true \ && docker exec smart-cam curl -fsS --max-time 5 -o /dev/null \ http://127.0.0.1:18080/health 2>/dev/null; then stable_checks=$((stable_checks + 1)) if (( stable_checks >= 8 )); then return 0 fi else stable_checks=0 fi sleep 2 done return 1 } resume_control() { local exit_code=$? trap - EXIT if [[ "$control_paused" == true ]]; then printf '\n正在恢复smart-cam巡航和自动追踪……\n' if ! wait_for_smart_cam \ || ! docker exec smart-cam smart-camctl control resume; then printf '错误:标定已结束,但自动恢复失败。请立即手动执行:\n' >&2 printf ' docker exec smart-cam smart-camctl control resume\n' >&2 exit_code=1 fi fi exit "$exit_code" } trap resume_control EXIT printf '正在暂停smart-cam的扫图、巡航和自动追踪,准备独占云台……\n' if ! docker exec smart-cam smart-camctl control pause; then printf '错误:无法暂停smart-cam自动控制,本次不启动标定。\n' >&2 exit 1 fi control_paused=true python3 "$SCRIPT_DIR/interactive_calibrator.py"