[voxblox] voxblox/src/integrator/tsdf_integrator.cc

About_work·2024년 9월 3일
0

voxblox

목록 보기
8/10

1. header

  • .h 파일은 TSDF(Truncated Signed Distance Field) 통합기를 정의하는 코드로, TSDF 데이터를 생성하고 갱신하는 다양한 방법을 정의
  • 이 파일에는 TSDF 통합의 기본적인 구조와 구체적인 구현체들이 정의
    • 각 클래스와 구성 요소는
      • 3D 공간에서 포인트 클라우드 데이터를 기반으로 TSDF 맵을 생성하고 관리하는 역할

1. TsdfIntegratorBase 클래스

기본 역할:

  • TsdfIntegratorBase는 TSDF 데이터를 관리하는 통합기의 기본 클래스
  • 이 클래스는 TSDF 통합을 위한 공통적인 기능과 인터페이스를 제공

주요 기능:

  • 설정 구조체 (Config):

    • TSDF 통합에 필요한 다양한 설정값들을 담고 있습니다.
      • 예를 들어, 최대 신뢰도 값, 최대 레이 길이, 트렁케이션 거리 등의 설정이 포함
    • 특정 통합기의 특성에 따라 추가적인 설정값도 포함될 수 있음
  • 포인트 클라우드 통합:

    • 이 클래스는 포인트 클라우드 데이터를 받아 TSDF 맵에 통합하는 기본 인터페이스를 정의
    • 실제 구현은 이 클래스를 상속받은 다른 클래스들에서 이루어집니다.
  • 복셀 접근 및 할당:

    • TSDF 맵에서 특정 위치의 복셀에 접근하거나 필요한 경우 새로 할당하는 기능을 제공
    • TSDF 맵에서 임시적으로 생성된 블록 -> 최종 맵에 통합하는 기능도 포함
  • TSDF 업데이트:

    • 주어진 포인트에 대한 정보를 바탕으로 TSDF 데이터를 업데이트하는 기능을 제공
      • 이를 통해 각 복셀의 거리와 색상 정보를 갱신

2. TsdfIntegratorFactory 클래스

기본 역할:

  • TsdfIntegratorFactory는 요청된 타입에 따라 적절한 TSDF 통합기를 생성하는 역할
    • 예를 들어, 사용자는 "simple", "merged", "fast" 중 하나를 선택하여 그에 맞는 통합기를 생성할 수 있음

3. SimpleTsdfIntegrator 클래스

기본 역할:

  • SimpleTsdfIntegrator는 가장 기본적인 TSDF 통합 방식으로, 각 포인트에 대해 레이 캐스팅을 수행하여 TSDF 맵을 업데이트
    • 이 방식은 정확도가 높지만 상대적으로 느립니다.
      주요 기능:
    • 포인트 클라우드 데이터를 하나하나 레이 캐스팅하여 TSDF 맵에 통합하는 방법을 제공

4. MergedTsdfIntegrator 클래스

기본 역할:

  • MergedTsdfIntegrator는 동일한 복셀에 영향을 미치는 포인트들을 병합하여 TSDF 맵에 통합하는 방식
  • 이 방식은 계산 속도를 향상시키면서도 정보의 손실을 최소화

주요 기능:

  • 레이 번들링:
    • 동일한 복셀에 위치한 여러 레이를 병합하여 처리 속도를 높입니다.
  • 복셀 통합:
    • 병합된 레이를 기반으로 복셀을 업데이트합니다.

5. FastTsdfIntegrator 클래스

기본 역할:

  • FastTsdfIntegrator는 속도에 최적화된 통합 방식으로, 계산 시간을 단축하는 데 중점
  • 중복된 레이 캐스팅을 피하고, 정보의 중복 처리를 최소화하여 속도를 극대화

주요 기능:

  • 레이 캐스팅 최적화:
    • 동일한 복셀에 대한 중복된 레이 캐스팅을 피하고,
    • 일정 시간이 지나면 통합을 중단하는 방식
  • 고속 통합:
    • 포인트 클라우드를 신속하게 TSDF 맵에 통합하기 위한 여러 가지 최적화 기법을 제공

