이번 리뷰는 이전부터 하고 싶었던 비전 기반의 Simultaneous localization and mapping(SLAM)에 대한 전반적인 흐름과 종류에 대해 알아보려고 합니다.
++내용이 생각보다 길어 part 1 과 part 2로 나눠 리뷰하고자 합니다.
part 1은 vSLAM의 기초적인 framework에 대한 소개와 feature base SLAM에 대한 소개. part 2에서는 Direct methods, RGB-D base SLAM에 대해 소개하도록 하겠습니다.
SLAM은 알려지지 않은 환경에 대해 Lidar, 카메라, GPS 등등 모션을 추정할 수 있는 여러 센서로부터 정보를 얻어 환경에 대한 3D 구조를 쌓고, 움직임에 대해 추정하는 기술입니다. 하지만 이번 리뷰에서는 카메라를 활용하는 Visual SLAM(vSLAM)에 대해서 이야기하고자 합니다.
기초적인 vSLAM은 아래 세 가지의 모듈로 구성됩니다.
- Initialization
- Tracking
- Mapping
vSLAM을 시작하기위해서는 카메라 포즈 추정과 3D 재구성을 위해서 좌표계 시스템을 정의하는 것은 필수적입니다. 그러므로 1. Initialization에서는 글로벌 좌표계를 정의하고, 환경의 일부분을 재구성하여 글로벌 좌표계에 대한 initial map을 구축해야합니다. 그 다음 지속적으로 카메라 포즈를 추정하며 Tracking과 Mapping을 수행하게 됩니다. 2. Tracking에서는 재구성된 맵에 대한 영상에 대한 카메라 포즈를 추정하며 지속적인 추적을 하게됩니다. 자세히 설명하자면 영상으로부터 feature-match 혹은 feature-tracking을 수행하여 영상(feature point)과 맵에 대한 2D-3D 대응쌍을 구한 뒤, Perspective-n-Point(PnP) problem을 풀며 카메라 포즈를 추정합니다. 3. mapping에서는 아직 확장되지 않은 환경에 대해 3D 구조를 계산하며, map을 확장합니다.
vSLAM에는 안정적이고 가속적인 mapping과 tracking을 수행하기 위해서 Relocalization과 Global map optimization을 수행합니다.
카메라의 빠른 움직임이나 외부 요소로 tracking을 실패하는 경우가 발생시 맵에 대한 카메라 포즈를 다시 계산해야 합니다. 그렇기에 이러한 process를 ‘Relocalization’이라고 부릅니다.
또 다른 모듈인 Global map optimization은 카메라 포즈를 추정하면서 발생하는 이동거리에 따른 누적 추정 오차를 억제하는 것이 목적입니다. 만약 확장하는 맵이 처음 시작하는 구역에 도달한다면 누정 추정 오차를 나타내는 reference information을 습득합니다. 해당 정보를 제약 조건으로 사용하여 오차를 억제합니다.( # 해당 부분은 추가 공부가 필요함)
Loop closing은 reference information을 습득하기 위한 기술입니다. Loop closing은 현재의 영상이 이전의 영상과 매칭이 되는 것이 있는지 찾습니다. 만약 이전 영상과 매칭이 된다면 close loop인 상태라고 가정합니다. 그 후 누적 추정 오차를 줄이기 위해서 relocalization와 같은 방법으로 카메라 포즈에 대한 재추정을 수행합니다.
카메라 포즈에 대한 재추정을 수행하는 방법론에는 포즈 간 재배치가 그래프로 표현하여 일관된 그래프를 만드며 최적화를 수행하는 Pose-graph optimization과 map과 포즈를 최적화하며 reprojection error를 최소화하는 Bundle adjustment(BA) 등이 있습니다.
리뷰할 페이퍼에서는 vSLAM을 아래와 같이 3가지 종류로 분류합니다.
- feature base (e.g ORB SLAM) : 영상의 feature point를 이용하여 tracking과 mapping 을 수행
- direct approach (e.g DTAM) : feature point를 검출하지 않고 전체 영상들을 활용하여 직접적으로 tracking과 mapping 수행
- RGB-D base (e.g. Microsoft Kinect) : depth를 측정하는 센서를 활용하여 tracking과 mapping 수행
Feature-based method
MonoSLAM
Feature-based method는 크게 filter-base와 BA-base 두가지로 나눠집니다. 2003년 제안된 MonoSLAM은filter-base의 대표적인 vSLAM입니다. MonoSLAM은 extended Kalman filter(EKE)를 사용하여 알려지지 않은 환경의 카메라 포즈와 3D 구조를 동시에 추정합니다. 균일한 움직임이 있다고 가정을 하고 EKE를 통해 카메라 포즈와 feature point의 3D 위치를 state vector에 추가하며 연산을 합니다. 그리고 Map initialization은 알고있는 물체로부터 획득합니다. 또 다른 특징으로는 해당 방법론은 환경의 스케일이 커지면 state vector 또한 같이 증가하기 때문에 large scale이나 실시간 연산에는 사용하기 힘들다는 단점이 있습니다.
PTAM( Parallel Tracking and Mapping )
환경의 스케일이 커질수록 state vector과 함께 계산 비용이 증가하는 단점을 해결하기 위해서 PTAM에서는 Tracking과 Mapping을 다른 스레드로 분할하여 연산함으로써 mapping의 계산 비용이 tracking에 영향을 주지 않도록 하였습니다. 비교적 계산 비용이 적은 tracking에서는 실시간으로 수행함으로써 카메라의 움직을 추정하고, mapping에서는 모든 영상을 사용하는 것이 아니라 주요 키프레임에만 적용하되 feature point에 대한 3D 위치를 보다 정확하고 정밀하게 연산을 합니다. 또한 실시간 vSLAM으로는 처음으로 BA를 적용시킨 알고리즘입니다. PTAM 이후 대부분의 vSLAM은 다중 스레드 방식을 택하여 구성됩니다.
PTAM의 tracking 모듈에서는 새로운 입력 영상으로부터 feature point(FAST-10)과 map의 3d 위치간 2d-3d 대응쌍을 구한다. 그리고 2d와 3d point간 reprojection error를 줄이기위해 BA를 수행한다.
PTAM의 mapping 모듈에서는 tracking 모듈에서 제공하는 키프레임 이미지들을 이용하여 맵을 확장해 나갑니다. PTAM의 initial map은 5-point 알고리즘을 적용하여 구축합니다. 초기 두 장의 키프레임 영상들을 매칭 시키고 이동한 거리를 10cm라고 가정하고 이에 맞춰 3d point를 생성합니다. 그 후 카메라가 이동함에 따라 새로운 키프레임들을 추가합니다. 키프레임들은 3가지 조건에 만족하는 경우에만 추가합니다. 1. tracking 품질이 좋아야합니다. 매칭된 특징점의 비율이 특정 임계값 이상인 경우가 이에 속합니다. 2. 최근 프레임과 최소 20프레임 이상 시간 차이가 나야합니다. 3. 카마레아ㅘ 기존 맵과의 최단 거리가 특정 임계값 이하이여야 한다. 즉 너무 먼 거리에서의 영상을 추가할 경우 기존의 맵으로부터 tracking 정보가 손실이 일어날 수 있기 때문입니다.
++ORB-SLAM
ORB-SLAM에 대해서는 paper에서 간략한 설명만하고 끝내 간단한 특징만 아래에 기술합니다. ++ORB-SLAM은 다음에 따로 리뷰를 작성하도록 하겠습니다.
- Parallel Tracking, Mapping and Loop closure detection
- Pose graph optimization and bundle adjustment based optimization
다음 리뷰에서는 아래의 방법들과 남은 이야기들에 대해 리뷰하도록 하겠습니다.
Direct methods
DTAM
LSD-SLAM
RGB-D vSLAM
KinectFusion
SLAM++
카메라의 포즈 추정을 위한 Perspective-n-Point(PnP) problem의 알고리즘은 대략 어떻게 작동하나요?
n개의 2d-3d point correspond간 perspective 시, reprojection error가 최소화되는 카메라 포즈(4×4 r|t matrix)를 구하는 알고리즘입니다.
좋은 글 감사합니다.
아직 VSLAM에 대한 사전 지식이 부족하다보니 이해를 잘 못한걸 수도 있는데, 설명해주신 Tracking 부분에서 2D point는 영상의 feature point를, 3D point는 Initialization에서 설정한 initial map에서의 point가 맞나요?
또한 본문에 나와있는 내용 중 “카메라의 빠른 움직임이나 외부 요소로 tracking을 실패하는 경우가 발생시 맵에 대한 카메라 포즈를 다시 계산해야 합니다. 그렇기에 이러한 process를 ‘Relocalization’이라고 부릅니다.”
라고 설명하신 부분에서 맵에 대한 카메라 포즈를 다시 계산한다는게 어떤 의미인지 이해가 잘 가지 않습니다.
Tracking이라는 과정 자체가 두 영상(2D)과 맵(3D)에 대한 포인터 간에 PnP연산을 통해 카메라 pose를 구하는 것이라고 하셨던 것 같은데, Tracking을 실패했을 경우(Relocalization)에서의 맵에 대한 카메라 포즈 계산과 Tracking을 진행하는 동안에 맵에 대한 카메라 포즈를 구하는 과정에는 무슨 차이가 있는 건가요??
요약하자면 Tracking과 Relocalization에서 항상 맵에 대한 카메라 포즈 계산을 한다고 이해를 했는데, 이 둘이 서로 다른 방식으로 카메라 포즈를 계산하나요?
2D point : feature point, 3d point는 3d 좌표계의 한점을 의미합니다. 꼭 initial map에서의 3d point만을 칭하는 표현은 아닙니다. initial map은 global coordinate 생성과 초기 3d point 생성을 목적으로 둡니다.
결론만 말씀드리자면 저도 자세히는 모릅니다. 다양한 방법론이 존재하고, BA나 Pose graph optimization등이 사용되어질 수 있다고 합니다. tracking에 실패하는 것을 인지하고 고치는 것에 대해서는 SLAM 커뮤니티에서 활발히 논의되고 있는 대상이라고 합니다.