데이터 파이프라인 — 전 구간 프레임·djmd dt 전파·세그먼트 시크·선형 곡선 평활
- geoData: fullFrames(전체 비행 프레임 — 전 구간 측점 검색용, datum·초점 보정 동일 적용), DJI_VIRTUAL_FPS export, 선형 곡선 평활(Centripetal Catmull-Rom — 정점 ~6m 세분, 원 정점 전부 통과로 측점 정합 유지, 60m+ 직선·양끝 제외) - djmdTrack: refineFramesWithDjmd 가 교차상관 dt(초)도 반환 - geoStore: fullFrames·djmdDtSec 상태 — 검색의 CSV↔영상 시간 변환에 사용 - useVideoPlayer.loadLocalFile(startAtSec): 로드 후 지정 시각부터 시작 - VideoPlayer.handleSeekSegment: 측점 검색의 타 세그먼트 점프(전환+시크, 재생 상태 유지), station_lookahead 등 RouteInfo 타입 문서화 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -234,7 +234,7 @@ export async function refineFramesWithDjmd(
|
||||
videoFile: File,
|
||||
frames: DroneFrame[],
|
||||
useEllipsoidal: boolean,
|
||||
): Promise<DroneFrame[] | null> {
|
||||
): Promise<{ frames: DroneFrame[]; dtSec: number } | null> {
|
||||
if (!frames.length) return null;
|
||||
const samples = await parseDjmdPositions(videoFile);
|
||||
if (!samples) return null;
|
||||
@@ -306,7 +306,7 @@ export async function refineFramesWithDjmd(
|
||||
console.log(`[djmd] CSV↔영상 시간 오프셋 ${bestDt.toFixed(2)}s 추정 (잔차 ${bestC.toFixed(1)}m) — 자세 재정렬 적용`);
|
||||
}
|
||||
|
||||
return frames.map((f) => {
|
||||
const refined = frames.map((f) => {
|
||||
const p = at(f.frame); // 위치/고도: djmd (프레임 동기)
|
||||
const a = csvAt(f.frame / FPS + bestDt); // 자세: CSV 를 추정 오프셋으로 재시각화
|
||||
return {
|
||||
@@ -315,4 +315,7 @@ export async function refineFramesWithDjmd(
|
||||
yaw: a.yaw, pitch: a.pitch, roll: a.roll,
|
||||
};
|
||||
});
|
||||
// dtSec: CSV↔영상 시간 오프셋 — 영상시간 = CSV시간 − dtSec.
|
||||
// 측점 검색(CSV 축 인덱스)이 영상 시각으로 변환할 때 사용(0.33s ≈ 2m 오차 제거).
|
||||
return { frames: refined, dtSec: bestDt };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user