LIO-SAM 논문 리뷰

배경

LiDAR-inertial SLAM을 논할 때 항상 나오는 LIO-SAM 논문을 리뷰합니다.

LiDAR-inertial SLAM은 LiDAR 센서와 IMU 센서를 함께 사용해 로봇의 자세와 지도를 실시간으로 추정하는 기술입니다.

1저자인 Tixiao Shan은 이전 2018년도 Lego-Loam의 저자이기도 합니다.

 

Abstract

  • LIO-SAM은 smoothing and mapping 기법을 사용해 구현한 tightly-coupled LiDAR inertial odometry이다.
    • LiDAR inertial odometry는 LiDAR 센서와 IMU 센서를 사용한다는 것을 뜻한다.
    • Tightly-coupled는 센서 값들을 함께 인풋으로 받아 로봇의 자세와 지도를 추론하는 방법을 뜻한다. 반대의 의미로 센서들 각각 추론한 결과를 퓨전하는 loosely-coupled 방법이 있다 (자세한 설명을 원한다면 링크를 확인하면 좋다.).
  • Factor graph를 이용해 상대 이동치 (e.g. 라이다 scan matching, IMU kinematics)와 절대 위치 (e.g. GPS 신호)등의 정보를 조합할 수 있고, loop closure를 수행할 수 있다.
  • LiDAR 스캔 도중에 움직이게 될 경우, 포인트가 밀려버리는 skew 문제가 생긴다. LIO-SAM에서는 LiDAR 스캔 도중의 움직임을 속도가 더 빠른 IMU 값을 받아 pre-integration함으로써 skew를 해결한다 (i.e. deskew).
  • IMU pre-integration 값은 LiDAR odometry를 계산할 때 초기 값으로 사용되기도 한다.
  • LiDAR odometry가 추론되면, 이 값을 이용해 IMU의 bias 값을 연산한다.
  • 실시간 동작성을 유지하며 높은 정확도를 갖게 하기 위해, 포즈 최적화를 할 때에는 global map에 scan match를 하기보다는, 과거의 lidar scan을 marginalize한다.
    • Global map에 scan match를 하는 것 보다, local scale의 지도에 scan match를 하는게 훨씬 연산량이 적다. 효과적으로 local scale 지도를 만들기 위해 sliding window 방법으로 과거의 keyframe들을 이용하는데, 이를 sub-keyframe이라고 부른다.

 


Introduction

  • 과거에 3D 공간을 라이다로 스캐닝하기 위해서 LOAM 기법을 자주 사용했다.
    • LOAM은 LiDAR와 IMU를 사용해 굉장히 높은 성능을 가졌지만, 몇가지 단점이 있었다.
      • 데이터를 global voxel map에 저장하는데, 이로 인해 loop closure detectiond이 잘 안되기도 하고, GPS와 같은 절대 위치 값을 이용한 자세 보정을 할 수 없었다. 또, feature가 많은 공간에서는 voxel map이 금방 꽉 차 연산속도가 느려지기도 했다.
  • 이번 논문에서는 LIO-SAM을 소개한다.
    • 이하 abstract에서 소개한 LIO-SAM의 특징을 반복해서 다시 설명한다.

 


Related work

  • LiDAR odometry는 주로 ICP 또는 GICP를 통해 구한다.
    • 포인트 클라우드 전부를 매칭하는건 연산량이 많아, 3D feature를 찾아 매칭하는 방법이 연구되었다. 주로 edge 또는 plane을 찾는 방법이다.
  • LOAM
    • LiDAR scan 도중의 IMU pose를 구해서 LiDAR 포인트를 deskew한다.
    • 하지만 IMU 자체의 값이 pose 최적화에 들어가지는 않는다.
    • (그렇기 때문에 LOAM은 loosely coupled 방식이다)
  • Lego-LOAM
    • Ground vehicle들에서 많이 쓰는 방법이다.
    • LOAM과 동일한 방법으로 IMU를 사용한다.
  • EKF를 통해 LiDAR, IMU, GPS를 섞는 기법들도 있다.
  • IMU를 최적화 수식에 섞을 때, 최신 기법들은 IMU pre-integration을 이용한다.
    • LINS는 error-state Kalman filter를 이용한다. 하지만 다른 absolute position 센서가 없기 때문에 (e.g. GPS) 오랜 시간동안 포즈 추정을 하다보면 drift가 커진다.
    • LIO-Mapping (LIOM)은 LiDAR와 IMU를 전부 최적화한다. 하지만 모든 프레임을 다 최적화해서 실시간 실행이 불가능하다. 저자가 테스트 했을 때는 실시간 속도의 60%만 나온다고 한다.

 


