Skip to main content

Module session

Module session 

Source
Expand description

상태 값과 리듀서: Session + step / poll / command / finish.

위치 하나의 프레임 묶음(FrameSet)이 들어올 때마다 특징 → 새 짝 매칭 → (첫 모델 / 이어 등록 + 삼각측량) → 구역 완료 시 초벌(전경) 조밀화 + 정밀(배경 스레드: BA → GPS ENU 정렬 → 조밀화)을 수행하고, 그 과정을 단계별 Event 로 내보낸다. 파일·로그는 쓰지 않는다(run.log 줄도 Event::Log 로 나간다).

§상태와 공유

Session 은 값이다. step(&s, frames) 는 새 Session 을 돌려주고 s 는 그대로 쓸 수 있다. 모델·영상 목록·대응 그래프 등은 Arc/쓰기 시 복사로 공유한다. 단, 특징 저장소는 추가 전용 공유 자료라 같은 이전 값에서 서로 다른 프레임으로 두 번 step 하면 저장소가 섞인다(되감기는 Command::ResetFrom 으로). 배경 정밀 작업 결과(정밀 모델·점군)와 이벤트 버전 번호도 세션 계열 전체가 공유한다.

§이벤트 전달

  • 기본: 전경 이벤트는 그 호출의 반환 벡터로, 배경 정밀 작업 이벤트는 내부 수신함에 쌓였다가 다음 step/poll/command/finish 반환 벡터 앞쪽으로 나간다.
  • Session::set_sink 로 수신기를 두면 모든 이벤트(전경·배경)가 낸 즉시 버전 순으로 수신기에 전달된다. 이때 반환 벡터의 전경 이벤트는 이미 전달된 것의 사본이다(다시 전달하지 말 것). 수신기는 막히면 안 된다 (내부 잠금 안에서 불린다).
  • meta.version 은 세션 계열 전체에서 단조 증가하며 낸 순서(= timeline 순서)를 준다.

§run.log·timeline 재현 규칙(출력 훅용)

  • timeline 문구는 Event::timeline_text 가 주며, run.log 에도 [HH:MM:SS] 문구 로 같은 자리에 쓴다.
  • Event::Log 는 그 자리의 run.log 한 줄(stamped 이면 [HH:MM:SS] 머리).
  • Event::Warning/Event::Error 는 같은 내용의 Log 와 함께 나가므로 run.log 에 따로 쓰지 않는다.
  • Event::Finished 의 단계 시간에는 후처리(“post”) 시간이 없다(후처리는 출력 훅이 한다).

Structs§

FrameImage
위치 하나의 영상 하나.
FrameSet
위치 하나의 프레임 묶음(카메라마다 한 장).
PreviewZone
구역 초벌 결과.
RefinedZone
구역 정밀 결과(자세 확정 시점부터 있다; 점군은 조밀화가 끝나야 생긴다).
Session
점진 재구성 상태 값.
SessionConfig
세션 설정.

Enums§

Input
리듀서 입력.

Functions§

command
명령 처리.
finish
남은 구역 닫기 → 배경 작업 대기 → 요약.
pairs_for
짝 규칙: 같은 카메라 위치 간격 1..5, 8, 16 / 다른 카메라 위치 차 0..4. 위치 p 의 영상이 낀 짝만, 정렬된 이름 짝.
poll
배경 정밀 작업 이벤트 수거(수신기가 없을 때). 상태는 바뀌지 않는다.
step
다음 프레임 묶음을 처리한 새 상태와 이벤트.
zones_upto
구역: start = 0, span, …; [start−ovl, start+span+ovl) ∩ [0, total). 완료 위치 = hi−1.

Type Aliases§

EventSink
즉시 전달 수신기.