Efficiently Closing Loops in LiDAR-Based SLAM Using Point Cloud Density Maps

SJ·2025년 1월 23일
0

Paper

목록 보기
22/23

LiDAR SLAM을 하다보면 제일 골치 아픈게 place recognition인 것 같습니다.
이것을 했다는 논문이 2025년에 나와서 한 번 읽어보았습니다.
일리노이 대학교에서 쓴 논문입니다.


Introduction



Loop Closure 탐지는 현재 scan을 보고 이미 우리가 지나왔던 구역인지를 판단하는 것입니다. 그 factor를 가지고 우리는 최적화를 통해 더 정확한 mapping을 할 수 있습니다.

이 논문은 LiDAR를 통한 Loop Closing Detection을 어떻게 더 잘할 수 있는지 고민한 논문입니다.

현재 LiDAR Loop Closing의 문제점은 다음과 같습니다.

  • 센서의 스캔 패턴, FoV, 채널 수 차이로 인해 동일한 장소를 인식하기 어려움

  • 반복적인 구조(터널이나 다리 등)로 인해 서로 다른 장소를 잘못 매칭할 가능성이 존재함

이러한 문제점을 해결하기 위해 이 논문은 새로운 Loop Closure detection 알고리즘을 제안합니다.


내용은 다음과 같습니다.

1. 로컬 맵을 Bird eye view로 변환

  • 변환하는 과정에서 지면을 정렬하는 모듈을 사용하여 지면을 기준으로 일관되게 변환합니다.

2. 변환된 로컬맵에서 ORB feature를 추출하고 저장

  • ORB 알고리즘을 사용하여 feature descriptor를 생성
  • Hamming 거리 기반 이진 검색 tree에 descriptor를 저장

3. 자체 유사성 제거

  • 데이터 베이스에 descriptor를 추가하기 전에 유사성이 높은 특징을 제거해 perceptual aliasing(반복적인 구조로 인해 다른 장소를 같은 장소로 인식하는 것)에 강건한 알고리즘을 달성

4. Loop Closure 탐지

  • 쿼리 로컬 맵의 특징 descriptor를 database와 매칭해 Loop Clousre 후보를 탐지

  • RANSAC 기반 geometric 검증으로 후보를 검증하고, 2D BirdeyeView 변환을 기준으로 정렬

5. 3D 정렬

  • 지면 정렬을 이용해 최종적으로 3D 강체 변환을 계산하여 글로벌 정렬 수행

이를 통해 이 논문이 주는 Contribution은 다음과 같습니다.

1) 다양한 LiDAR 센서와 호환되는 Loop Closure Detection 알고리즘 개발

2) multi session 및 오랜 시간이 흐른 뒤 재방문 시에도 가능

3) 비평면 움직임에도 loop closure detection 가능

4) Perceptual Aliasing에도 강건

5) 다른 LiDAR에서 기록된 데이터도 정렬이 가능


Method


진행 순서

과정에는 그림에서 보이는 것처럼 진행됩니다.

1) Local map 생성

2) bird eye view projection

3) features detection and pruning

4) binary search tree database

5) RANSAC verfication

6) initial 3D alignment

차례대로 한 번 자세히 살펴보겠습니다.

Creation of Local Maps

현재 scan과 map을 비교하는 기존 loop closure detection알고리즘들과 달리
이 알고리즘은 Local map을 생성하여 비교합니다. 더 많은 정보를 이용하여 비교하기 때문에
다양한 센서를 사용하는 경우에도 장소 인식을 가능하게 합니다.

Local map을 만드는 과정을 살펴보겠습니다.

  • LiDAR scan data 수집

    • LiDAR로부터 연속적인 Point Cloud Scan {P1,P2,...,Pn,...{P_1, P_2, ... , P_n, ...}}을 획득.
    • 각 스캔에는 해당하는 3D Pose 추정값 {wT1,wT2,...,wTn,...^w T_1, ^wT_2, ... ,^wT_n, ...}이 포함됨

  • Point Cloud 변환

    • 모든 Point Cloud를 Odometry 프레임 w로 변환하여 {wP1,wP2,...,wPn,...^wP_1, ^wP_2, ... , ^wP_n, ...}를 생성
  • Local map 생성

    • wti+k1wti2>τc||^wt_{i+k-1} - ^wt_i||_2 > \tau_c (Frame이 일정 거리 이상 움직였을 경우)
      이 조건이 만족되면 Local map 생성을 종료합니다.
  • DownSampling

    • 스캔 집합 {wP1,wP2,...,wPn,...^wP_1, ^wP_2, ... , ^wP_n, ...}을 누적하여 로컬 맵 wMm^wM_m을 생성
    • Voxel grid 기반 DownSampling을 사용 각 voxel 당 최대 20개의 Point만 유지
  • Local map을 frame pose로 변환

    • iMm=wTi1wMm^iM_m=^wT_i^{-1}\bullet ^wM_m
    • scan에 포함된 Pose를 활용하여 i번째 frame 좌표계로 local map을 옮겨주는 과정을 진행합니다.
  • Local Map 생성 반복