2. .cc

  • TSDF(Truncated Signed Distance Field) 데이터를 통합하는 여러 방법을 구현한 코드
  • 각기 다른 통합 기법을 사용해, 수집한 데이터를 효율적으로 맵으로 변환하는 역할을 수행

1. TSDF 통합기 기본 클래스 (TsdfIntegratorBase)

기본 기능:

  • 이 클래스는 TSDF 데이터를 통합하는 데 필요한 기본적인 설정과 기능을 제공

주요 기능:

  • 레이어 설정 (setLayer):
    • TSDF 데이터가 저장될 레이어를 설정하고, 복셀 크기와 같은 기본적인 파라미터를 초기화
  1. 복셀 할당:

    • 새로운 포인트 클라우드 데이터를 통합할 때, allocateStorageAndGetVoxelPtr 함수는 필요한 복셀을 동적으로 할당하고 접근할 수 있도록 합니다.
    • 이는 메모리 효율성을 높이고, 실제로 필요한 부분만을 동적으로 관리할 수 있게 합니다.
  2. TSDF 값 업데이트:

    • 할당된 복셀에 대해 updateTsdfVoxel 함수가 호출되어, 새로운 관측 정보를 반영하여 TSDF 값을 갱신합니다.
    • 이 과정은 여러 관측으로부터 얻은 정보를 통합하여, 정확하고 신뢰할 수 있는 3D 맵을 구축하는 데 기여합니다.

1. allocateStorageAndGetVoxelPtr 함수

역할 및 목적
  • 이 함수는 특정 위치에 있는 복셀(voxel)에 대한 저장 공간을 할당하고, 해당 복셀에 접근할 수 있는 포인터를 반환하는 역할
  • 모든 복셀을 미리 할당하는 것은 메모리 낭비가 크기 때문에, 실제로 필요한 복셀에 대해서만 동적으로 할당하는 방식이 효율적
작동 방식
  1. 글로벌 인덱스 확인:

    • 함수는 주어진 글로벌 인덱스(global_voxel_idx)를 사용하여 해당 복셀이 이미 할당되어 있는지 확인합니다.
    • 글로벌 인덱스: 3D 공간에서 복셀의 고유한 위치를 나타내는 인덱스
  2. 복셀 할당:

    • 만약 해당 인덱스에 복셀이 존재하지 않는다면, 새로운 복셀 블록을 임시 저장소(temp_block_map_)에 할당
    • 임시 저장소는 여러 스레드가 동시에 접근할 수 있기 때문에, 접근 시 뮤텍스(mutex)를 사용하여 동기화
  3. 복셀 포인터 반환:

    • 할당된 복셀에 대한 포인터를 반환하여, 이후의 TSDF 값 업데이트 작업에서 사용할 수 있도록 합니다.
수학적 배경
  • 복셀의 위치는 글로벌 인덱스를 통해 3D 공간의 좌표로 변환
  • 이 과정에서 복셀의 크기(voxel_size_)와 각 축의 복셀 수(voxels_per_side_)가 중요한 역할
  • 글로벌 인덱스를 기반으로 복셀의 중심 위치를 계산할 수 있으며, 이는 TSDF 값 계산에 사용

2. updateTsdfVoxel 함수

역할 및 목적
  • 이 함수는 특정 복셀의 TSDF 값을 새로운 관측 정보에 따라 업데이트하는 역할
작동 방식
  1. 거리 계산:

    • 함수는 센서(origin)와 관측된 점(point_G) 사이의 거리를 계산
    • 이 거리를 기반으로 복셀 중심(voxel_center)과의 상대적인 거리를 계산하여 TSDF 값을 산출
  2. TSDF 값 업데이트:

    • 기존의 TSDF 값과 새로운 관측 값 사이의 가중 평균을 사용하여 TSDF 값을 갱신
    • 이 과정에서 신뢰도(weight)를 반영하여, 더 신뢰할 수 있는 관측값이 TSDF 업데이트에 더 큰 영향을 미치도록 합니다.
  3. 색상 정보 갱신:

    • TSDF 값과 함께 색상 정보도 업데이트
    • 이는 시각화나 추가적인 처리에 유용하게 사용
