안녕하세요. 이번 포스팅은 KISS SLAM이라는 논문에 대해서 리뷰하겠습니다. 이전에 KISS ICP라는 논문에 대해서 먼저 읽어보시는 것을 추천드립니다.
[paper review] KISS-ICP : In Defense of Point-to-Point ICP –Simple, Accurate, and Robust RegistrationIf Done the Right Way 논
안녕하세요. 이번에는 KISS ICP라는 논문리뷰를 하도록 하겠습니다.KISS-ICP는 lidar만을 사용해서 odometry를 뽑는 알고리즘입니다. 기존의 방법들이 점점 복잡해지는 것과 달리 해당 논문은 단순화하
jaehoon-daddy.tistory.com
KISS ICP와 마찬가지로 KISS는 "Keep It Small and Simple"의 줄임말로 말그대로 파라미터 튜닝등을 최소화해서 심플하게 돌려도 잘되는 SLAM을 목표로합니다.
SLAM이라는 이름에서 알 수 있듯이 odometry를 구하는 모듈, optimization하는 모듈, loop closure 모듈로 파이프라인이 설계되어있습니다.

Lidar Odometry Using KISS-ICP

제목에서 알 수 있듯이 odometry를 구하는 ICP로 KISS ICP를 사용하였습니다. 간단하게 KISS-ICP를 recap해보면 constant velocity motion model을 통해서 t-1 frame의 pose에서 t frame의 pose를 prediction합니다. 이후에 ICP를 사용하는데 이를 위해서 Nearest Neighbor를 이용해서 corresponding points를 찾고 이 cost function을 최소화 하는 최적화(gaussian newton)를 수행합니다. 그 과정에서 adaptive 하게 파라미터를 조정해서 파라미터 튜닝을 최소화합니다.
Local Mapping and Pose Graph Construction
이제 앞서 KISS-ICP를 이용해서 구한 odometry를 최적화하는 부분입니다. 기본 아이디어는 global 전체를 업데이트하는 것이 아니라 여러개의 local map으로 나눠서 optimization을 수행합니다.
local map은 keypose, voxel grid, local trajectory로 구성됩니다. 새로운 scan들은 kiss icp를 해서 odometry로 구해지고 누적 이동거리가 keypose기준으로 threshold $\beta$를 넘어가면 새로운 local map을 만듭니다. keypose는 global기준으로 이전 keypose에서 현재 odometry를 합친 기준으로 둡니다. local map은 공간적으로 너무 멀리있는 점들은 버리고 근처 포인트들만 유지해서(crop) 생성합니다.
이렇게 local map들은 관리하고 pose graph(optimization)은 각 local map의 keypose들만을 이용합니다. 즉, node로 각 local map의 keypose를 사용합니다.
* landmark , 즉 pointcloud map은 visual slam과는 다르게 refinement되지않습니다. 그렇기에 ghosting 현상이 생길 수 있습니다.
Loop Closing
loop closure로는 https://arxiv.org/pdf/2501.07399 논문을 참고하였다고 합니다. 최근 local map과 이전의 모든 local map사이의 correponding 후보군들을 찾습니다. feature matching은 BEV+ORB를 사용하는데 현재 local map에서 ground points를 찾아서 keypose의 xy평면에 맞춥니다. 이후에 local map을 BEV dense image로 projection한후에 해당 imagedptj ORB descriptor를 extraction해서 과거의 BEV descriptor DB와 매칭시킵니다. 매칭 후보들은 RANSAC으로 검증을 하고 앞서 구한 ground와 합쳐서 초기 registration을 수행합니다.

그 다음으로는 3D 정보를 이용해서 최종 검증을 수행하는데 각 local map을 voxel 마다의 평균점과 normal vector(PCA)로 voxel base pointcloud를 만듭니다. 초기 registartion된 두 로컬맵을 3D registration을 해서 최종 Tranformation을 얻게 됩니다.
위의 수식은 Szymkiewicz-Simpson 겹침 계수로 해당 수식을 통해 입계값이 40%를 넘으면 loop를 채택하고 loop edge를 추가해서 pose graph를 optimization하게됩니다. min을 사용하는 이유는(S-S coefficient) 적어도 작은 맵 기준으로는 충분히 겹쳐야 loop하고 인정한다는 의미입니다.
Fine Grained Pose Graph Optimization
이부분은 offline단계로 모든 scan 처리가 끝난 뒤에 keypose는 고정하고 local map의 세부 scan pose를 graph pose를 통해 opmization하는 단계입니다. local map내부의 자잘한 drift를 최적화한다고 보면 될 것 같습니다.
Experiments


실험은 주로 세가지 자율주행 Lidar dataset을 이용했습니다.(MulRan, HeliPR, Apollo) 추가적으로 NCLT, Newer College도 테스트에 포함하였고 HeLiPR은 self occlusion이 심해서 제외하였다고 합니다.
metric으로는 보통 SLAM에서 사용하는 ATE, KITTI relative odometry 를 사용하였고 evo 툴킷을 이용해서 일관되게 평가하였습니다.
결과는 PIN-SLAM이 가장 정확했지만 GPU가 필요하고 realtime이 어려운 방법으로 KISS SLAM은 매우 단순하지만 2위 수준의 성능을 달성했다고 말합니다.

해당부분은 파라미터 변경관련해서 ablation study를 한 부분입니다. 다른 알고리즘들은 센서 변경시 여러 파라미터를 바꿔야했고 특히 handheld는 더 큰 변경이 필요했지만 KISS SLAM수정없이 동작하였다고 합니다.

실제 navigation 실험에서도 kiss-slam이 생성한 3D -> 2D 맵과 GMapping map 둘다에서 localization 성능에 유의미한 차이가 없었다고 합니다.