- 이
.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 데이터가 저장될 레이어를 설정하고, 복셀 크기와 같은 기본적인 파라미터를 초기화
-
복셀 할당:
- 새로운 포인트 클라우드 데이터를 통합할 때,
allocateStorageAndGetVoxelPtr
함수는 필요한 복셀을 동적으로 할당하고 접근할 수 있도록 합니다.
- 이는 메모리 효율성을 높이고, 실제로 필요한 부분만을 동적으로 관리할 수 있게 합니다.
-
TSDF 값 업데이트:
- 할당된 복셀에 대해
updateTsdfVoxel
함수가 호출되어, 새로운 관측 정보를 반영하여 TSDF 값을 갱신합니다.
- 이 과정은 여러 관측으로부터 얻은 정보를 통합하여, 정확하고 신뢰할 수 있는 3D 맵을 구축하는 데 기여합니다.
1. allocateStorageAndGetVoxelPtr
함수
역할 및 목적
- 이 함수는 특정 위치에 있는 복셀(voxel)에 대한 저장 공간을 할당하고, 해당 복셀에 접근할 수 있는 포인터를 반환하는 역할
- 모든 복셀을 미리 할당하는 것은 메모리 낭비가 크기 때문에, 실제로 필요한 복셀에 대해서만 동적으로 할당하는 방식이 효율적
작동 방식
-
글로벌 인덱스 확인:
- 함수는 주어진 글로벌 인덱스(
global_voxel_idx
)를 사용하여 해당 복셀이 이미 할당되어 있는지 확인합니다.
- 글로벌 인덱스: 3D 공간에서 복셀의 고유한 위치를 나타내는 인덱스
-
복셀 할당:
- 만약 해당 인덱스에 복셀이 존재하지 않는다면, 새로운 복셀 블록을 임시 저장소(
temp_block_map_
)에 할당
- 임시 저장소는 여러 스레드가 동시에 접근할 수 있기 때문에, 접근 시 뮤텍스(
mutex
)를 사용하여 동기화
-
복셀 포인터 반환:
- 할당된 복셀에 대한 포인터를 반환하여, 이후의 TSDF 값 업데이트 작업에서 사용할 수 있도록 합니다.
수학적 배경
- 복셀의 위치는 글로벌 인덱스를 통해 3D 공간의 좌표로 변환
- 이 과정에서 복셀의 크기(
voxel_size_
)와 각 축의 복셀 수(voxels_per_side_
)가 중요한 역할
- 글로벌 인덱스를 기반으로 복셀의 중심 위치를 계산할 수 있으며, 이는 TSDF 값 계산에 사용
2. updateTsdfVoxel
함수
역할 및 목적
- 이 함수는 특정 복셀의 TSDF 값을 새로운 관측 정보에 따라 업데이트하는 역할
작동 방식
-
거리 계산:
- 함수는 센서(origin)와 관측된 점(point_G) 사이의 거리를 계산
- 이 거리를 기반으로 복셀 중심(voxel_center)과의 상대적인 거리를 계산하여 TSDF 값을 산출
-
TSDF 값 업데이트:
- 기존의 TSDF 값과 새로운 관측 값 사이의 가중 평균을 사용하여 TSDF 값을 갱신
- 이 과정에서 신뢰도(weight)를 반영하여, 더 신뢰할 수 있는 관측값이 TSDF 업데이트에 더 큰 영향을 미치도록 합니다.
-
색상 정보 갱신:
- TSDF 값과 함께 색상 정보도 업데이트
- 이는 시각화나 추가적인 처리에 유용하게 사용
수학적 수식
TSDF 값의 업데이트는 다음과 같은 수식을 따릅니다:
세부 과정
-
가중 평균 업데이트:
- 기존 TSDF 값과 새로운 TSDF 값을 가중 평균하여 업데이트합니다.
- 이는 노이즈를 줄이고, 여러 관측으로부터 얻은 정보를 통합하는 데 도움을 줍니다.
-
신뢰도 반영:
- 가중치 ( w )는 관측의 신뢰도를 나타내며, 일반적으로 포인트와 센서 간의 거리나 센서의 품질에 따라 결정됩니다.
- 높은 신뢰도는 해당 관측이 TSDF 값에 더 큰 영향을 미치도록 합니다.
2. 간단한 TSDF 통합기 (SimpleTsdfIntegrator
)
기본 개요:
- 이 통합기는 기본적인 TSDF 데이터 통합 방법을 구현
- 포인트 클라우드 데이터를 받아 TSDF 맵을 생성하는 역할
주요 기능:
- 포인트 클라우드 통합 (
integratePointCloud
):
- 주어진 포인트 클라우드 데이터를 받아, 여러 개의 스레드를 사용해 병렬로 TSDF 데이터를 통합
- 각 스레드는 포인트 클라우드를 처리하여 TSDF 맵을 업데이트
- 통합 함수 (
integrateFunction
):
- 각 스레드가 실행하는 실제 통합 작업을 수행
- 각 포인트에 대해
TSDF 복셀을 업데이트
하고,
- 레이 캐스팅(ray casting)을 통해 포인트와 표면 사이의 거리를 계산
3. 병합된 TSDF 통합기 (MergedTsdfIntegrator
)
기본 개요:
- 이 통합기는 여러 포인트 클라우드를 병합하여, 최적화된 방식으로 TSDF 데이터를 통합
- 이 방식은 계산 속도를 향상시키면서도 정보의 손실을 최소화
주요 기능:
4. 빠른 TSDF 통합기 (FastTsdfIntegrator
)
기본 개요:
- 이 통합기는 빠른 속도로 TSDF 데이터를 통합하는 방법을 구현
- 속도에 중점을 두고 설계되었으며, 큰 데이터셋을 처리하는 데 유리
주요 기능:
5. 기타 기능
-
신뢰도 계산 (getVoxelWeight
):
- 각 포인트의 신뢰도를 계산하는 함수
- 주어진 포인트가 얼마나 중요한지를 판단하는 기준이 되며, 주로 포인트와 카메라의 거리 등에 기반해 계산
-
거리 계산 (computeDistance
):
- 특정 포인트가 표면에서 얼마나 떨어져 있는지를 계산하는 함수
- 이 함수는 TSDF 맵을 업데이트하는 데 핵심적인 역할