PIN-SLAM: LiDAR SLAM Using a Point-Based Implicit Neural Representation for Achieving Global Map Consistency

SJ·2024년 8월 13일
1

Paper

목록 보기
10/23

Introduction
PIN-SLAM은 LiDAR를 기반으로한 implicit neural reprentation SLAM 알고리즘을 제안하는 논문입니다.
최근 implicit representation은 많은 장점을 보이고 있습니다.
신경망을 훈련시켜 장면의 관측값을 학습시키는 이 방법은 메모리 효율적인 연속적 표현을 제공하고 효율적인 렌더링, 표면 재구성, 충돌 회피, 경로 계획 등을 제안합니다. PIN-SLAM은 loop closing 기능도 있어 더욱 정확한 SLAM을 제공합니다.
주요 contribution은 이와 같습니다.
1. 위치 추정 정확성
2. 대규모 매핑: loop closing을 활용하여 큰 범위의 환경에서도 SLAM이 가능합니다.
3. 맴 표현의 압축성: 맵 자체가 network로 저장되기 때문에 훨씬 압축적인 표현이 가능합니다.
4. 효율적인 인덱싱 및 프레임 속도: 기존 다른 SLAM과 다르게 빠른 SLAM이 가능합니다.

Globally Consistent Implicit Neural SLAM

Overview

1) Preprocessing: voxel-downsampling을 통해 input point cloud를 registration할 point cloud Pr, mapping할 point cloud Pm으로 만듭니다.

2) Odometry: global pose를 Pr을 local map에 등록하면서 추정합니다. odometry transfromation은 pose graph의 edge로 등록됩니다.

3) Mapping: 우선 dynamic point를 제거해줍니다. 그 후 Pm의 point로 센서가 쏘는 ray를 따라 sampling을 진행하여 sensor coordinate에서 world coordinate로 변환시켜주는 행렬을 곱하여 sampling된 point를 world coordinate로 보냅니다. 그 후 표면과 가까운 sample을 새로운 neural point로 initialize하고 그것들을 map에 누적합니다. (나머지 point들은 SDF를 최적화하는데 사용됩니다.) 그렇게 update된 local map은 global map에 등록됩니다.

4) Loop Closure detection: Local map을 사용하여 local polar context descriptor Ut를 생성합니다. 그리고나서 descriptor사이의 feature distance를 비교하여 potential loop closure를 찾습니다. loop closure가 탐지되면 loop transformation을 pose graph의 edge로 등록합니다.

5) Pose Graph Optimization: loop closure edge가 들어오면 pose graph를 최적화합니다.
global map에서 neural point의 위치와 방향은 global consistency를 유지하도록 최적화된 이후 연관된 frame을 따라 옮겨집니다. 그리고나서 training sample pool point를 옮기고 local map을 reset합니다.

A. Neural Point-based Map representation
1) Map Representation:

Map의 point들은 다음과 같은 정보들을 담고 있습니다.
1. point의 위치
2. point의 quaternion
3. latent feature vector
4. creation time stamp
5. last update timestamp
6. stability

여기서 DeepSDF와 비슷하게 neural point query에서 SDF value를 예측합니다.
각각의 neural point m에 대해 latent feature vector 와 realtive coordinate dj를 누적합니다. 여기서, dj는 query position을 나타냅니다. 그리고 나서 이 누적된 vecotr를 geometric decoder에 넣어줍니다. 그렇게 SDF 값을 추정합니다.
이렇게 추정된 SDF value는 point마다의 값으로 distance weighting을 사용하여 interpolation해줍니다. query position의 stability도 distance-weighted된 평균을 사용합니다.
결국 K개의 point를 모아 query에 대한 value값을 계산하고 그것을 interpolation하여 각각의 point에 정보를 넣어주는 듯합니다.

2) Map Data structure
빠른 neural point indexing과 neighborhood search를 위해 voxel hashing data structure를 유지합니다.

3) Map initialization and Update
World coordinate에서 측정된 point cloud에 대해 3가지 경우 map을 initialization합니다.
1. hashing entry가 아직 얻어지지 않았을 경우

  1. hash collision이 있을경우

  2. 저장된 neural point들이 더이상 active하지 않을 경우 neural point를 initialization합니다.

