[Reconstruction] hydra code - include/hydra/reconstruction/voxel_types.h

About_work·2024년 10월 15일
0

lifelong scene graph

목록 보기
12/56

struct TsdfBlock

종합적으로:

  • TsdfBlock은 TSDF 데이터를 저장하고, 블록 단위로 업데이트 상태를 추적하는 중요한 구조체
  • ESDF, 메쉬, 트래킹과 같은 다양한 처리 작업에 대한 상태를 각각 관리하여, 각 작업에서 이 블록이 어떤 상태인지 쉽게 확인할 수 있습니다.
  • TSDF 데이터와 관련된 여러 속성을 관리합니다.

상세 로직 설명

  1. 구조체 정의:

    struct TsdfBlock : public spatial_hash::VoxelBlock<TsdfVoxel> {
    • TsdfBlockspatial_hash::VoxelBlock<TsdfVoxel>을 상속받습니다.
      • 즉, voxel 데이터를 관리하는 블록으로 동작합니다.
    • TsdfVoxel은 각 voxel에 대한 정보를 저장하는 데이터 구조로, 거리 정보(TSDF 값)와 해당 voxel이 얼마나 중요한지를 나타내는 가중치 정보(weight)를 가지고 있습니다.
  2. 생성자 (TsdfBlock::TsdfBlock):

    TsdfBlock(const float voxel_size, const float voxels_per_side, const BlockIndex& index)
        : spatial_hash::VoxelBlock<TsdfVoxel>(voxel_size, voxels_per_side, index) {}
    • 생성자voxel_size, voxels_per_side, BlockIndex를 인자로 받아 TsdfBlock 객체를 초기화합니다.
    • voxel_size는 각 voxel의 크기를 나타내며, voxels_per_side는 블록 당 voxel의 개수를 나타냅니다. BlockIndex는 해당 블록의 3D 공간에서의 위치를 나타내는 인덱스입니다.
    • 이 생성자는 상위 클래스인 VoxelBlock의 생성자를 호출하여 기본적인 블록을 초기화하고, TSDF voxel 데이터를 저장할 준비를 합니다.
  3. 상태 플래그 (업데이트 상태 관리):

    mutable bool esdf_updated = false;
    mutable bool mesh_updated = false;
    mutable bool tracking_updated = false;
    • esdf_updated, mesh_updated, tracking_updated는 각 블록의 업데이트 상태를 추적하는 플래그입니다.
    • 각각의 플래그는 다음과 같은 작업이 완료되었는지 여부를 나타냅니다:
      • esdf_updated: ESDF(Euclidean Signed Distance Function) 업데이트 상태.
      • mesh_updated: 해당 블록에서 메쉬가 생성 또는 업데이트되었는지 여부.
      • tracking_updated: 트래킹과 관련된 정보가 업데이트되었는지 여부.
    • 이 플래그들은 주로 메쉬 생성이나 지도 업데이트와 같은 작업에서 중요하며, 어떤 블록이 처리되었고, 어떤 블록이 아직 처리되지 않았는지를 쉽게 추적할 수 있게 도와줍니다.
  4. 업데이트 상태 설정 (setUpdated):

    void setUpdated() const {
      updated = true;
      esdf_updated = true;
      mesh_updated = true;
      tracking_updated = true;
    }
    • setUpdated() 메서드는 이 블록이 업데이트되었음을 표시합니다.
    • 호출되면, 해당 블록의 ESDF, 메쉬, 트래킹이 모두 업데이트된 것으로 표시됩니다.
    • 이 메서드는 모든 플래그를 true로 설정하여 블록이 갱신되었음을 나타냅니다.
      • 이를 통해 외부 코드에서 이 블록이 다시 처리되었는지 여부를 확인할 수 있습니다.
  5. 정적 메서드 (esdfUpdated, meshUpdated, trackingUpdated):

    static bool esdfUpdated(const TsdfBlock& block) { return block.esdf_updated; }
    static bool meshUpdated(const TsdfBlock& block) { return block.mesh_updated; }
    static bool trackingUpdated(const TsdfBlock& block) { return block.tracking_updated; }
    • 이 메서드들은 각 플래그에 접근하여 해당 블록이 특정 작업에서 업데이트되었는지 여부를 반환합니다.
    • 예를 들어, esdfUpdated()는 해당 블록이 ESDF 작업에서 업데이트되었는지를 나타냅니다.
    • 이러한 메서드는 블록이 다양한 처리 단계에서 어떻게 사용되고 있는지를 쉽게 확인할 수 있도록 도와줍니다.

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

0개의 댓글