[Backend] hydra code - src/backend/backend_module.cpp - 마지막 코드 로직

About_work·2024년 10월 24일
0

lifelong scene graph

목록 보기
51/56

핵심 요약! 이거만 보면 돼

  • 최적화 여부 결정:
    • 루프 클로저가 감지되고 최적화를 위한 설정이 활성화되어 있으면 최적화를 수행합니다.
      • optimize 메서드 실행
        • addPlacesToDeformationGraph
        • 그래프 최적화
        • updateDsgMesh
          • DSG에 mesh 업데이트
        • callUpdateFunctions
          • DSG에 mesh를 제외한 모든 나머지 계층 업데이트
    • 그렇지 않으면 updateDsgMeshcallUpdateFunctions 만 실행합니다.
  • DSG 전송: ZeroMQ를 통해 다른 시스템이나 모듈로 DSG를 전송합니다.
  • 추가 처리 호출:
    • 등록된 모든 sink 함수를 호출하여 추가적인 데이터 처리나 저장 등의 작업을 수행합니다.

optimize 핵심요약!

  • optimize 메서드는 루프 클로저가 감지되었을 때 메쉬 변형과 그래프 최적화를 수행합니다.
  • 먼저, 장소(place) 노드들을 변형 그래프에 추가하여 메쉬 변형 시 공간적 일관성을 유지합니다.
  • 변형 그래프를 최적화하여 메쉬 변형에 필요한 제어점의 위치를 업데이트합니다.
  • 최적화된 결과를 기반으로 DSG의 메쉬를 업데이트하여 환경 지도의 왜곡을 보정합니다.
  • 업데이트된 정보를 바탕으로 에이전트와 각 레이어의 업데이트 함수를 호출하여 DSG의 노드와 엣지를 갱신합니다.
  • 객체, 장소, 방, 건물 등의 레이어를 각각 업데이트하고, 필요한 경우 노드 병합을 수행합니다.
  • 병합 처리와 콜백 실행을 통해 DSG의 일관성과 정확성을 유지합니다.
  • 이를 통해 로봇의 위치 추정과 환경 모델이 최신 상태로 유지되도록 지원합니다.
  if (config.optimize_on_lc && have_loopclosures_) {
    optimize(input.timestamp_ns);
  } else {
    updateDsgMesh(input.timestamp_ns);
    callUpdateFunctions(input.timestamp_ns);
  }

  if (logs_) {
    logStatus();
  }

  if (zmq_sender_) {
    zmq_sender_->send(*private_dsg_->graph, config.zmq_send_mesh);
  }
  ScopedTimer sink_timer("backend/sinks", input.timestamp_ns);
  Sink::callAll(sinks_, input.timestamp_ns, *private_dsg_->graph, *deformation_graph_);


}

개요

처리 흐름은 다음의 핵심 단계들을 포함합니다:

  1. 최적화와 직접 업데이트 사이의 결정
  2. ZeroMQ (ZMQ)를 통한 DSG 업데이트 전송
  3. 추가 처리를 위한 Sink 함수 호출

1. 최적화와 직접 업데이트 사이의 결정

  • 시스템은 루프 클로저 감지 및 구성 설정에 따라 최적화 단계를 수행할지 직접 업데이트를 진행할지 결정합니다.

결정 로직

  • 조건 확인:
    • 최적화 플래그: optimize_on_lc는 루프 클로저가 감지되었을 때 최적화를 활성화하는 구성 파라미터입니다.
    • 루프 클로저 감지: have_loopclosures_는 루프 클로저가 발생했는지를 나타내는 불리언 플래그입니다.
  • 결정:
    • 만약 루프 클로저에서의 최적화가 활성화되어 있고 그리고 루프 클로저가 감지되었다면:
      • 최적화 수행: 현재 타임스탬프와 함께 optimize 함수를 호출합니다.
    • 그렇지 않으면:
      • DSG 메쉬 업데이트: updateDsgMesh 함수를 호출하여 DSG의 메쉬 표현을 업데이트합니다.
      • 업데이트 함수 호출: callUpdateFunctions 메서드를 호출하여 DSG의 노드와 엣지를 조정하기 위한 다양한 업데이트 함수를 실행합니다.

목적

  • 최적화:

    • 최적화 시점: 루프 클로저는 로봇이 이전에 방문한 위치를 재인식할 때 발생하며, 지도에서 누적된 드리프트를 수정해야 할 수 있습니다.
    • 최적화의 효과: DSG의 노드들의 위치와 방향을 조정하여 전역적인 일관성을 유지합니다.
  • 직접 업데이트:

    • 메쉬 업데이트: 환경의 메쉬 표현이 최신 센서 데이터와 일치하도록 업데이트합니다.
    • 업데이트 함수 호출: 객체 속성 업데이트, 노드 병합, 시맨틱 레이블 조정 등 DSG 레이어에 필요한 업데이트를 적용합니다.

optimize

3. ZeroMQ (ZMQ)를 통한 DSG 업데이트 전송

  • 시스템은 다른 구성 요소나 시스템과의 통신을 위해 ZMQ를 사용하여 업데이트를 전송하도록 구성될 수 있습니다.

작업

  • DSG 그래프 전송:
    • 함수 호출: zmq_sender_send 메서드를 호출하여 DSG 그래프를 전송합니다.
    • 구성 파라미터: config.zmq_send_mesh 플래그는 전송 시 메쉬 데이터를 포함할지 여부를 결정합니다.

목적

  • 모듈 간 통신:
    • 실시간 업데이트: 다른 모듈(다른 프로세스나 머신에서 실행될 수 있음)이 DSG에 대한 최신 정보를 받을 수 있도록 합니다.
    • 협업: 환경의 현재 상태를 공유하여 분산 처리와 시각화를 용이하게 합니다.

4. 추가 처리를 위한 Sink 함수 호출

  • 마지막으로, 시스템은 추가적인 처리를 수행할 수 있는 sink 함수들을 호출
  • 이는 데이터 로깅, 분석 또는 외부 시스템과의 인터페이스 같은 작업을 수행할 수 있습니다.

작업

  • 모든 Sink 함수 호출:
    • 함수 호출: Sink::callAll 메서드를 호출하여 sink 함수 리스트(sinks_), 현재 타임스탬프, DSG 그래프, 변형 그래프를 전달합니다.

목적

  • 확장성:
    • 사용자 정의 처리:
      • Sink를 통해 핵심 백엔드 로직을 변경하지 않고도 사용자 정의 작업을 수행할 수 있습니다.
    • 데이터 내보내기:
      • Sink는 파일, 데이터베이스 또는 네트워크 스트림으로 데이터를 내보내는 작업을 처리할 수 있습니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글