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

**날짜**: 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