이건 보통 새로운 지역에 대한 학습을 시작하거나, loop closing이 끝나고 새롭게 매핑을 하는 과정에서 발생합니다.

4) Local Map
이 논문에서는 시간에 따라 local map을 만드는 것이 아니라 travel distance를 기준으로 local temporal window를 결정합니다. time stamp t에 센서 위치를 local map의 중심으로 정의하고 spatial window(센서와의 거리가 일정 이하)와 temporal window안의 모든 neural point를 local map에 넣습니다.

5) Map training Sample
time stamp t에 대해 ray sampling을 진행합니다.
다음과 같은 세가지 공간에 대해 sampling을 진행합니다.
1.표면 근처: 표면 근처에서 gaussian 분포를 사용하여 sampling을 진행합니다. 이것을 통해 깊이 정보를 학습합니다.
2.표면 앞 자유공간, 표면 뒤 잘린 공간에 대해 sampling을 진행합니다 이것을 통해 환경의 빈 부분과 물체의 경계를 학습합니다.

catastrophic forgetting을 방지하기 위해 현재 시점의 샘플말고도 이전 시점의 sample도 저장해놓습니다. 현재 센서와 너무 멀어질 경우 local sliding window을 적용하여 제거합니다.

6) Map training loss

binary cross entropy와 ekional regularization을 결합한 loss를 사용합니다.


여기서 S를 미분할 때는 단순 미분을 하는 것이 아니라 극소 변화량을 이용합니다. 이것을 통해 backpropagation을 가능하도록 합니다.

B.Preprocessing
point cloud를 다운 샘플링을 미리 해줘야 합니다.
mapping의 voxel size는 더 작으면 이 voxel의 중심과 가까운 point만 남기고 나머지는 제거해줍니다.
또 등속운동 가정을 통해 motion으로 인한 distortion을 제거해줍니다.

C. Odometry Estimation

목표는 SDF를 최소화하는 transformation을 구하는 것입니다.
이 손실함수를 미분해서 자코비안을 구하고 자코비안 제곱*weight matrix을 통해 hessian matrix를 approximation합니다. 그것을 가지고 levenberg-marquardt 최적화를 진행하여 증분을 계산합니다.

또 robustness를 강화하기 위해 Geman-McClure kernel을 사용합니다.

convergence가 되면 hessian의 eigen value를 계산하고 3가지 기준을 통과하면 그 transformation을 채택합니다. 세가지 조건은 다음과 같습니다.
1. Eigenvalue가 threshold 보다 높을 경우
2. valid point 비율이 threshold보다 높을 경우
3. average residual이 threshold보다 높을 경우

D. Mapping and Local Bundle Adjustment

Mapping을 할 때 우선 동적 객체를 필터링합니다.
SDF value와 안정성 예측 값이 일정값 이상이면 동적 물체로 간주하고 제거합니다.

제거한 후 남은 점들에 대해 ray에 따라 샘플을 수집하고 그것을 사용하여 feature vector와 MLP decoder를 최적화합니다. 일정 시간이 지나면 디코더를 고정하고 신경망의 feature vector만 최적화하여 catastrophic forgetting을 방지합니다.

이러한 초기 최적화는 multiview를 생각하지 않기 때문에 bundle adjustment를 활용해서 multiview에서도 일관되게 유지합니다.

E. Loop closure detection
local map들의 neural point를 활용해서 descriptor를 생성합니다.
descriptor 사이의 cosine similarity를 활용하여 loop closing 후보군을 찾아냅니다.
이러한 descriptor를 만들때 scan context++과 마찬가지로 polar context augmentation을 활용하여 translational invariance를 높입니다.

F.Globally Consistent Implicit Neural Map Adjustment

일단 Loop가 감지되면 scan to map registration으로 확인 후 현재의 포즈를 초기값으로 설정하여 그래프 최적화를 합니다. 최적화가 끝나고 추가적인 최적화가 일어나는 것을 방지하기 위해서 약간의 시간동안 loop closing을 진행하지 않습니다.

profile
student

0개의 댓글