LIO-SAM

System Overview

  • Frame 축 정리
    • World: W
    • Robot body frame B
      • IMU frame과 robot body frame이 동일하다고 가정한다. 그래야 수식을 적기가 쉽기 때문 ㅎㅎ
      • 혹시 자율주행처럼 자동차 frame과 IMU frame이 동일 위치에 설치되지 않을 경우, LIO-SAM을 수행하고 결과를 자동차 frame으로 옮겨주면 된다.
  • Robot state x 정리
    • 3D 회전 (3x3 SO(3) 매트릭스) R
    • 3D 위치 p
    • 속도 v
    • IMU bias b
  • Factor graph 정리
    • 4개의 factor
      • IMU pre-integration factor
      • LiDAR odometry factor
      • GPS factor
      • Loop closure factor
    • 1개의 variable - robot state x
      • 이동치가 특정 threshold가 넘을 때 마다 그래프에 추가된다.
    • 최적화 라이브러리로는 iSAM2를 사용한다.

 


IMU Preintegration error

가장 먼저 IMU의 기본 식부터 알아보자.

Equation (2)와 (3)은 각각 IMU 센서에서 얻을 수 있는 회전각속도 선형가속도 를 의미한다. 보통 회전각속도는 IMU 센서 내부의 gyro에서, 선형가속도는 linear accelerometer를 통해 얻는다.

Equation 2

Equation (2)를 집중적으로 보자. 는 hat이 달려있다. hat 표시는 주로 ‘추정치’를 의미하는데, 센서가 추정한 값을 의미한다 (그냥 센서값이라고 보면 된다). 에는 hat이 없기 때문에 추정치가 아니므로 실제 물리공간에서 일어난 회전각속도를 의미한다. 는 Gyro bias이다. 는 gyro 센서 노이즈이다. 수식을 이해하자면, 실제 회전각속도 + gyro bias + gyro 노이즈 = gyro 센서 값 을 뜻한다.

Equation 3

Equation (3)를 집중적으로 보자. 는 hat이 달려있으므로 선형가속도 센서 값이라고 이해하면 된다. 마찬가지로 는 실제 선형가속도 값이다. 는 중력방향으로의 가속도이다. 는 각각 accelerometer의 bias와 노이즈 값을 의미한다. IMU 값에는 중력가속도가 기본적으로 포함되어있기 때문에 (IMU 센서를 가만히 두면 중력가속도 값만 측정된다), IMU 값에서 중력값 만큼을 빼줘야 우리가 측정하고 싶은 움직임의 선형가속도를 구할 수 있다. 는 world frame 기준에서 측정된 값인데, 우리는 이 둘을 모두 robot body frame에서 연산하고 싶기 때문에 world->body frame으로 변환을 가능하게 하는 rotation matrix 를 곱해준다.

 

위 정보를 기반으로 velocity, position, rotation과 같은 시점에서의 로봇의 움직임을 구할 수 있다. 각각의 수식이 어떻게 나오는지 설명하기 전에, Wikipedia - kinematic equations 페이지 에서 ‘Kinematic equations for linear motion’을 같이 보면 좋다는 점을 미리 알린다.

Equation 4

