SLAMDUNK Cartographer Review
Table of Contents
Abstract 및 Contribution
- We present the approach used in our backpack mapping platform which achieves real-time mapping and loop closure at 5cm resolution
- 본 논문에서는 5cm의 해상도를 가지는 지도를 실시간으로 Mapping 및 Loop 탐지를 할 수 있는 알고리즘을 제안하고 있습니다.
- To achieve real-time loop closure, we use a branch-and-bound approach for computing scan-to-submap matches as constraints.
- 이와 같은 실시간 Loop 탐지를 위해서, LiDAR 데이터와 SubMap(Local Map) 사이의 매칭을 제약조건으로 계산하기 위해 Branch-and-Bound라는 방식을 제안하고 있습니다.
Graph SLAM?
Graph SLAM
은 크게 Local SLAM
(Frontend)과 Global SLAM
(Backend)로 구성됩니다.
Local SLAM
Local SLAM
은 입력으로 로봇의 움직임에 해당하는 정보(Pose
)와 주변 환경에 대한 정보(Observation
)를 받습니다.
- 대표적인 움직임에 해당하는 정보는
IMU
, Odometry
, GPS
등이 있습니다.
- 대표적인 주변 환경에 해당하는 정보는
LiDAR
, Vision
, Depth-Camera
등이 있습니다.
Local SLAM
은 크게 2가지 역할이 있습니다.
Pose
와 Observation
이용하여 Pose Trajectory
를 생성합니다.
- 생성된
Pose Trajectory
와 Observation
을 이용하여 Local Map
을 생성합니다. (Occupancy Grid Map
)
Local Map
과 Pose Trajectory
사이에는 위치 정보에 대한 Constraint
가 존재합니다.
Global SLAM
Global SLAM
은 입력으로 Local Map
들과 Pose
에 대한 Observation
정보를 받습니다.
Global SLAM
은 Loop Closure Detection
을 수행합니다.
- $T_1$에서 생성된
Local Map
과 $T_{1000}$에서 얻은 Observation
을 매칭하는 역할을 수행합니다.
- 이를 기반으로
Loop Closure Constraint
를 생성합니다.
Local SLAM
및 Global SLAM
을 통해 얻은 Node
(Robot Pose
, Landmark
)와 Edge
(Constraint
)를 이용하여, Graph
형태로 나타내고, 각 Node
의 위치를 최적화하는 것이 Graph SLAM
Local Mapping
Occupancy Grid Map
형태의 Local Map
생성
- 각
Cell
은 log Odds를 기반으로 기록
- N개(파라미터로 조절 가능)의 연속된
Observation
을 이용하여, 하나의 Local Map
을 구성
- 각각의
Local Map
은 생성 시점에서는 서로 독립적이며, 따라서 Local Map
의 Quality는 Pose
정보의 정확도(Motion Model)에 달려있음.
Local Map
생성 시, Noise 보정에 두 가지 알고리즘을 적용
Real-time correlated scan matcher
알고리즘은 Pose
의 정확도가 높으면, 필요없으며, 정확도가 낮을수록, 성능에 큰 영향을 미침 (속도는 느린편)
Ceres scan matcher
알고리즘은 수학적인 최적화가 있으며, 더 높은 정확도가 필요할 때 fine tuning
을 위해 사용
- 아래 이미지의
[X]
부분은 실제로 Observation
이 측정된 위치이며, 회색 Cell
은 Observation
되었지만, 측정값은 존재되지 않은 영역을 의미한다.
Loop Closure Detection
Cartographer
에 대해 알아보기 전에, Loop Closure Detection
에 대해 이해해야한다.
Loop Closure Detection
은 쉽게 말하면, 현재 Pose
및 Observation
을 이용했을 때, 과거에 방문한 지역에 대한 재방문(과거의 Local Map
)인지 아닌지를 판단하는 것을 의미한다.
- 위에서 설명한
Global SLAM
에서 수행하는 것처럼, 기존에 존재하는 Local Map
과 현재의 Pose
의 Observation
을 비교하여, 유사한 정도를 파악하고, 이를 기반으로 방문 여부를 결정한다.
- 당연하게도
Local Map
의 개수가 늘어날 수록(전체 지도 크기가 커질수록), 지도의 해상도가 높을수록 계산량이 늘어난다.
- 또한 이는
NP Hard
문제이다. (모든 경우의 수를 일일이 다 확인해보는 것 외에는 풀 수 없는 문제)
Branch-and-Bound
- 앞서 얘기했던 것처럼,
Loop Closure Detection
은 NP Hard
문제이므로, 실시간 처리가 힘들다.
- 이를
Cartographer
에서는 Branch-and-Bound 기법을 통해, 실시간 수준으로 계산한다고 한다.
Branch-and-Bound
는 Local Map
사이의 최적의 위치를 계산하기 위한 Tree
자료구조 기반의 탐색 알고리즘이며, 특정 Local Map
1개와 특정 Pose
1개에 대해, 최적의 위치를 찾는 알고리즘이다.
Tree
자료구조의 각 Node
는 위치 후보점들이며, Height
가 깊어질수록 더 정밀한 위치가 된다.
- 즉, 저해상도의 지도를 통해 대략적인
Pose
를 먼저 확인한 후, 점점 고해상도의 지도를 이용하여 정확한 Pose
를 찾는 방식
- 아래의 그림을 보면
Brute Force
를 통해 전체를 다 찾는 방법에 비해, 더 빠른 결과를 얻을 것을 예상할 수 있다.
Cartographer
- 논문 이외의 오픈 소스
Cartographer
에서 확인할 수 있는 내용
- ROS Independent하며, ROS Node도 제공하고 있다.
- ROS Independent하게 사용하려면, 센서 및 움직임에 대한 인터페이스의 구현이 필요
- 로봇에서 여러 개의 센서를 사용하더라도 다중 센서를 지원! (일반적인 다른 SLAM은 단일 센서를 지원하는 경우가 많음)
- 다중 로봇 지원 (Multi-Trajectory)
- 실내, 실외 구분 없이 사용 가능
IMU
가 있는 Mobile Robot
에서는 3D SLAM도 사용 가능
Localization
Only 기능 사용 가능
- 일반적인
AMCL
과 같은 방식이 아닌 Cartographer
Mapping과 동일한 방식을 통해 Localization
에 사용 가능
- 생성되는
Pose Node
의 길이를 windowing
방식으로 제한하여, 실시간 최적화 가능 (Pose Node
가 커지면, 계산량이 점점 늘어나기 때문)
Pose Graph
의 업데이트 없이(Frozen Pose Graph
), 현재 로봇의 Pose Graph
와의 비교를 통해 inter trajectory constraint
또는 global constraint
를 찾는 방식
Life-long Mapping
제공 (Continuous Mapping)
Cloud Mapping
제공 (다수의 로봇을 둔 Server에서 Pose Graph Optimization
을 진행)
GRPC
기반으로 동작
- 각 로봇에서는
Localization
only처럼 한정된 Pose Node
만 유지
Cloud
에서 Local Map
(Frozen Pose Graph
)를 로봇에게 지속적으로 업데이트
Local Map Trimmer
를 통해, 겹치는 Local Map
을 지워주는 방식을 통해, Pose Graph
의 크기에 비례하지 않고, 실제 공간의 크기에 비례하도록 함
TSDF
(Truncated Signed Distance Function) 지도 형식 제공 (KinectFusion
을 통해 유명해졌다고 함)
- 3D Lidar Mapping의 경우,
Voxel
이 아닌 Hybrid Grid
를 통해, 2.5D Mapping을 하며, Visualization이 까다롭다고 함
Review
Cartographer
를 실제로 돌려본 것은 오래되었으나, 실질적인 동작에 대해 확인하니, 더 대단하게 느껴지는 것 같다.
Hector Mapping
에서도 Branch-and-Bound
와 같이, 낮은 해상도의 지도부터 비교하여, 높은 해상도까지 정밀하게 위치 추정을 하는 방법을 사용하는데, 추후에는 이에 해당하는 내용도 확인해봐야할 것 같다.
- 개인적으로 튜닝이 좀 까다로운 편이라,
Gmapping
을 좋아하는 편이긴한데, 코드 및 상세한 내용을 조금 더 이해하면 좋을 것 같다.
- 실제 논문과 코드와의 비교를 통해서, 구현 부분과 이론 부분이 어떻게 연결되는 지 확인하면 좋을 것 같다.
DFS
등의 알고리즘 문제풀이에 사용되는 알고리즘이 실제 적용되는 것을 보니, 쓸데 없는 것을 하고 있지는 않았다(?)는 생각이 든다.