수학적 수식

TSDF 값의 업데이트는 다음과 같은 수식을 따릅니다:

세부 과정
  1. 가중 평균 업데이트:

    • 기존 TSDF 값과 새로운 TSDF 값을 가중 평균하여 업데이트합니다.
    • 이는 노이즈를 줄이고, 여러 관측으로부터 얻은 정보를 통합하는 데 도움을 줍니다.
  2. 신뢰도 반영:

    • 가중치 ( w )는 관측의 신뢰도를 나타내며, 일반적으로 포인트와 센서 간의 거리나 센서의 품질에 따라 결정됩니다.
    • 높은 신뢰도는 해당 관측이 TSDF 값에 더 큰 영향을 미치도록 합니다.

2. 간단한 TSDF 통합기 (SimpleTsdfIntegrator)

기본 개요:

  • 이 통합기는 기본적인 TSDF 데이터 통합 방법을 구현
  • 포인트 클라우드 데이터를 받아 TSDF 맵을 생성하는 역할

주요 기능:

  • 포인트 클라우드 통합 (integratePointCloud):
    • 주어진 포인트 클라우드 데이터를 받아, 여러 개의 스레드를 사용해 병렬로 TSDF 데이터를 통합
    • 각 스레드는 포인트 클라우드를 처리하여 TSDF 맵을 업데이트
  • 통합 함수 (integrateFunction):
    • 각 스레드가 실행하는 실제 통합 작업을 수행
      • 각 포인트에 대해 TSDF 복셀을 업데이트하고,
      • 레이 캐스팅(ray casting)을 통해 포인트와 표면 사이의 거리를 계산

3. 병합된 TSDF 통합기 (MergedTsdfIntegrator)

기본 개요:

  • 이 통합기는 여러 포인트 클라우드를 병합하여, 최적화된 방식으로 TSDF 데이터를 통합
  • 이 방식은 계산 속도를 향상시키면서도 정보의 손실을 최소화

주요 기능:

  • 포인트 클라우드 통합 (integratePointCloud):

    • 포인트 클라우드를 미리 처리하여, 동일한 TSDF 복셀에 여러 포인트가 영향을 주는 경우를 그룹화합니다.
    • 그런 다음, 그룹화된 포인트 데이터를 사용해 TSDF 맵을 업데이트합니다.
  • 레이 번들링 (bundleRays):

    • 비슷한 방향의 레이들을 그룹화하여, 통합 작업을 최적화
  • 복셀 통합 (integrateVoxel):

    • 그룹화된 데이터를 바탕으로, 각 복셀의 TSDF 값을 계산하고 업데이트
    • 이를 통해 포인트 간의 상호작용을 고려한 통합이 가능

4. 빠른 TSDF 통합기 (FastTsdfIntegrator)

기본 개요:

  • 이 통합기는 빠른 속도로 TSDF 데이터를 통합하는 방법을 구현
  • 속도에 중점을 두고 설계되었으며, 큰 데이터셋을 처리하는 데 유리

주요 기능:

  • 통합 함수 (integrateFunction):

    • 주어진 시간 내에 최대한 많은 데이터를 처리하도록 설계
    • 중복된 계산을 피하기 위해, 이전에 처리된 복셀을 기록하고 필요 시 건너뜁니다.
  • 레이 캐스팅 최적화:

    • 일정 거리 내에서 이미 처리된 복셀을 건너뛰는 방식으로 레이 캐스팅을 최적화
    • 이를 통해 중복 계산을 줄이고, 처리 속도를 높임

5. 기타 기능

  • 신뢰도 계산 (getVoxelWeight):

    • 각 포인트의 신뢰도를 계산하는 함수
    • 주어진 포인트가 얼마나 중요한지를 판단하는 기준이 되며, 주로 포인트와 카메라의 거리 등에 기반해 계산
  • 거리 계산 (computeDistance):

    • 특정 포인트가 표면에서 얼마나 떨어져 있는지를 계산하는 함수
    • 이 함수는 TSDF 맵을 업데이트하는 데 핵심적인 역할
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글