우선 Equation (4) 부터 본다. 곧바로 보면 잘 이해가 가지 않을 수 있다. 이 수식이 어떻게 만들어지는지 보기 위해, velocity에 대한 기본적인 kinematic 수식에서부터 시작해보자.

기본적인 velocity 수식은 다음과 같다. 를 곱하면 가속도 량 * 시간 량이니 속도 변화량이 나타난다. 이 값을 t 시점의 속도 값에 더해주면, 만큼의 시간이 지난 후의 속도 값을 알 수 있다.

우리는 velocity 식에서 요구하는 부분을 Equation 3에서 가져올 것이다. 하지만 는 우측 항에 있기 때문에, 식을 정리해줘야한다. 한줄 한줄 정리해보자.

여기서, 는 적기 너무 어려우니, 라고 적는다. 논문에서 라고 적힌 부분이 이에 해당한다.

이제 를 velocity 수식에 대입한다.

Equation 4가 나왔다.

Equation 5

Equation 5도 곧바로 보면 잘 이해가 되지 않는다. Equation 4을 구할 때 얻은 정보를 이용하면 구할 수 있다.

Position에 대한 기본적인 kinematic 수식은 다음과 같다.

우리가 아는 수식은 아래와 같다.

를 치환한다.

Equation 5가 나왔다.

Equation 6

Equation 6의 경우는 Lie theory에 대한 이해가 있어야한다. 쉽게 설명하자면, 3D 회전 값은 아주 작은 값에 대해서는 회전속도를 적분했을 경우 회전 값을 구할 수 있다. 즉, $R{\Delta t}\omega_t\omega_tR{\Delta t}R_t$에 더해야하는데, 회전의 누적은 덧셈연산이 아닌 곱셈연산으로 된다.

Equation 2에 에 대한 정보가 우측 항에 있다. 주 항이 되도록 수식을 정리해준다.

를 만들기위한 수식은 다음과 같다.

여기에 를 치환해준다.

이것을 를 구하는 식에 치환한다.

Equation 6가 만들어진다.

Equation 7,8,9

Equation 7,8,9는 유명한 IMU preintegration 논문에서 발췌한 수식을 그대로 사용한다. 이 수식을 통해 2개의 frame timestamp 사이의 velocity/position/rotation 변화를 추정할 수 있다. (언제 기회가 되면 이 논문도 리뷰해서 여기 설명할 예정이다.)

Equation 7, 8, 9를 통해 두 시점 사이의 상대적인 속도, 위치, 회전 변화량을 구할 수 있다. 이 값들은 IMU 센서 값만으로 계산되며, world frame의 초기 상태와 무관하게 계산할 수 있다는 것이 preintegration의 핵심 장점이다. 만약 bias가 바뀌더라도 전체를 다시 적분할 필요 없이, first-order approximation으로 빠르게 보정할 수 있다는 것도 중요한 포인트이다.

Equation 1

Equation 1은 IMU preintegration factor의 residual (잔차)이다. Factor graph에서 최적화할 때 이 residual을 최소화하는 방향으로 robot state 를 업데이트하게 된다.

각 항을 하나씩 살펴보자.

  • $r{\Delta R{ij}}\Delta R_{ij}R_i^T R_j\mathfrak{so}(3)$으로의 매핑이라고 보면 된다.
  • $r{\Delta v{ij}}$: IMU로 예측한 속도 변화량과 최적화 변수에서 계산한 속도 변화량의 차이이다.
  • $r{\Delta p{ij}}$: IMU로 예측한 위치 변화량과 최적화 변수에서 계산한 위치 변화량의 차이이다.

직관적으로 이해하자면, IMU가 “이만큼 움직였을 것이다”라고 예측한 값과, factor graph 최적화에서 추정한 값의 차이를 구하는 것이다. 이 차이가 0에 가까울수록 IMU 예측이 정확했다는 뜻이고, factor graph는 이 residual을 최소화하는 방향으로 최적화를 수행한다. 앞서 Equation 4, 5, 6에서 풀었던 수식들의 결과물이 여기서 쓰인다고 생각하면 된다.

 


