본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Computer Vision

[SLAM] ORB SLAM과 SLAM Dataset에 관한 정리

by zpstls 2023. 1. 11.
반응형

 

 

요번 포스트는 SLAM과 관련된 내용을 다루고자 합니다.

SLAM과 관련된 많은 Open Project들이 있는데 이 중에서 ORB SLAM에 대해 정리할 예정입니다.

(SLAM과 관련된 내용은 시리즈로 작성될 예정입니다.)

 

 

우선, ORB-SLAM3은 Pin-Hole 또는 Fisheye 렌즈를 포함한 monocular, stereo, RGB-D Camera를 이용해 Visual, Visual-Inertial과 Multi-Map SLAM 기능을 구현한 첫 번째 Real-Time SLAM Library입니다.

때문에 SLAM과 관련된 프로젝트들을 찾아보면 내용도 비교적 많고 쉽게 찾아볼 수 있습니다.

 

ORB SLAM은 버전별로 있는데, 현재 시점(= 2023년 초)에서는 Version 3까지 공개되어 있습니다.

ORB-SLAM3을 다루기 전에 초기 버전인 ORB-SLAM에 대해 알아보도록 하겠습니다.

 

SLAM은 크게 Feature-Based SLAM과 Direct SLAM으로 나누어집니다. Feature-Based SLAM은 영상에서 특징점을 추출하여 SLAM을 적용하는 방식이고 Direct SLAM은 Pixel 정보를 그대로 SLAM에 적용하는 방식입니다. 이중 ORB-SLAMFeature-Based SLAM입니다.

Feature는 Image에 존재하는 Corner를 의미합니다. Corner를 검출하는 대표적인 방법은 Harris Corner, SIFT, SURF, FAST, ORB 등이 있습니다.

ORB-SLAM은 FAST-9를 이용해 특징점을 검출한 후 Intensity Centroid(→ Corner의 Pixel 값은 그 중심과 차이가 있고 그 벡터는 방향성을 만드는 데 사용된다는 이론)로 특징점의 방향(Orientation)을 계산합니다.

 

ORB-SLAM은 3개의 Thread로 구성되어 있습니다.

ORB SLAM Structure

하나는 Tracking Thread로 Map에서 현재의 위치를 찾는 역할을 담당합니다. 기존의 Map정보와 ORB-Feature를 활용해 현재의 위치를 추정합니다.

두 번째는 Local Mapping Thread로 각각의 Keyframe 정보를 Map에 Mapping하는 역할을 담당합니다. 즉 2D 좌표를 3D좌표로 변환하는 거죠.

세 번째는 Loop Closing Thread입니다. 영상 정보를 통해 Map을 생성하다보면 Drift 현상이 발생하게 되는데, SLAM으로 만들어진 Map 정보를 이용해 현재의 위치를 교정해 주는 역할을 담당합니다.

 

SLAM에서 필요한 기술 중 하나는 SolvePnP입니다. Camera가 3D 공간에서 어디로 얼마만큼 이동하였는지, 얼만큼 회전하였는지를 추정해야 합니다. 이를 Pose Estimation이라고도 하는데, 이를 계산하기 위해서는 2D Image상의 점(x, y)과 2D Image에 대응하는 3D 상의 점(x, y, z), Camera Parameters( Focal Length, Optical Center, Radial Distortion)을 알아야 합니다. ORB-SLAM에서는 Tracking 부분의 Initial Pose Estimation 단계에서 카메라 위치 추정을 위해 SolvePnP를 사용합니다.

Bag of Words(= BoW)는 보통 문서를 자동으로 분류하는 방법 중 하나로 설명됩니다. 이는 문서 내의 단어의 빈도와 분포를 보고 어떤 종류의 문서인지를 판단하는 기법입니다. Image에서의 Bag of Words는 Image Feature(SIFT, BRIEF, ORB 등)을 추출한 후, Clustering을 커쳐 Featrue를 대표할 수 있는 코드 생성 또는 코드를 모아놓은 코드 북을 생성하여 이미지 분류 및 인식을 수행하는 기법이라고 할 수 있습니다.

ORB-SLAM에서는 영상에서 추출한 ORB Featrue로 부터 Code 및 Codebook을 생성하고 이를 Tracking, Local Mapping, Loop Closing 전반에 걸쳐 사용합니다.

Tracking 과정에서는, Lost가 발생할 경우, 새로 들어오는 영상의 ORB Feature를 이전에 생성된 Keyframe의 Map Point로 구성된 BoW와 비교하는 과정인 Global Re-localization을 거치게 되고 이후 충분히 유효한 값이 나오면 Tracking을 이어서 수행합니다.

Local Mapping 과정에서는, 새로운 Keyframe이 생성되는 경우 Keyframe을 나타내는 BoW를 계산해 새로운 Map Point의 Triangulation의 계산을 돕습니다.

Loop Closing 과정에서는, 새로운 Keyframe이 Local Mapping 과정에서 만들어진 Keyframe의 BoW내의 값과 유사하면 이전에 지나온 장소라고 판단해 Loop Closing이 발생할 수 있는 후보로 분류합니다.

Bundle Adjustment(= BA)는 Re-projection Error(Map상의 3D Points를 Keyframe Image들에 Projection 시킨 위치와 해당 Image Frame에서 실제 관측된 위치의 차이)를 최소화시키도록 3D Point의 위치 및 카메라의 위치를 최적화하는 과정입니다. 이 또한 ORB-SLAM의 3개의 Thread에서 각각 사용됩니다.

 

