50 lines
1.6 KiB
Bash
Executable File
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"
|