LiDAR Odometry Factor

이번에는 LiDAR odometry factor를 살펴보자. 연속된 LiDAR 스캔 간의 상대적인 변환을 계산해서 factor graph에 추가하는 부분이다.

Keyframe과 Sub-keyframe

모든 LiDAR 스캔을 전부 사용하면 연산량이 너무 많아진다. 그래서 LIO-SAM에서는 keyframe 기반의 접근법을 사용한다.

  • 새로운 keyframe은 로봇이 일정 거리 이상 이동하거나, 일정 각도 이상 회전했을 때만 생성된다.
  • Keyframe이 생성되면, factor graph에 새로운 노드가 추가된다.

Scan matching을 할 때, global map 전체에 대해 매칭하면 당연히 연산량이 너무 많다. LIO-SAM에서는 sliding window 방식으로 최근 keyframe들을 선택하고, 이들의 포인트 클라우드를 합쳐서 sub-keyframe map이라는 걸 만든다. 새로운 LiDAR 스캔은 이 sub-keyframe map에 대해 scan matching을 수행하게 된다.

구체적으로, sub-keyframe은 현재 로봇 위치를 기준으로 가까운 keyframe들을 선택해서 구성한다. 이 방식의 장점은:

  1. Global map 대비 훨씬 작은 크기의 맵에서 매칭하니까 연산이 빠르다.
  2. 현재 위치 주변의 최신 정보만 사용하니까, 과거의 drift가 누적된 정보의 영향을 줄일 수 있다.

Feature 추출

LOAM과 동일하게 LiDAR 포인트 클라우드에서 두 종류의 feature를 추출한다:

  • Edge feature: 곡률(curvature)이 높은 포인트. 주로 물체의 모서리나 코너에 해당한다.
  • Planar feature: 곡률이 낮은 포인트. 주로 벽면이나 바닥 같은 평평한 면에 해당한다.

Edge feature는 edge-to-edge 매칭을, planar feature는 plane-to-plane 매칭을 수행한다. 이 매칭을 통해 현재 스캔과 sub-keyframe map 사이의 상대 변환 를 구할 수 있다.

Scan Matching과 초기값

Scan matching은 반복적인 최적화 과정이기 때문에, 좋은 초기값이 주어져야 빠르게 수렴하고 정확한 결과를 낼 수 있다. LIO-SAM에서는 IMU preintegration 결과를 초기값으로 사용한다.

IMU는 LiDAR보다 훨씬 빠른 주기로 데이터가 들어온다 (보통 IMU 100~500Hz, LiDAR 10~20Hz). 그래서 두 LiDAR 스캔 사이의 IMU 데이터를 preintegration하면, 두 스캔 사이의 상대적인 움직임을 꽤 정확하게 예측할 수 있다. 이 예측 값을 scan matching의 초기값으로 사용하면:

  1. 수렴 속도가 빨라진다.
  2. Local minima에 빠질 확률이 줄어든다.

또한 IMU preintegration을 통해 각 LiDAR 포인트의 타임스탬프에 맞는 로봇 자세를 구할 수 있으니까, 스캔 도중의 움직임에 의한 motion distortion (skew)도 보정할 수 있다. 이걸 deskewing이라 부른다. Abstract에서 언급했던 그 deskewing이 여기서 이뤄진다.

LiDAR Odometry의 결과

Scan matching이 끝나면, 현재 프레임과 sub-keyframe map 사이의 상대 변환을 얻게 된다. 이 상대 변환이 바로 LiDAR odometry factor로서 factor graph에 추가된다. 또한 이 결과를 이용해서 IMU bias를 업데이트하는 데에도 쓰인다. 즉, LiDAR odometry가 IMU의 bias 추정에도 기여하는 tightly-coupled 구조라고 볼 수 있다.

 


GPS Factor

