djmd 프레임 동기·오버레이 지면고정·선형-측점 정합·UI 단축키
- djmd(영상 내장 텔레메트리) 프레임 동기 위치/고도: MP4 stbl 선별 파싱(djmdTrack.ts), CSV 시각정렬 오차(평균 3.2m) 제거 — 세그먼트별 백그라운드 정밀화(frameSynced 플래그) - 자세 시간축 재정렬: djmd 위치 교차상관으로 CSV↔영상 오프셋 자동 추정(실측 -0.33s, 잔차 0.24m) 후 yaw/pitch/roll 재샘플(yaw 최단각) — 옆 지물 미끄러짐 해소 - 포즈 평활 자동 제한: 프레임 동기 데이터는 ±5프레임 상한(기존 ±60=±1s) — 회전 시 오버레이 전체가 드론에 딸려오는 지연 제거 - 선형-측점 정합: 측점 위치를 선형 정점으로 삽입(3D 이격≤0.012m) + 정점 z 를 측점 체이니지 보간으로 재정렬, 측점 라벨 화면 EMA 제거(선과 동일한 즉시 투영) — 선형이 측점 POI 를 픽셀 단위로 통과 - 드론높이 모드 높이 규칙 통일: 선형도 '드론고도-이격거리' 평면 적용(라벨과 동일) - 카메라 offZ 잔재 교정: 표고 체계 정비 이전 드래그 보정값(-18.3m)이 이중 보정이 되어 원거리 POI 가 접근할수록 밀리던 원인 — 경로 1-1 camera.json 0 으로 교정(.bak 백업) - 로드 UX: 폴더 로드 시 정지 상태로 대기(처음부터), 데이터 교체 시 UI 초기 상태 복원 - 라벨: 측점 팝업 표고(타원체고) 행 추가, 구조물-POI 이중 라벨 제거(어음천교), 시간동기 보정 슬라이더(timeOffsetSec) - 측점 표기 0+000 형식 전환(생성 6곳·파서 4곳 신구 호환) + 스테이션바 양끝 100m 내 시설물 없으면 시작/끝 스테이션 마크 - 단축키: F2 개발자 모드(dev_mode 1↔0, 세션 한정), A 선형 표시 토글 - 인프라: 54000 포트 재부팅 자동화(portproxy 직접 IP + 로그온 갱신, pm2 resurrect) - docs/history: 작업 이력 23건 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# 2026-07-14 djmd 프레임 동기 위치 업그레이드 (근본 해결)
|
||||
|
||||
**소요 시간**: 25분
|
||||
**Context 사용량**: input 3360k / output 12k tokens
|
||||
|
||||
## 배경 (사용자 승인)
|
||||
|
||||
오르막/내리막에서 POI 가 "풀 붙임"처럼 고정되지 않음 — 근본 원인은 CSV 비행로그의
|
||||
시각 정렬 가정(로그 t0 = 영상 시작, 10Hz) 오차. **실측: CSV 가정 vs 영상 내장 텔레메트리
|
||||
실위치 오차 평균 3.2m / 최대 4.1m** (≈0.33s 동기 오차) — 이것이 밀림의 정체.
|
||||
|
||||
## 구현 — client/src/utils/djmdTrack.ts (신규)
|
||||
|
||||
- **MP4 박스 파서**: 최상위 박스 워크(mdat 스킵) → moov(파일 끝, 0.2MB) →
|
||||
trak/mdia/minf/stbl 에서 stsd=djmd 트랙 탐색 → stsz/stsc/stco(co64) 샘플 테이블 전개
|
||||
- **선별 읽기**: 전체 3.7GB 스캔 없이 djmd 샘플 바이트 구간만 6프레임 간격(≈10Hz) 배치 읽기
|
||||
(1,970회 slice, 동시 64) — 동기 정확도는 프레임 단위, 밀도는 CSV 동급
|
||||
- **protobuf 추출**: 6.3 프레임 카운터 / 6.4·6.5 위경도(라디안) / 6.6 타원체고(mm)
|
||||
- **refineFramesWithDjmd**: CSV 프레임의 위치/고도를 djmd 보간값으로 교체
|
||||
(자세 yaw/pitch/roll·focalLen 은 CSV 유지). datum: 타원체고 데이터셋은 그대로,
|
||||
정표고 데이터셋은 (첫 샘플 − CSV 첫 고도) 지오이드고 자동 차감. 비정상(|편차|>80m) 시 미적용
|
||||
|
||||
## geoStore 통합
|
||||
|
||||
- loadFromFolder / loadSegment 직후 **백그라운드 refine** — CSV 기반으로 즉시 표시 후
|
||||
파싱 완료 시 frames 교체(라벨 캐시는 frames 변경 감지로 자동 재계산)
|
||||
- 경합 가드: 파싱 중 세그먼트/폴더 전환 시 결과 폐기
|
||||
- DJI 영상이 아니면 조용히 CSV 유지(무해)
|
||||
|
||||
## 검증 (실파일, node 포팅 동일 로직)
|
||||
|
||||
- moov/stbl 파싱 ✓, 샘플 11,817개 중 1,969개 추출(step 6) ✓
|
||||
- 첫 샘플 frame 6: 33.40398°, 126.28924°, 174.43m — CSV·기존 분석과 정합 ✓
|
||||
- 오차 측정: 평균 3.2m/최대 4.1m 제거 효과 확인
|
||||
- tsc+vite 빌드 통과, 새 번들(index-CW0-dRMN.js) 서빙
|
||||
|
||||
## 사용 안내
|
||||
|
||||
- 폴더 로드 후 1~3초 내 콘솔 `[djmd] 영상 내장 텔레메트리로 위치/고도 정밀화 적용` 확인
|
||||
- 시간동기 슬라이더는 0 권장(위치는 이제 프레임 동기 — 잔여 자세 오차만 Yaw±로)
|
||||
Reference in New Issue
Block a user