이 책은 로봇공학, 웨어러블 기기, 자율주행차 등 다양한 애플리케이션에 기본적이고 필수적인 구성 요소인 Visual SLAM(Visual Simultaneous Localization and Mapping) 기술을 체계적이고 포괄적으로 소개한다. 기본적인 수학적 배경 지식부터 시작하여 독자들에게 기능 일치, 광학 흐름 및 번들 조정과 같은 전통적인 컴퓨터 비전 주제를 소개하며, 소스 코드를 포함하여 독자들이 실용적인 기술을 이해하고 실습할 수 있도록 했다. 이 책은 Visual SLAM 기술의 기본 개념과 최신 발전을 모두 다루고 있으며, Visual SLAM에 관심이 있는 독자라면 유용한 참고 자료가 될 것이다.
1.2 이 책을 사용하는 방법
1.2.1 구성 방법
이 책의 제목은 “ 자율주행을 위한 비주얼 슬램: 이론에서 실습까지”이다. 이름에서 알 수 있듯이, 우리는 학교에서 강의하는 것처럼 책의 기본 단위로 “강의”를 사용한다. 각 강의는 “이론 부분”과 “실습 부분”으로 이루어져 있으며 일반적으로 이론 부분은 전면에, 실습 부분은 뒤에 나온다. 이론 부분에서 우리는 알고리즘을 이해하는데 필요한 수학 지식을 소개하며, 대부분의 경우 수학 교과서와 같은 “정의-정리-추론”이 아닌 읽기가 더 쉬운 서술적인 방식으로 구성된다. 실습 부분은 주로 프로그래밍 구현이며, 프로그램의 다양한 부분의 의미와 실험 결과에 대해 설명한다. 제목에 “실습”이라는 단어가 있는 장을 보면 컴퓨터를 켜고 코드 작성하는 것을 즐기면 된다.
다음은 각 장의 주요 내용이다. 이 책은 두 부분으로 나눌 수 있다. 첫 번째 부분은 주로 기본 수학 지식에 중점을 둔다.
· 제1장은 이 책의 기본 정보를 소개한다.
· 제2장은 SLAM 시스템의 개요로, SLAM 시스템이 어떤 모듈로 구성되어 있는지, 그리고 각 모듈이 어떤 기능을 가지고 어떻게 동작하는지에 대해 설명한다. 실습 부분에서는 리눅스 환경에서의 기본 C++프로그래밍과 통합개발환경(Integrated Development Environment, IDE)의 사용에 대해 설명한다.
· 제3장에서는 회전 행렬, 오일러 각, 쿼터니언에 대한 내용과 3차원의 강체 운동에 대해 설명하며, Eigen 라이브러리를 사용해서 실습한다.
· 제4장에서는 리 군과 리 대수를 소개한다. 이것에 대해 들어보지 못했더라도 상관없으며 리 대수의 정의와 사용 방법을 배우고 Sophus를 통해 조작한다.
· 제5장에서는 핀홀 카메라 모델과 컴퓨터에서 이미지의 표현을 소개한다. OpenCV를 사용하여 카메라의 내부 및 외부 매개변수를 계산하며, PCL(Point Cloud Library)을 통해 깊이 정보를 사용하여 포인트 클라우드를 생성한다.
· 제6장에서는 상태 추정 이론의 기초와 최소제곱법 및 경사하강법을 포함한 비선형 최적화(예: Gauss-Newton 및 Levenburg-Marquardt 방법)에 대해 설명한다. Ceres 및 g2o 라이브러리를 사용
하여 커브 피팅을 수행하는 실습을 하게 된다.
여기까지 우리가 SLAM에서 사용하는 모든 수학 지식이며 이를 바탕으로 7장부터는 Visual SLAM의 개별 모듈의 알고리즘과 작동 방식을 설명한다.
· 제7장은 현재 Visual Odometry(VO)의 주류인 특징점 기반의 VO에 관한 것이다. 이 장은 특징점 추출 및 매칭, 에피폴라 기하 구속조건 계산, Perspective-n-Point(PnP) 알고리즘, Iterative Closest Point(ICP) 알고리즘, 번들 조정(Bundle Adjustment, 이하 BA) 알고리즘 등을 포함한다. 실제로 이러한 방법을 사용하여 두 이미지 간의 움직임을 추정하는데 OpenCV 함수를 호출하거나 Ceres나 g2o 라이브러리를 사용하여 최적화 문제를 구성한다.
· 제8장은 다이렉트(또는 intensity 기반) VO에 관한 것이다. Optical Flow(옵티컬 플로우, 광학 흐름) 원리와 Direct Method(다이렉트 방법 또는 직접 방법)을 배우게 될 것이며 실습을 통해 간단한 광학 흐름과 다이렉트 방법을 이용한 모션 추정을 구현한다.
· 제9장은 BA에 대한 심층적인 논의를 중심으로 백엔드 최적화에 대해 설명하며, 그 희소한 구조를 사용하여 솔루션 프로세스를 가속화하는 방법에 대해 설명한다. Ceres와 g2o로 각각 BA 프로그램을 작성한다.
· 제10장에서는 백엔드 최적화에서 Pose Graph(포즈 그래프)를 설명한다. 포즈 그래프는 BA를 위해 키 프레임 간의 제약 조건들을 표현하는 좀 더 집약된 형태이다. 포즈 그래프를 최적화하기 위해 g2o를 사용하게 될 것이다.
· 제11장은 주로 Bag-of-Word(BoW)를 기반으로 하는 Loop Closure detection(루프 백 감지)를 소개한다. DBoW3를 사용하여 이미지에서 사전을 훈련하고 비디오에서 루프를 감지한다.
· 제12장은 맵 빌딩에 관해 다룰 것이다. 단안으로 픽셀의 깊이 추정(또한 이것이 얼마나 신뢰할 수 없는지)을 수행하는 방법에 대해 설명한 다음 RGB-D의 고밀도 맵 빌딩 프로세스에 대해 설명한다. 에피폴라 선 검색 및 패치 매칭 프로그램을 작성하여 단안 이미지에서 깊이 추정을 한 다음 RGB-D 데이터에서 포인트클라우드 맵과 팔각 트리맵을 만들어 보게 될 것이다.
· 제13장은 스테레오 VO 실습을 위한 장이며, 이전에 배운 지식을 결합하여 기본 기능을 구현하는 스테레오 카메라 기반 VO의 프레임워크를 구축할 것이다. 이 과정에서 최적화의 필요성, 맵 포인트 관리, 키 프레임 선택 등과 같은 몇 가지 문제를 해결한다. Kitti 데이터셋에서 성능을 테스트하고 몇 가지 개선 사항에 대해 설명한다.
· 제14장에서는 현재 오픈소스 SLAM 솔루션과 향후 개발 방향에 대해 설명한다.
---본문 중에서