GPS factor는 절대 위치 정보를 제공하는 역할을 한다.

  • GPS 신호가 있을 때, 해당 위치 정보를 factor graph에 unary factor로 추가한다.
    • Unary factor란 하나의 노드에만 연결되는 factor로, 절대 위치를 나타낸다. IMU나 LiDAR odometry factor는 두 노드를 연결하는 binary factor인 반면, GPS는 하나의 노드에 “너 여기에 있어야 해”라는 제약 조건을 거는 것이다.
  • GPS의 covariance (불확실성)도 factor에 함께 포함되어서, GPS 신호의 품질에 따라 최적화에 미치는 영향이 달라진다.
    • 실내나 도심 협곡처럼 GPS 신호가 불안정한 환경에서는 covariance가 크게 설정되어서, 최적화에 미치는 영향이 줄어든다.
    • 개활지처럼 GPS 신호가 좋은 환경에서는 covariance가 작게 설정되어서, 강한 제약 조건으로 작동한다.
  • GPS가 없는 환경 (예: 실내, 지하)에서도 LIO-SAM은 IMU + LiDAR만으로 동작이 가능하다. GPS factor는 선택적(optional)이다.

Factor graph의 유연한 구조 덕분에, GPS뿐 아니라 다른 절대 위치 센서 (예: 나침반, 고도계)도 같은 방식으로 쉽게 추가할 수 있다. 이게 factor graph 기반 SLAM의 큰 장점이다.

 


Loop Closure Factor

Loop closure는 로봇이 이전에 방문했던 장소를 다시 방문했을 때, 이를 감지하고 축적된 drift를 보정하는 기법이다. SLAM에서 거의 필수적인 요소라고 볼 수 있다.

Loop Closure 감지

LIO-SAM에서는 Euclidean distance 기반으로 loop closure 후보를 탐색한다.

  1. 현재 로봇의 위치와 과거 keyframe들의 위치를 비교한다.
  2. 일정 거리 이내에 있는 과거 keyframe이 존재하면, loop closure 후보로 선정한다.
  3. 단, 시간적으로 가까운 keyframe은 제외한다 (최근에 지나간 곳은 loop closure가 아니니까).

Loop Closure 검증

후보가 선정되면, 현재 스캔과 후보 keyframe 주변의 sub-keyframe map 사이에 ICP (Iterative Closest Point)를 수행한다.

  • ICP가 성공적으로 수렴하면 (fitness score가 threshold 이하), 두 포즈 사이의 상대 변환을 구할 수 있다.
  • 이 상대 변환이 loop closure factor로 factor graph에 추가된다.

Loop Closure의 효과

Loop closure factor가 추가되면, iSAM2가 factor graph 전체를 다시 최적화한다. 이 과정에서:

  • 축적된 drift가 그래프 전체에 걸쳐 분산되어 보정된다.
  • 결과적으로 전체 궤적과 지도의 일관성이 크게 향상된다.

한 바퀴 돌고 다시 원점으로 왔을 때, loop closure 없이는 시작점과 끝점이 안 맞는 경우가 많은데, loop closure가 이를 잡아주는 것이다.

 


Experiments

데이터셋

논문에서는 다양한 환경에서 LIO-SAM을 검증한다:

  • Walking dataset: 사람이 센서를 들고 걸어다니며 수집한 데이터. 걸음에 의한 진동이 많아서 IMU에 노이즈가 크다.
  • Campus dataset: 대학 캠퍼스 환경에서 수집. 건물, 나무, 도로 등 다양한 구조물이 포함되어 있다.
  • Park dataset: 공원 환경. 나무가 많아 구조적 feature가 부족한 challenging한 환경이다.
  • Amsterdam dataset: 운하가 있는 도시 환경에서 보트 위에 센서를 설치해서 수집한 데이터.

비교 대상

