SLAM이라는 분야가 워낙 여러 연구분야를 다 갖다붙인 합성물같은 특성을 가지다보니 단일 연구분야로서는 꽤 광범위한 배경지식을 요구한다. 그래서 SPARK Lab에서 공개한 SLAM 라이브러리인 Kimera를 처음 보았을 때 SLAM 라이브러리가 가질 수 있는 가장 알맞은 이름이라며 감탄했던 기억이 있다. 가능한 모든 것을 조합해 어떻게든 작동하게 만드는 모습이 “안되면 되게 하라” 라는 공학정신을 그대로 보여주는 듯 한데, 이런 점이 SLAM이라는 분야의 매력이 아닌가 생각한다.
카메라 센서의 가격적인 면이나 접근성의 경쟁력 덕분에 여러 고기능 센서들의 등장과 유행에도 불구하고 Visual SLAM은 확고한 파이를 유지하고 있는데 (사실 정확히는 pure Visual SLAM보다는 Visual Inertial SLAM 쪽이 대세이긴 하지만), Visual SLAM의 경우 컴퓨터 비전부터 카메라 기하학, 선형대수와 최적화 이론 등 여러 파트에 대한 기본적인 이해를 필요로 하고, 입문자의 입장에서는 어떤 요소가 필요하고 어느 깊이의 이해가 필요한지 갈피를 잡기가 쉽지 않다.
나 또한 회사에서 Visual SLAM 기술 개발을 계속 맡고 있고 논문도 썼지만서도 광활한 배경 이론의 필드를 헤매며 쌓아올린 지식이 여전히 빈공간이 많은 모래성 같다는 찝찝함을 지우기 힘들었다. 그러던 와중 오로지 Visual SLAM이라는 주제로 한정해 그 안에서 활용되는 모든 개념을 딱 그만큼의 범위로 집약해놓은 좋은 요약서를 발견하게 되어 한 번 이론적인 토대를 재점검하고 재구조화하는 시간을 가지기로 했다. 동시에 같은 분야를 공부하는 분들께도 참고 자료로 활용이 되었으면 하는 마음에 혼자 읽고 이해하는데 그치지 않고 열심히 포스팅을 해보려고 한다. 얼마나 걸릴지 정확히는 모르겠지만, 꾸준히 업로드 하다보면 언젠가 마지막 장을 넘길거라 생각하면서 첫 포스트 시작!
아래는 Xiang Gao와 Tao Zhang의 <Introduction to Visual SLAM>을 읽고 번역정리+추가적인 코멘트를 단 내용이다.
말은 가능하면 간소화하고, 이론적으로 더 참고할만한 부분은 추가적인 코멘트를 넣었음.
저자에 의해 모든 자료가 무료 배포되었음. 아래 링크 참고
📘 영어판 도서 파일: https://github.com/gaoxiang12/slambook-en
📂 practice 코드: https://github.com/gaoxiang12/slambook2
일단, 위 설명에서 나타나듯이 SLAM은 기본적으로 localization과 map building 이라는 두 가지 문제를 동시에 푸는 것을 목표로 한다. 즉, 센서 자신의 위치를 추정하면서 동시에 자신을 둘러싼 환경에 대한 모델을 추정하는 것 까지 해결해야 하는 것이다. 이를 위해서는 센서 데이터에 대한 상당한 지식이 필요하다. 여러 다른 센서는 그들만의 특정한 형태로 외부세계를 관측하는데, 이를 활용하기 위해서는 각기 다른 종류의 관측치들을 해석하는 각각의 접근법을 알아야만 한다. 여기에 더해 아무런 사전정보도 주어지지 않는다는 기본 가정과 실시간성을 만족해야한다는 점이 SLAM의 까다로운 부분이다. visual SLAM의 경우 우리는 연속적인 이미지 세트(=비디오)를 가지고 경로와 맵을 추정해나가야한다.
말만 들으면 어느정도 직관적인 문제로 보이기도 한다. 우리가 낯선 환경에 입장하게 되었을 때 하는 게 똑같은 일 아닌가? 문제는, 우리가 프로그램을 작성해서 컴퓨터가 그 똑같은 일을 하게 할 수 있냐는 것이다. 컴퓨터 비전이 막 탄생했을 때, 사람들은 언젠가는 컴퓨터가 인간처럼 행동할거라- 세상을 보고, 관찰하고, 주변 환경을 이해하는- 생각했고, 처음에는 이것이 그리 불가능하거나 어려운 목표처럼 여겨지지 않았다. 하지만 연구가 진행되면 될수록 드러나는 사실은 컴퓨터가 인간의 사고를 흉내내는 것은 절대 쉬운 일이 아니라는 것이었다. 꽃, 나무, 벌레, 새, 동물들은 컴퓨터에서는 너무나 다르게 기록되었다: 그것들은 컴퓨터 안에서는 그냥 숫자로 이루어진 행렬일 뿐이었다. 컴퓨터가 이미지의 내용을 이해하도록 만드는 것은 우리 사람이 그 숫자 덩어리를 이해하는 것 만큼이나 어려운 일이었다. 하지만 몇십 년에 걸친 고군분투 끝에 연구자들은 드디어 성공의 실마리를 잡기 시작했다. 인공지능(AI)과 머신러닝(ML) 기술에 힘입어 컴퓨터가 물체, 얼굴, 목소리, 텍스트를 조금씩 인식할 수 있게 된 것이다 (물론 우리 사람의 사고과정과는 여전히 다르지만).
한편으론, 거의 30년에 달하는 발전 과정을 거치며 SLAM에서도 카메라가 자신의 움직임을 파악하고 현재 위치를 알 수 있게 되기 시작했다. 연구자들은 성공적으로 여러 다양한 실시간 SLAM 시스템을 설계하였고, 그들 중 일부는 심지어 실시간 내에 3차원 공간 재구성까지도 수행한다. 더 좋은 소식은 근 몇년 새 SLAM에 관련된 적용 분야가 엄청나게 넓어졌다는 점이다. 로봇 청소기, 자율주행차, 무인항공기(UAVs), 가상현실(VR), 증강현실(AR) 등등.. SLAM은 현재에 와서 너무나 중요한 연구분야가 되었다.
21세기 이후 visual SLAM은 이론과 실제적인 부분 모두에서 상당한 변화와 혁신을 겪었으며 점차 실험실에서 실제 세계로 이동하고 있다. 하지만 동시에 SLAM 관련 기초 자료는 여전히 매우 부족해 SLAM의 매력에 빠져든 입문자들이 마땅한 가이드가 없어 고생하는 안타까운 광경을 많이 보아왔다. SLAM의 이론적 프레임워크는 많은 시간을 지나며 이제 완전히 자리를 잡았지만, 전체적인 SLAM 시스템을 구현하는 것은 여전히 매우 어렵고, 높은 수준의 전문 지식을 필요로 한다. 이 분야를 처음 접하는 연구자들은 상당한 양의 산재된 지식을 이 책, 저 책 뒤적이며 조각맞추기를 하듯이 공부하고, 정말 필요한 핵심 내용에 접근하기 위해 멀리서부터 돌아오는 수고를 하는 경우가 많다. 이 책은 visual SLAM에서 쓰이는 모든 기술을 체계적으로 설명한다.
SLAM의 이론적 배경과 시스템의 구조, 주류로 쓰이는 다양한 모듈들에 대한 설명을 제공하며, 동시에 이 모든 것에 대한 실습 파트를 구성해놓았다. 이 책에서 소개하는 모든 필수 알고리즘은 독자들이 직접 실험해보면서 보다 깊이 있는 이해를 할 수 있도록 바로 돌아가는 코드와 함께 제공된다. Visual SLAM은 결국 실제 응용을 위한 기술이므로 수학 이론을 구경하고 이해하는 것은 아름다울 순 있지만 결국 이것을 코드로 변환할 수 없다면 모든 이론은 뜬구름에 불과하다. 우리는 실습이 진정한 지식(그리고 진정한 사랑)을 가져온다고 믿는다! 알고리즘으로 양 손을 더럽힌 후에야 당신은 진정으로 SLAM을 이해했고 SLAM과 사랑에 빠졌다고 주장할 수 있을 것이다. SLAM의 긴 역사에서 등장한 모든 알고리즘과 그 변형에 대한 완전한 소개는 매우 어려울 뿐 아니라 사실 불필요하다. 우리는 SLAM 트리의 줄기를 보여주되 복잡하고 이상한 모양의 쓸데없는 잎은 생략하는 것이 효율적이라고 생각한다. 이 책의 목표는 SLAM 입문자가 자격을 갖춘 연구원 또는 개발자로 빠르게 성장할 수 있도록 만들어주는 것이다. 그렇지만, 이미 경험이 풍부한 SLAM 연구자라도 이 책은 익숙하지 않은 영역을 조명하고 새로운 통찰력을 제공하는 역할을 할 수 있을 것이다.
이 책은 마치 강의와 같이 구성되어있다. 각 lecture는 논리적 순서에 따라 하나의 특정 주제를 설명하며, 각 장은 이론 파트와 실습 파트로 이루어져있다. 이론파트에서는 알고리즘을 이해하기 위한 필수 수학 개념을 대부분의 수학교재와 같은 definition / theorem / inference 형식이 아닌 서술형식으로 따라가기 쉽게 소개하고, 실습 파트에서는 코드 제공과 함께 각 부분의 의미를 설명하고 여러 실험 결과를 논의해 볼 것이다. 실습 이라는 단어가 제목에 보인다면, 바로 컴퓨터를 켜고 함께 프로그래밍을 해 볼 것을 추천한다.
책은 크게 두 파트로 나뉜다.
마지막으로, 지금 위의 얘기가 무슨 말인지 전혀 이해하지 못하겠다면.. 축하한다! 이 책은 당신을 위한 것이다.
이 책은 SLAM을 배우고자 하는 학생들과 연구자들을 위한 책으로, 독자들은 어느 정도의 특정 전제조건은 만족하여야 한다. 우리는 다음의 지식은 독자들이 이미 갖추고 있을 것으로 예상하고 내용을 전개한다: