# 드론 회전 시 중심선·궤적선이 뒤늦게 따라오는 어긋남 — 적응형 평활 **날짜**: 2026-06-24 **수정 파일**: `client/src/components/overlay/StationOverlay.tsx` ## 증상 드론이 회전하고 나면 스테이션 선(중심선)과 드론 궤적선이 **뒤늦게 따라와** 회전 구간 중간에 영상과 어긋나 보임. ## 원인 선/궤적은 RAF에서 `poseAt → smoothFrame`의 **평활된 드론 자세**로 매 프레임 투영한다. `smoothHalf` 기본값이 **60프레임(±2초)** 중심이동평균이라, 회전이 끝난 직후에도 평균창의 뒷부분(trailing)에 회전 전 낮은 yaw 프레임들이 최대 ~2초간 포함됨 → **오버레이 yaw가 실제보다 지연**되어 선이 뒤처졌다가 천천히 따라잡음. 영상은 평활 안 된 실제 자세라 어긋남. (라벨은 점이라 덜 띄지만 긴 선은 각도 오차가 크게 보임.) ## 조치 — `smoothFrame` 적응형 창 국부 yaw 변화율로 평균창을 가변: ```ts // ±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