다음 방법들과 비교 실험을 수행한다:

  • LOAM: LiDAR odometry의 대표적인 기법. Related work에서 다뤘다.
  • LIO-Mapping (LIOM): Tightly-coupled LiDAR-inertial 방법인데 실시간 동작이 불가능하다. 역시 Related work에서 소개했다.
  • LINS: Error-state Kalman filter 기반의 tightly-coupled 방법.

결과 요약

  • 정확도: LIO-SAM은 모든 데이터셋에서 LOAM, LINS 대비 높은 정확도를 보인다. LIOM과는 비슷한 정확도를 보여주지만, LIOM은 실시간 동작이 불가능하다는 점을 생각하면 LIO-SAM이 훨씬 실용적이다.
  • 실시간성: LIO-SAM은 모든 데이터셋에서 실시간 동작이 가능하다. Sub-keyframe 기반의 local scan matching 덕분에 연산량을 효과적으로 줄인 것이 주효했다.
  • Drift 보정: GPS factor와 loop closure factor를 통해 장거리 주행에서도 drift가 효과적으로 보정됨을 확인했다.
  • 센서 유연성: GPS가 없는 환경에서도 IMU + LiDAR만으로 안정적인 성능을 보이며, GPS가 추가되면 정확도가 더 향상된다.

 


Conclusion

LIO-SAM 논문의 주요 contribution을 정리하면 다음과 같다:

  1. Factor graph 기반의 유연한 구조: IMU preintegration, LiDAR odometry, GPS, loop closure를 factor graph로 통합해서, 다양한 센서 조합과 환경에 유연하게 대응할 수 있다.
  2. 효율적인 scan matching: Global map이 아닌 sub-keyframe map에 대해 scan matching을 수행해서 실시간 동작을 보장한다.
  3. Tightly-coupled IMU 통합: IMU preintegration을 scan matching의 초기값과 deskewing에 활용하고, LiDAR odometry 결과로 IMU bias를 보정하는 양방향 구조를 가진다.
  4. 높은 정확도와 실시간 동작의 양립: 기존 방법들이 정확도와 실시간성 중 하나만 달성한 것에 반해, LIO-SAM은 두 가지를 모두 달성했다.

LIO-SAM은 이후 LiDAR-inertial SLAM 분야에서 사실상의 표준(de facto standard)처럼 활용되고 있으며, 수많은 후속 연구의 기반이 되었다. GitHub 저장소에서 오픈소스로 공개되어 있어서, 실제로 다운받아 돌려볼 수 있다.

 


개인적인 생각

LIO-SAM을 직접 써본 경험을 바탕으로 몇 가지 생각을 적어본다.

  • 장점:
    • Factor graph 기반이라 센서를 추가하거나 제거하기가 상대적으로 쉽다. 실제 프로젝트에서 GPS 유무에 따라 쉽게 전환할 수 있어서 좋다.
    • 오픈소스 코드가 잘 정리되어 있어서 이해하기 쉽고, 커스터마이즈하기도 좋다.
    • ROS1/ROS2 모두 지원한다.
  • 한계:
    • Feature 기반 방식이라, 구조적 feature가 부족한 환경 (예: 넓은 들판, 긴 터널)에서는 성능이 저하될 수 있다. 이런 환경에서는 feature가 안 잡혀서 scan matching이 잘 안 되기 때문이다.
    • Loop closure 감지가 Euclidean distance 기반이라, 3D 구조가 비슷한 다른 장소에서 false positive가 발생할 수 있다. Scan context 같은 descriptor 기반 방법을 추가하면 개선이 가능하다.
    • 9축 IMU (gyro + accelerometer + magnetometer)를 기준으로 설계되었기 때문에, 6축 IMU를 사용할 경우 초기 중력 방향 추정 등에서 추가 설정이 필요할 수 있다.

후속 논문으로는 같은 저자의 LVI-SAM (LiDAR-Visual-Inertial)이 있다. 카메라를 추가해서 visual feature까지 활용하는 확장된 시스템인데, 기회가 되면 이것도 리뷰해보겠다.