시험 기간이라 올리지 못했는데 시험이 어제 끝나 얼른 읽어서 올립니다!
오늘의 논문은 feature를 뽑을 때 PCA를 활용하는 논문이고 정확도를 많이 올릴 수 있는 방법이라 읽어보았습니다.
1.Introduction
이 논문에서는 LiDAR SLAM이 현재까지는 Camera에 비해 robust한 결과를 갖고 있다고 설명합니다.
LiDAR SLAM에서도 feature를 뽑지 않는 pure LiDAR SLAM과 뽑는 feature LiDAR SLAM으로 나눌 수 있습니다. pure LiDAR SLAM은 drift가 상대적으로 많고 feature LiDAR SLAM은 feature를 잘못 뽑을 경우 안좋은 결과가 나오게 되는데, 이 논문에서는 feature를 PCA를 사용하여 뽑은 후 계산하여 matching accuracy와 robustness가 증가합니다. 그리고 sparse local map matching 과 keyframe to local map matching을 사용하는 two-stage matching strategy를 사용하여 localization accuracy 와 mapping consistency를 높입니다. 이것 이외에도 NDT 기반 loop closing과 graph-based pose optimizer가 cumulative error를 줄이는데 활용한다고 설명합니다.
2.Methodology
A.System Overview

B.Feature extraction
어떻게 PCA로 feature를 뽑는지 알아보겠습니다.

주변 points들과의 covariance를 계산하고 그것에 대해 PCA를 진행하여
eigen value를 구합니다. eigen value는 covariance가 어느 방향으로 얼마나 퍼져있는지를 의미하는 것이기 때문에 그것들을 살펴보면 이 포인트들이 어떤 모양의 분포를 갖고 있는지 알 수 있습니다.

만약 corner의 경우 가장 큰 2개의 eigen value의 크기들이 비슷할 것이고 ratio(큰값을 분자에 둔다)를 구하게 되면 작은 값을 가지게 될 것이다.
반대로 plane의 경우 2번째 값은 매우 작아진다. 그렇게 되면 ratio 값은 무한대에 가깝게 커지게 됩니다. 이를 알고 threshold를 잘 정하여 feature를 뽑게 됩니다.

이 논문에서는 threshold를 바꿔가며 실험을 하였고 너무 작을 경우 edge feature를 정확하게 탐지할 수 없었고 너무 클 경우 planar feature를 정확하게 탐지할 수 없었습니다.
5.19와 578이 edge feature planar feature detection의 median 값이었습니다.
20이 가장 높은 정확도를 보였고 저자는 20을 threshold로 결정하였습니다.
C.Initial Pose Estimation and Frame Tracking
먼저 LiDAR frame에서 edge를 뽑습니다! 그리고 이 논문에서는 효율성을 높이기 위해 key frame에서 feature를 뽑아 sparse local map이란 것을 만듭니다.
sparse local map은 각각의 keyframe에서 현재와 가장 가까운 keyframe coordinate로 모두 feature들을 transform하고 downsample하여 만듭니다.
1)Initial Pose Estimation
현재 frame을 Fi라고 하고 가장 가까운 key frame을 Fj라고 부르고 그 사이의 transformation은 Tij라고 부르겠습니다.
만약 이전 frame의 tracking이 성공적이었다면 등속운동 모델을 이용하여 initial pose를 정의합니다. 이후 충분한 feature corresponding을 찾는다면 이것을 그대로 활용하여 tracking을 계산합니다. 만약 충분히 찾지 못한다면 등속운동모델을 버리고 plane to plane matching을 통해 initial pose를 정의합니다.
2)Frame-to sparse Local Map Tracking
edge feature의 경우 거리를 이렇게 정의합니다.

이것은 keyframe coordinate로 옮긴 feature와 sparse localmap에서 가장 가까운 두 feature을 뽑아 그 두점이 이루는 직선과 옮긴 feature point의 거리를 정의한 것입니다.


edge feature와 비슷하게 옮긴 후 3점을 찾아 평면을 만들어 그것과의 거리를 구합니다.

이 두식을 최적화하여 Tracking을 진행하게 됩니다.
D.Keyframe Maintenance
1.feature point가 160개 이상이어야 한다!(threshold는 조정이 가능합니다.)
2.25%이상의 특징점이 corresponding을 잃어버린다면 회전 각도가 5도 이상이거나 corresponding을 못찾는 것이다. => 움직임이 클 때를 말한는 것 같습니다.
이 두가지 조건을 만족한다면 Keyframe으로 정의합니다.
E.Mapping

plane feaute와 edge feature을 이용하여 tracking과 비슷한 D를 정의하고 T를 optimization합니다.(귀찮아서 안쓰는게 아니라 진짜 그렇대요.)
F.Loop Closing
Keyframe을 활용하여 sparse local map을 만들었는데 처음 sparse local map을 M0로 정의합니다. 이제 이 M0와 새로 만들어진 sparse local map을 registration을 하여 일정 점수 이상이 된다면 loop closing으로 판단합니다. registration은 NDT를 활용하는데 ICP보다 initial pose에 영향을 적게받기 때문이라고 합니다.
loop closing에는 2가지 factor를 pose graph에 사용합니다.
1) Odometry Factor: frame tracking과 mapping 이후에, key frame 사이의 relative transformation을 구할 수 있습니다. 이것을 factor linking에 활용합니다.
2)Loop Closure Factor: Key frame들이 loop closing이라고 판단되어지면 transformation이 loop correspondence로써 factor linking으로 사용한다.
3.Experiments
A.Comparison of Feature Extraction
LOAM이나 LIO-SAM은 curvature를 계산합니다.

주변 point와의 차를 vector로 활용하여 더한 크기를 구합니다.
이 논문에서는 이러한 방법이 view point에 따라 달라진다고 말합니다.

p2에서 볼 경우 p1에서 보는 경우보다 curvature가 크게 나옵니다.
이러한 차이는 feature를 결정하는데 오류를 주기 때문에 정확도가 떨어진다고 설명합니다.
또 noise가 낄 경우 벡터합은 noise가 축적되기 때문에 영향을 많이 받아 robustness가 떨어진다고합니다.
이 방법과는 다르게 PCA를 활용한다면 view point의 영향과 noise의 영향을 덜 받을 수 있어 정확도가 높아집니다.
B.Runtime Comparison

runtime을 비교해보면 feature를 뽑을 때는 확실히 curvature를 계산할 때보다는 많이 걸립니다. 이 논문에서는 Mapping module이 2.3Hz가 나온다고 하는데 이론상 최대 10Hz가 될 수 있다고 합니다.
5.Conclusion
feature extraction을 PCA방식으로 사용하여 정확도를 올렸습니다.
하지만 extraction시간이 늘어났기 때문에 이를 해결하기 위해 keyframe을 활용하고 2stage-matching strategy을 사용하여 계산 효율성을 높였습니다.
아직까지는 속도가 늦어서 단점이 있지만 covariance를 한번 계산하면 사용할 수 있는 곳이 많기 때문에 다른 장점도 충분히 있다고 생각합니다.