Files
scan-calibrator/interactive.sh
T
2026-09-15 11:32:36 +08:00

50 lines
1.6 KiB
Bash
Executable File

#!/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"