SLAM
SLAM은 Simultaneous Localization and Mapping의 줄임말입니다.
번역하면 동시적 위치추정 및 지도작성 정도가 됩니다. 이게 뭘까요?
우리가 낯선 장소에 떨어졌다고 생각을 해봅시다. 처음에는 이곳이 어떤 곳인지, 길이 어떻게 이어져 있는지 아는 정보가 없지만 차츰 주변을 인지하면서 주변의 지도를 생각해볼 수 있을 것입니다. 그런데 자신의 위치를 좀 이동했다고 해서 이전에 그린 지도를 까먹고 이곳이 아까의 그곳인지, 새로운 공간인지 모른다면 이전에 만든 지도는 쓸모가 없게 됩니다.
그렇기에 지도를 작성하는데 있어서 위치를 추정하는 것은 필수적인 부분이라고 생각해볼 수 있습니다.
따라서 위치추정_localization 과 지도작성_mapping 을 동시적으로 진행한다는 것이 바로 SLAM입니다.
Types
•
Visual SLAM
이는 이미지를 활용한 SLAM 기법입니다. 따라서 카메라로 부터 얻은 이미지를 기반으로 환경의 특징점을 추출하고, 이를 이용하여 pose estimation을 수행합니다.
•
LiDAR SLAM
말 그대로 LiDAR 센서를 이용한 SLAM을 말하며 이미지가 아닌 점군_Point Cloud 데이터를 활용하여 pose estimation을 수행합니다.
Process
SLAM은 궁극적으로 의 문제를 푸는 것입니다.
우선 SLAM의 문제를 해결하기 위해서 Front-Back 으로 나누어서 접근할 필요가 있습니다.
고전적인 SLAM 알고리즘의 파이프라인
•
Front-end (Odometry)
순차적으로 들어오는 Sensor Data로 부터 pose을 연산하는 과정.
인접한 이미지 사이의 카메라 동작과 로컬 맵의 모양을 추정. → 어느 방향으로 얼만큼 이동했나
Drift problem
해당 Odometry 연산은 센서에 낀 Noise로 인한 에러가 누적되기 때문에 정확도에 문제가 생길 수 있습니다.
1.
Backend Optimization : 백 단의 최적화를 통해 해결
2.
Loop Closing : 1번과 맞물리는 내용
•
Back-end
Front단에서 서로 다른 time step에서의 카메라 포즈와 loop closing 결과를 받아 최적화된 방향과 map을 만드는 과정.
즉 Noise를 처리하는 역할을 맡고 있으며 Noise가 낀 데이터로부터 전체 시스템의 상태를 추정, 추정한 상태가 얼마나 불확실한 지를 계산 합니다.
◦
인기있는 툴
▪
g2o
▪
gtsam
▪
ceres
•
Loop Closure
이전에 왔었던 공간인지 확인하여 Backend에서 최적화를 하는데 필요한 정보를 줍니다.
Place Recognition 을 통해 왔던 공간이라고 판단되면 이전에 생성된 지도와 통합합니다.
로봇이 출발했던 곳으로 돌아왔다고 생각해보면 예측된 로봇의 현재의 위치는 Drift 문제로 출발지가 아닐 수 있습니다.
이때 주변을 탐지하여 로봇에게 출발지로 왔다는 사실을 알려준다면 Drift 문제로 생긴 오차를 수정하여 해결할 수 있습니다.
Place Recognition
→ Bag of words 방식
영상에서 feature를 뽑아낸 후 각 feature를 대표할 수 있는 값으로 매핑하는 방법
ex) ORB_SLAM의 Visual Vocabulary
Algorithms
알고리즘은 SLAM을 수행하기 위한 Localization 기법입니다. 아래와 같이 다양한 기법이 존재합니다.
•
LOAM (Lidar Odometry and Mapping)
기존의 SLAM 알고리즘은 Loop closure를 통해 drift를 최소화한 3D 맵을 만드는데 초점이 맞춰져 있었습니다.
하지만 LOAM은 자체적인 odometry 알고리즘과 mapping 알고리즘 2개로 나누어 병렬적으로 처리하여 low-drift, low-computational complexity를 가집니다.
•
Graph Based SLAM
로봇의 위치와 움직임을 그래프처럼 Node-Edge로 표현하고, 현대 가장 대중적인 기법으로 다음과 같이 두 가지 방법으로 나뉘게됩니다.
1.
Pose Graph
2.
Factor Graph
•
EKF (Extended Kalman Filter)
잡음이 있는 시스템의 상태를 추정하는데 사용되는 재귀적인 수학적 알고리즘입니다.
이전 상태 추정치와 시스템 동역학 모델을 기반으로 예측 상태를 반복적으로 예측한 후, 실제 측정치를 사용하여 예측을 보정하는 방식으로 동작합니다.
필터는 상태 추정치와 오차 공분산 추정치 두 가지를 유지합니다. 오차 공분산 추정치는 상태 추정치의 불확실성을 나타냅니다.
EKF는 예측된 상태, 예측된 오차 공분산, 측정치, 그리고 측정 잡음의 조합을 사용하여 이러한 추정치를 업데이트합니다.
•
Particle Filter
통계적인 방식으로 미래의 데이터를 예측합니다. 특히 비선형 및 비가우시안 시스템에 대한 상태 추정에 특히 유용합니다.
이 필터는 파티클이라는 가상 입자들을 사용하여 상태를 추정하는데요, 각 파티클은 상태 변수의 후보 값으로 존재하며, 이들은 가중치를 통해 실제 상태의 확률 분포를 근사적으로 모델링합니다.
초기화 → 예측 → 업데이트 → 리샘플링 단계를 거치며, 이를 반복하면서 상태 추정값을 갱신합니다.
LOAM | GBS | EKF | PF | |
정확도 | ||||
연산량 | ||||
속도 | ||||
특징 | 점군 | 대규모 환경 | 계산비용이 적어 리소스
제한있는 경우 | 점군 |
진행하려는 창작자동차 대회에서 자율주행팀은
1.
사용하려는 하드웨어를 바탕으로 구현된 논문 (LiDAR: Velodyne-VLP16, PC: Jetson AGX Xavier)
2.
어느정도 보장된 성능
을 고려하여 LOAM 계열 알고리즘, 그 중에서 PC에 부하를 줄이기 위해 LOAM에 비해 연산량을 줄였다는 LeGO-LOAM을 활용하는 것이 낫다고 판단하였습니다.
reference :
•
Cyrill교수님의 SLAM 요약
•
SLAM 개론
•
Pose Graph 논문 리뷰
•
LOAM paper
•
SLAM Backend
•
Introduction to Visual SLAM from Theory to Practice
•
Loop Closing
•
입문 Visual SLAM
•
LiDAR 기반의 여러가지 알고리즘 소개 & 소스코드 링크
•
EKF