Files
GhiVideo/docs/history/2026-06-24_0957_회전시-선오버레이-지연어긋남-적응형평활.md
T
b23042andClaude Opus 4.8 78fc090360 초기 커밋: 스테이션(측점) 기반 주행영상 플레이어
- 클라이언트(React/Vite): Video.js 플레이어, 하단 스테이션바, POI/구조물 영상 오버레이, 카메라 파라미터 보정, 미니맵/RoutePanel
- 서버(Express): Range 스트리밍, HLS 변환, 프레임 추출, tus 업로드, 주석 API
- 최근 작업: 스테이션바 종점역 표출/양끝 정렬/미도착(재생불가) 표시, POI 라벨 '구분' 우선·컴팩트 팝업·겹침제외 토글·동일좌표 다중행, 진행방향(상/하) 우선 표출, 커서 배지 크기·픽셀 떨림 개선

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 16:37:57 +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