1. Introduction
본 포스트에서는 FAST-LIO2 논문을 리뷰한다. FAST-LIO2는 HKU MaRS 연구실에서 22년도에 발표한 LIO 알고리즘으로 21년도에 발표한 FAST-LIO의 저널 버전이라고 할 수 있다. FAST-LIO2의 가장 큰 특징으로는 ikd-tree를 개발 및 적용하여 kNN 속도를 극적으로 향상시켰으며(kd-tree 대비 4% 시간 소요), 이에 따라 LOAM feature-based에서 Direct point registration 방식으로 LiDAR Odometry 방식이 변경된 것이다.

1.1. FAST-LIO

FAST-LIO의 main contribution은 다음과 같다.
1. Iterated Kalman filter(IKF)를 사용하여 LiDAR와 IMU 센서를 퓨전

2. Backward propagation을 사용하여 포인트클라우드의 왜곡을 보정

3. 효율적인 칼만 게인(
1.2. FAST-LIO2

FAST-LIO2의 main contribution은 다음과 같다.
1. LOAM feature-based에서 Direct point registration 방식으로 Odometry 방식의 변화

2. ikd-tree 기반의 매핑으로 속도 향상 (기존 kd-tree의 4% 연산량만 소요)

FAST-LIO와 FAST-LIO2의 차이점을 알고리즘 파이프라인으로 표현하면 다음과 같다.

2. IMU kinematic model

3차원 공간 상에 위와 같이 IMU가 움직이고 있다고 가정하자. 월드 좌표계는

측정된(measured) 가속도

여기에 추가적으로 측정된 IMU 값에는 bias

IMU는 가속도 이외에도 각속도 또한 측정할 수 있다. 측정된 각속도

일반적으로 IMU는 LiDAR와 함께 결합된 상태로 3차원 공간 상에서 움직인다. LiDAR와 IMU의 extrinsic은
- e.g.,
2.1. State transition model
IMU 시스템을 시간에 따라 업데이트하려면 상태천이모델(state transition model)
우선 IMU의 상태변수
-
-
-
-
-
-
-
-
색상으로 상태 변수들을 구분하면 다음과 같다.

IMU의 입력
-
-
IMU의 노이즈
-
-
-
-
상태 변수
-
-
따라서 상태천이모델
상태천이모델
-
위 식을 간결하게 표현하면 다음과 같다.
3. LiDAR measurement model

LiDAR 센서에서
-
-
-

색상으로 강조하면 다음과 같다.

LiDAR measrement model은 IKF의 업데이트 스텝에 활용되며 이와 같이 관측값
4. State estimation
4.1. Backward propagation
LiDAR 센서는 10-100Hz의 속도로 동작하는 것처럼 보이지만 하나 하나의 단일 포인트들은 100-200kHz의 초고속으로 로깅된다. 다만 이렇게 고속으로 데이터를 처리할 수는 없기 때문에 특정 간격(10-100Hz) 동안 데이터를 누적한 다음 한 번에 출력하는데 이를 스캔(scan)이라고 한다.
만약 LiDAR 센서가 움직이면서 포인트를 수집하는 경우 수집된 포인트는 필연적으로 한 스캔에도 여러 포즈가 섞여있을 수 있다. IMU 센서를 활용하면 LiDAR 포인트들을 한 스캔이 끝나는 시점(scan end-time)에 대해 정렬할 수 있으며 이를 Backward propagation이라고 한다.

한 번의 스캔동안 IMU는 forward propagation을 통해 상태를 업데이트 한다. 스캔 속도는 일반적으로 IMU 속도보다 느리기 때문에 한 스캔 사이에도 여러 IMU 측정값들이 존재할 수 있다.

앞서 말했듯이 LiDAR는 한 스캔 내에도 100-200kHz로 로깅된 포인트가 존재하기 때문에 두 IMU 측정값 사이에는 수많은 포인트클라우드 데이터가 존재한다.

-
-
-
-
Backward propagation은 하나의 LiDAR 스캔이 끝나는 순간 IMU 포즈를 역순으로(backward) 전파시켜서 각 IMU 데이터의 포즈를 계산하고 이를 통해

한 스캔이 끝나는 순간을
위 과정을 스캔이 시작하는
4.2. Iterated Kalman filter
Iterated Kalman filter(IKF)에 대해 설명하기에 앞서 재귀 베이즈 필터(recursive bayes filter)에 대해 먼저 설명한다. 제어입력
-
-
-
Belief of
위 식에서
Kalman Filter(KF):
KF는 선형 동적 시스템에 대한 상태의 최적값를 재귀적으로 추정하는 알고리즘을 말한다.

VIO, LIO에서는 일반적으로 빠르게 입력되는 IMU 측정값을 통해 Prediction 스텝을 여러 번 수행하고 카메라, LiDAR 측정값이 들어오면 Update 스텝을 한 차례 수행한다.

3차원 공간 상에서 KF의 prediction, update 스텝을 표현하면 다음과 같다. 아래 그림에서 보다시피 한 스캔 사이에 prediction 스텝은 여러 번 수행된다.

Extended Kalman Filter(EKF):
LIO의 상태변수에는 회전행렬

Iterated Extended Kalman Filter(IEKF):
하지만 EKF는 선형화(linearization) 과정에서 오차가 누적되어 최적해를 보장하지 못하는 단점이 존재한다. IEKF를 사용하면 Update 과정에서 반복적으로(iterated) 선형화를 수행하면서 선형화 에러를 제거하므로 최적해를 보장할 수 있다.

Error-state Kalman Filter(ESKF):
상태 변수

에러 상태 변수를 표현하기 위해 기존의 상태변수는 true 상태 변수가 되고 이는 명목(nominal) 상태 변수와 에러 상태 변수의 합으로 표현한다.
-
-
-
에러 상태 변수는 값이 작기 때문에 선형화 속도가 빠르고 선형화 누적오차가 작아 정확도가 높은 특성이 있다.
Iterated Error-state Kalman Filter(IESKF):
ESKF의 업데이트 스텝에 iterated Scheme을 추가하면 최종적으로 다음과 같은 형태가 되고 이를 Iterated error-state Kalman filter(IESKF)라고 부른다.

FAST-LIO2에서는 IESKF를 상태 추정에 사용하고 있으며 논문에서는 이를 간략히 Iterated Kalman filter(IKF)라고 표기하였다. IESKF의 모션 모델과 관측 모델은 다음과 같다.
- 에러 상태 모션 모델은
- 에러 상태 관측 모델은
Prediction, update 스텝의 자세한 과정을 요약하면 다음과 같다. 이는 다음 섹션에서 자세히 설명한다.

4.2.1. Forward propagation
Forward propagation은 다음 LiDAR 스캔이 들어오기 전까지 IMU 데이터로 prediction 스텝을 수행하는 것을 말한다.

위 그림에서 보는 것과 같이 prediction 스텝은 IMU 데이터가 들어올 때마다 수행되며 상태천이모델
-
-
다음으로 에러 상태
-
-
에러 상태 모션 모델은 (
-
위 식에서
-
각 자코비안 행,열에 상응하는 상태 변수를 나타낸 그림은 다음과 같다.

하지만 에러 상태
따라서 IKF의 prediction 스텝은 (
4.2.2. Iterated Update
LiDAR 스캔이 들어오면 update 스텝을 수행한다.

IKF는 update 스텝을 반복적(iterative)으로 수행하므로 반복 횟수
Residual Computation:
다음으로 측정된 LiDAR 포인트
그리고 kNN 알고리즘을 사용하여 맵에서부터

앞서
색상으로 강조하면 다음과 같다.


관측 모델을 에러 상태
-
-
Iterated update:
IESKF의 업데이트 스텝은
-
-
위 맨 마지막 식을 정리하면 다음과 같은 최적화 식이 유도된다.
-
-
-
위 식을 에러 상태 변수
위 식에서
-
-
또한, (
-
따라서 (
-
-
위 식은 quadratic programming(QP) 형태이므로 최적화 식을 풀면 다음과 같은 칼만 필터 업데이트 식이 도출된다. 이를 에러 상태 변수
-
-
그림으로 나타내면 다음과 같다.

하지만 FAST-LIO2는 위 식을 사용하지 않는다. 위 식에서 가장 시간적으로 병목이 되는 부분인 칼만 게인
4.2.3. Fast Kalman gain
FAST-LIO2에서는 동치(equivalent) 관계의 다른 칼만 게인을 구하여 연산 속도를 대폭 감소시켰다.
LiDAR 스캔 당 1-100k의 관측 데이터가 생성되기 때문에 역행렬

(

칼만 게인을 동치(equivalent) 관계의 다른 형태로 변환하면

역행렬은 대략
Derivation of Fast Kalman gain:
두 칼만 게인이 동치 관계인 것을 증명해보자. FAST-LIO 논문에서는 Fast -> Slow 순서로 증명하였다. 우선
위 식을 Fast 칼만 게인에 넣고 전개하면 다음과 같다.
색상으로 강조하면 다음과 같다.

결론적으로 FAST-LIO2는 다음 식을 반복적으로 계산하면서 업데이트 과정을 수행한다.
-
-
그림으로 나타내면 다음과 같다.

5. Mapping - ikd-tree

IKF 업데이트 스텝이 끝나면
기존 FAST-LIO는 kNN 탐색을 위해
- 정적 kd-tree는 포인트를 삽입/삭제될 때 자동으로 리밸런싱이 되지 않으므로 시간이 지남에 따라 불균형이 심해진다.
- 수동 리밸런싱을 하게 되면 전체 트리를 리밸런싱해야 하므로 연산량이 많이 소요된다.
LIO와 같은 로봇 어플리케이션은 실시간으로 데이터의 삽입/삭제가 빈번하게 일어나므로 대규모 매핑 시 kd-tree로는 실시간 성능을 보장할 수 없다.

FAST-LIO2는 데이터 변경 시 자동으로 부분 트리만 리밸런싱하는 동적 icremental kd-tree(ikd-tree)를 개발 및 적용하였다. ikd-tree는 모든 테스트에서 kd-tree의 4%의 시간만 소비하였다.
5.1. kd-tree
kd-tree는 1975년 존 벤틀리에 의해 제안된 자료구조로서

예를 들어 위 그림에서 검정색 포인트들은 이미 주어져 있고 새로운 파란색 포인트가 들어왔을 때 최단 거리를 찾는다고 가정해보자(=kNN). 왼쪽 그림에서는 최단 거리를 찾기 위해 모든 점들에 대해 거리를 계산해야 하지만 오른쪽 그림은 kd-tree에 의해 공간이 효율적으로 분할되어 있기 때문에 분할된 공간 내에서 파란색 포인트와 가장 가까운 점들 몇 개만 탐색하면 최소 거리를 구할 수 있다. 따라서
5.1.1. Point insertion
2차원

오른쪽 2차원 그래프에 점들이 주어져 있을 때 이를 kd-tree에 삽입하는 연산에 대해 먼저 알아보자.

맨 처음 축(axis)을

다음으로

5.1.2. kNN search
다음으로 kd-tree에서 kNN을 수행하는 예제를 살펴보자.
- 루트 노드로부터 재귀적으로(recursive) 데이터 삽입과 동일한 액션을 수행하여 말단 노드(leaf node)까지 이동
- 말단 노드와 타겟포인트 사이의 거리를 closest dist.에 저장
- 지나온 노드들을 거슬러 올라가면서 아래 과정을 수행
- 3.1. 현재 노드와 거리를 측정하고 closest dist.보다 더 가깝다면 업데이트
- 3.2. 분할된 평면 반대편을 다음 과정을 통해 체크. 분할된 평면까지 거리와 closest dist.를 비교
- 3.2.1. closest dist.가 큰 경우 반대 영역의 브랜치도 탐색
- 3.2.2. closest dist.가 작은 경우 반대 브랜치는 고려하지 않고 3번 과정을 반복
- 루트 노드까지 과정을 반복 후 탐색 종료

타겟 포인트

1. 루트 노드로부터 재귀적으로(recursive) 데이터 삽입과 동일한 액션을 수행하여 말단 노드(leaf node)까지 이동

2. 말단 노드와 타겟포인트 사이의 거리를 closest dist.에 저장

(3) 3.2. 분할된 평면 반대편을 다음 과정을 통해 체크. 분할된 평면까지 거리와 closest dist.를 비교

(3) 3.2.1. closest dist.가 큰 경우 반대 영역의 브랜치도 탐색

(3) 3.1. 현재 노드와 거리를 측정하고 closest dist.보다 더 가깝다면 업데이트

(3) 3.2. 분할된 평면 반대편을 다음 과정을 통해 체크. 분할된 평면까지 거리와 closest dist.를 비교


4. 루트 노드까지 과정을 반복 후 탐색 종료
5.2. ikd-tree

kd-tree는 정적 자료구조이므로 자동으로 리밸런싱을 수행하지 않는다. 따라서 시간이 지날수록 트리가 불균형해지는 문제 발생한다. 불균형 문제를 해결하기 위해 Scapegoat tree, Balanced Box-decomposition(BBD) tree, Incremental kd-tree(ikd-tree) 등 동적으로 밸런싱을 수행하는 kd-tree 알고리즘들이 제안되었다. 이 중 ikd-tree는 점진적으로(incrementally) 데이터가 추가/삭제될 때마다 부분 트리를 동적으로 업데이트하는 특징이 있다.
5.2.1. Balancing criterion
ikd-tree는 아래 조건이 만족되면 트리의 밸런스가 맞춰졌다고 판단한다. 즉, 아래 조건 중 하나라도 위반되면 동적으로 리밸런싱을 수행한다.
-
-
-
-
위 첫 두 줄의 식을 통해 루트 노드가

위 왼쪽 그림에서 오른쪽 자식 노드는
5.2.2. Map management

ikd-tree가 맵을 관리하는 방법은 다음과 같다.
- 초기 맵 크기
(e.g., 1000m)만큼 ikd-tree를 유지함. 초기 LiDAR 포즈는 이며 크기 만큼 탐지 가능 - 시간이 지남에 따라 LiDAR 센서가 이동하여
로 이동하고 맵의 경계 부분을 터치함 - 전체 맵은
만큼 이동하고 이전의 겹치지 않는 부분들은 전부 삭제됨 (=Box-wise 삭제 발생)
5.2.3. Advantages

ikd-tree는 다음과 같은 장점을 지닌다.
- 증분 업데이트와 리밸런싱 : 단일 포인트의 삽입/삭제 외에도 박스 단위의(box-wise) 삽입/제거 연산도 지원하며 동적으로 리밸런싱을 수행함
- 다운샘플링 지원 : 트리 구조 내에서 자체적으로 다운샘플링 기능을 지원함. 이를 통해 맵데이터를 효율적으로 관리하면서 필요한 정밀도를 유지할 수 있게 됨
- 레이지 삭제(lazy deletion) : 삭제 연산 수행 시 실제 점들이 삭제되지 않고 삭제됨으로 마킹해놓은 다음 리밸런싱 시 실제로 삭제됨. 이는 삭제 과정의 효율성을 크게 향상시키며 리밸런싱 시간을 절약할 수 있음
- 병렬 리밸런싱 기능 : 큰 서브 트리의 리밸런싱이 필요한 경우 병렬 처리를 사용하여 성능 저하없이 빠르게 리밸런싱 가능
ikd-tree와 kd-tree의 시간복잡도를 비교하면 다음과 같다.

ikd-tree와 다른 kd-tree 알고리즘들의 기능을 비교하면 다음과 같다.

5.2.4. Data structure
ikd-tree의 자료구조는 다음과 같다.

5.2.5. Algorithm detail
Point insertion / Downsampling:

Box-delete:

Rebalancing:

6. Experiments
6.1. Benchmark experiment

FAST-LIO2의 성능 평가를 위해 위와 같은 공개 벤치마크 데이터셋을 사용하였다.
6.1.1. ikd-tree speed test
각 벤치마크 데이터셋에서 ikd-tree와 다른 트리 자료구조의 속도를 평가

6.1.2. FAST-LIO2 performance test

6.2. Real-world experiment

벤치마크 테스트에서 다른 알고리즘 대비 좋은 결과를 얻은 후 자체적으로 드론에 LiDAR+IMU을 부착하여 테스트를 수행하였다.
6.2.1. FAST-LIO2 processing time test

6.2.2. FAST-LIO v.s. FAST-LIO2 processing time

6.2.3. Fast flip test
1000deg/s의 매우 빠른 회전 테스트

6.2.4. Fast movement test
7m/s, 100deg/s 속도로 달리면서 테스트

6.2.5. Aerial drone test
드론의 바닥면에 LiDAR를 설치하여 공중에서 FAST-LIO2를 수행

7. Appendix
해당 섹션에서는 FAST-LIO2 논문의 내용 중 설명의 편의를 위해 수식적으로 깊게 다루지 못했던 부분을 다룬다. 주로 R2Live 논문과 IMU preinegration 논문을 참고하여 작성하였다[5][6].
7.1. Left and right jacobian of SO(3)
임의의 회전행렬
-
-
-
-
임의의 작은 변화량
두 방법 사이에는 충분히 작은
-
-
-
위 식에서
만약 업데이트 위치가
-
-
-
두 자코비안
FAST-LIO2 논문의 수식 중
7.2. Derivation of
(
-
-
Forward propagation 수식 (
(
다음으로 (
유도 과정을 그림으로 나타내면 다음과 같다.


지금까지 유도된 식을 정리하여 에러 상태 변수를 다시 쓰면 (
R2Live 논문의 Appendix 수식 유도 과정을 보면 위 식의
(ㅇㅇ님 댓글로 내용 수정 24.05.29)
FAST-LIO2의 (
7.3. Derivation of
다음으로 (
에러 상태에 대한 자코비안
우선
-
-
수식의 앞 부분은 다음과 같이 정리할 수 있다.
-
그림으로 나타내면 다음과 같다.

정리한 수식을 다시 대입하면 다음과 같이 전개된다.
7.4. Derivation of
다음으로 (
에러 상태 변수
따라서 에러 상태 변수
-
-
-
-
위 식에 지수 매핑(exponential mapping)을 적용하고 기호를 단순화한다.
-
-
-
작은 증분량
작은 증분량에 대하여 (
따라서 (
-
위 마지막 줄의 식을 정리하면 다음 식이 성립한다.
-
결론적으로 회전 SO(3)군에 대한
하지만 FAST-LIO2 논문의 (11) 식에서 보다시피 왼쪽 자코비안(left jacobian)을 통해 표현하였기 때문에 (
(ㅇㅇ님 댓글로 수정 완료. 24.05.29)
7.5. Derivation of
다음으로 FAST-LIO2의 IKF 과정 중 업데이트 스텝부터


8. References
'Engineering' 카테고리의 다른 글
[SLAM] ROVIO 논문 및 코드 리뷰 (+ IEKF) (0) | 2024.01.27 |
---|---|
[SLAM] VINS-mono 논문 리뷰 (+ IMU preintegration) (23) | 2022.10.15 |
[MVG] Stereo Camera Calibration 예제코드 및 설명 (C++) (3) | 2022.07.14 |
[MVG] Scene Plane-based Homography 예제코드 및 설명 (C++) (0) | 2022.07.07 |
[MVG] Vanishing Point-based Metric Rectification 예제코드 및 설명 (C++) (0) | 2022.07.03 |