Files
GhiVideo_v4/docs/history/2026-06-24_0957_회전시-선오버레이-지연어긋남-적응형평활.md
T
b23042andClaude Fable 5 d38b842e8d GhiVideo 소스 복제 — v4 작업 시작 기준
기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제.
(node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 14:32:51 +09:00

2.1 KiB

드론 회전 시 중심선·궤적선이 뒤늦게 따라오는 어긋남 — 적응형 평활

날짜: 2026-06-24 수정 파일: client/src/components/overlay/StationOverlay.tsx

증상

드론이 회전하고 나면 스테이션 선(중심선)과 드론 궤적선이 뒤늦게 따라와 회전 구간 중간에 영상과 어긋나 보임.

원인

선/궤적은 RAF에서 poseAt → smoothFrame평활된 드론 자세로 매 프레임 투영한다. smoothHalf 기본값이 60프레임(±2초) 중심이동평균이라, 회전이 끝난 직후에도 평균창의 뒷부분(trailing)에 회전 전 낮은 yaw 프레임들이 최대 ~2초간 포함됨 → 오버레이 yaw가 실제보다 지연되어 선이 뒤처졌다가 천천히 따라잡음. 영상은 평활 안 된 실제 자세라 어긋남. (라벨은 점이라 덜 띄지만 긴 선은 각도 오차가 크게 보임.)

조치 — smoothFrame 적응형 창

국부 yaw 변화율로 평균창을 가변:

// ±k(=3) 프레임 yaw 변화율(deg/frame, 최단각)
const rate = |Δyaw| / (2k);
// rate=0 → 풀창 유지, 회전 클수록 축소(하한 5프레임). 게인 8: 1°/fr ≈ halfWin/9.
effHalf = Math.max(5, Math.round(halfWin / (1 + 8 * rate)));
  • 회전 중: 창이 좁아져 실제 자세를 즉시 추종 → 지연/어긋남 제거.
  • 직선(저변화율): 풀창(±smoothHalf) 유지 → GPS/자세 노이즈는 그대로 억제.
  • 모든 소비처(선·궤적 poseAt, 라벨 precompute, 나침반/캐시)가 같은 smoothFrame을 쓰므로 일괄 적용. smooth 슬라이더는 이제 최댓값(직선 기준) 의미 → 툴팁에 "회전 중 자동 축소" 명시.

참고

  • 적응형이라 halfWin > 6일 때만 동작(작은 값은 그대로). yaw는 raw 프레임 배열에서 산출.
  • 위치(GPS) 평활도 함께 좁아져 회전 시 궤적 코너 라운딩도 완화됨.
  • 더 민감/둔감 조절은 게인(8)·하한(5)·k(3) 상수로. 떨림이 재발하면 게인↓.

검증

  • npm run build -w client (node20) tsc + vite build 통과.

소요 시간: 약 15분 Context 사용량: input ~185k / output ~5k tokens