위와 같은 기술들을 집약하여 결국, ORB-SLAM은 Image에서 Feature를 추출하고 해당 Feature들의 위치 변화를 추적하여 카메라의 위치를 추정하고 추정된 위치를 Mapping 하는 과정을 수행합니다. ORB-SLAM의 경우 Visual SLAM을 기반으로 출발하였지만, 최근 버전업을 통해 내부 구조 수정 및 기타 센서 추가 사용 등의 기능이 추가되었습니다.

특히 ORB-SLAM3의 경우는 다음과 같은 구조를 같습니다.

ORB SLAM3 Structure

IMU 센서를 통합하여 Visual-Inertial SLAM도 제공합니다. 하지만 Pin-Hole Monocular Camera에 국한되어 기능을 제공하며 Initialization이 상당히 느리고 몇몇의 어려운 시나리오에서는 Fail 하는 문제가 있다고 합니다. IMU Sensor 값을 이용하는 부분은 BA 부분입니다.

해당 논문의 필자는 Stereo-Inertial SLAM이 가장 Robust하고 정확한 Solution이라고 합니다. 그러나 평평한 공간의 차 움직임처럼 Slow Motion 또는 Roll, Pitch Rotation이 없는 경우, IMU의 Initialization이 어렵기에 Stereo SLAM 또는 Single Image기반 SLAM을 사용하는 것을 권장한다고 합니다.

 

 

 

 

 

이제까지 ORB SLAM의 Structure에 대해 알아보았습니다. 그렇다면 SLAM을 사용하기 위한 Dataset은 어떤 것일까요?

 

SLAM에 대한 성능 평가를 위해 많이 사용되는 Dataset은 대표적으로 EuRoC와 TUM이 있습니다. 이 두 Dataset은 SLAM 이외의 Dataset도 제공합니다. 그런데 개발자들은 보통 SLAM과 관련된 Dataset으로만 많이 사용하는 편인 것 같습니다.

아무튼, Dataset은 보통 Machine이 이동한 경로 정보와 Mono-Camera, Stereo Camera, RGB-D Camera, IMU 등에 대한 Data를 제공합니다.

 

각 Dataset에 대한 Link는 다음과 같습니다. (Visual-Inertial과 관련된 Dataset)

EuRoC : https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

 

kmavvisualinertialdatasets – ASL Datasets

The EuRoC MAV Dataset This web page presents visual-inertial datasets collected on-board a Micro Aerial Vehicle (MAV). The datasets contain stereo images, synchronized IMU measurements, and accurate motion and structure ground-truth. Those data sets were p

projects.asl.ethz.ch

TUM-VI : https://vision.in.tum.de/data/datasets/visual-inertial-dataset

 

Computer Vision Group - Datasets - Visual-Inertial Dataset

Below are some known usage examples and/or tools of other people concerning our dataset. We provide this for convenience, but inclusion in this list does not imply our endorsement or promise of any particular functionality. We thank the respective authors

vision.in.tum.de

 

우선, EuRoC Dataset의 경우는 다음과 같은 Machine을 이용하여 Dataset을 구성합니다.

EuRoC Dataset

Machine에는 Camera, IMU, Mocap Sensor 등이 포함되어 있습니다. 보통 이 Sensor들의 Parameter들은. yaml에 저장하여 사용합니다. 각 센서에 대한 Parameter들은 sensor.yaml 파일에 포함되어 있으며 이를 참고하여 ORB-SLAM에 적용할 때 사용하도록 합니다.

Camera의 경우는 Camera에서 추출한 Sequenced Image File이 제공됩니다. 또한 TimeStamp 및 Sensor에서 추출한 Data에 대한 정보가 data.csv에 포함되어 있습니다.

이 중 우리가 관심 있는 정보는 Mono-Camera Image와 Camera의 IMU Sensor Data입니다. Mono-Camera의 경우는 Camera Parameter 즉, Camera Model, Inerinsic_Coefficients, Distortion_Model, Distortion_Coefficients, Resolution이 포함됩니다.

 

예시는 다음과 같습니다.

.yaml example

Camera의 IMU Sensor의 경우는 timestamp, $w_s[rad s^{-1}], a_s[m s^{-2}]$가 포함됩니다. 이때 $w_s$는 Gyroscope의 x, y, z값이고 $a_s$는 Accelerometer 값입니다.

IMU의 yaml에는 gyroscope와 accelerometer의 Noise Model Parameter가 포함됩니다.

Example Of Custom Dataset

Custom Sensor를 사용할 경우, Camera Image 및 Camera Parameter를 설정한 후, Timestamp를 맞춘 IMU data (gyroscope & accelerometer)를 넣어주면 될 것 같긴 합니다. 다만 IMU 센서의 경우, 기성제품을 사용한다면 Noise를 어떻게 추출할 수 있는지에 대한 부분은 고민이 필요할 것입니다.

 

TUM Dataset의 경우는 다음과 같은 Machine을 사용합니다.

TUM Machine

EuRoC는 헬리콥터 형태로 되어 있어 주로 상공에서 Dataset을 수집하였지만, TUM은 지상에서 수집하기에 적합한 구조로 되어있습니다. 그래서인지 주로 사람이 들고 수집한 Dataset이 많습니다. 이외의 부분은 EuRoC와 비슷한 Format을 가지고 있다. 따라서 따로 다루지는 않을 것입니다.

 

 

이렇게 ORB-SLAM과 SLAM에 사용되는 Dataset에 대해 간단하게 알아보았습니다.

이번 포스트는 여기까지 진행하도록 하고 앞으로 SLAM과 관련된 부분은 시리즈 형식으로 다뤄보도록 하겠습니다.

 

 

반응형

댓글