Ground Plane Detection and Alignment

Bird Eye View 변환을 위해, 포인트 클라우드의 Local map에서 ground plane을 검출하고 이를 로컬 좌표계의 xy-평면과 정렬해야 합니다.

과정은 다음과 같습니다.

  • Ground Detection

    • 지면은 일반적으로 LiDAR scan에서 가장 낮은 z-좌표를 가진 점으로 구성

    • 로컬 Map MmiM^i_mX,YX,Y축으로 5m 해상도 셀로 분할.

    • 각 셀에서 가장 낮은 z-좌표를 가진 점을 샘플링

  • Ground Alignment

    • 샘플링된 지면 포인트 GmiG^i_mxyxy-평면과 정렬하기 위해 Least Squares Problem을 정의

      gTim=arg minTgkGmi(n^xyTgk)2gT_i^m = \displaystyle\argmin_T \displaystyle \sum_{\forall g_k \in G^i_m} (\hat{n}_{xy}\bullet Tg_k)^2

  • 최종 변환 및 정렬

    • 최적화된 변환 gTimgT_i^m를 로컬 맵 MmiM^i_m에 적용하여 로컬맵을 지면과 정렬

Density-Preserving Bird's Eye View Projection

로컬 맵을 Bird Eye View로 Porjection 합니다.
이를 통해 3D point를 직접하는 것보다 계산량을 줄였습니다.

  • Projcetion

    • 각 포인트의 zz-좌표를 제거하여 2D 평면에 투영

    • 결과: 2D 카르테시안 grid Nm(u,v)N_m(u,v)

  • 격자

    • 투영된 Point Cloud의 x,y 범위를 사용하여 격자의 크기를 정의

    Wm=[xmuvb][xmlvb]+1W_m = [\frac{x_m^u}{v_b}] - [\frac{x^l_m}{v_b}]+1

    Hm=[ymuvb][ymlvb]+1H_m = [\frac{y_m^u}{v_b}] - [\frac{y^l_m}{v_b}]+1

    Projection 이미지를 쪼개서 grid로 만듭니다.

  • 정보 저장 방식

    • 각 셀에 투영된 포인트 수를 저장하여 시야 변화에 덜 민감하도록 함
  • 상대적 밀도를 통한 이미지 정의

    • 픽셀마다의 상대적 밀도를 계산합니다.
    Im(u,v)=Nm(u,v)NminNmaxNminI_m(u,v) = \frac{N_m(u,v)-N_{min}}{N_{max}-N_{min}}
  • 동적 객체와 노이즈 제거

    • 상대적 밀도 5% 미만인 픽셀은 0으로 설정하여 제거합니다.

Feature Detection and Pruning Strategy

  • ORB descriptor 계산

    local map에서 변환한 BEV image에서 ORB descriptor를 계산하고
    이것을 Hamming 거리 기반 tree에 넣어 저장합니다.

  • Self-Similarity Pruning

  • 같은 이미지 내에서 유사한 descriptor를 가진(이 논문에선 Hamming거리가 35이하) feature를 제거

  • 이를 통해 Perceptual Aliasing을 예방할 수 있습니다.

Feature DataBase

  • HBST 기반 데이터 베이스 생성

    • ORB descriptor를 hamming거리 기반의 HBST 데이터 베이스에 저장합니다.

    • 장점

      • Hamming 거리를 활용한 이진 트리 구조로 빠른 검색이 가능
      • 리프 노드의 제한이 있기 때문에 대규모 데이터에서도 검색 시간이 제한적
      • HBST는 점진적으로 업데이트가 가능하며, 오프라인 사전 학습이 필요없음

Loop Detection and Map Alignment

  • RANSAC 기반 정렬

    • Hamming 거리가 가까운 descriptor를 뽑아 RANSAC 기반 정렬을 시행하여 최적의 transform을 찾습니다.

      1) 특징 쌍 샘플링: RANSAC에서 두 개의 특징 쌍을 무작위로 선택

      2) 초기 변환 계산: 선택된 특징 쌍을 사용해 Kabsch-Umeyama알고리즘으로 2D 강체 변환 계산

      3) 거리 기반 Outlier 제거: 변환 TBEVT_{BEV}를 사용해 모든 매칭된 특징 쌍의 유클리드 거리 계산
      ( 1.5m이상인 매칭을 Outlier로 간주)

      4) 최적 변환 선택: RANSAC 반복 횟수 동안 , 가장 많은 inlier를 포함하는 변환을 최적 변환으로 선택

  • 3D 변환

    • BEV 이미지 간의 최적 Transformation을 기반으로 3D 변환을 계산하여 3D 최적 transformation 계산


      저는 scan context를 써서 Loop Closure를 탐지하곤 했는데 너무 가까운 거리의 물체에 대해서 높이를 제대로 잡지 못해 문제가 발생하는 경우가 종종 있었습니다. 이것을 활용하면 그 문제를 해결할 수도 있을 것 같아 흥미롭네요.

profile
student

0개의 댓글