SLAM/S-PTAM 이론 설명 및 코드 리뷰
-
-
S-PTAM 리뷰 - 이론(5) : Local Bundle Adjustment 2SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 7. 15:15
그림과 수식이 많아 제 필기로 대체하겠습니다! Bundle Adjustment는 최적화 이론과 선형대수를 공부해볼 수 있는 좋은 기회라고 생각합니다. 다행인 점은 이 비선형 최적화 과정을 수행해 주는 g2o라는 라이브러리가 존재한다는 사실입니다. g2o에 각 frame의 pose에 대한 initial estimate와 3D-2D point correspondency를 입력해 주면 이 데이터로 error function을 생성하고(robust cost function도 선택 가능) 빠르게 최적화를 수행해 줍니다. 다음 글에서는 bundle adjustment가 S-PTAM 코드에서 어디에 있는지, 어떻게 돌아가는지 살펴보도록 하겠습니다.
-
S-PTAM 리뷰 - 이론(4) : Local Bundle Adjustment 1SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 6. 09:30
다음과 같은 자료를 참조하였습니다. https://www.ipb.uni-bonn.de/photogrammetry-i-ii/ (Cyrill Stachniss 교수님의 Mobile Sensing and Robotics 강의자료) http://rpg.ifi.uzh.ch/teaching.html (Davide Scaramuzza 교수님의 Vision Algorithms for Mobile Robotics 강의자료) 지난 글까지는 이론과 코드를 통해 S-PTAM의 visual odometry pipeline에 대해 알아보았습니다. Visual odometry란 카메라가 촬영한 이미지들을 사용해 카메라의 위치(=궤적, odometry)를 복원해 내는 기법을 말합니다. S-PTAM에서는 outlier detector..
-
S-PTAM 리뷰 - 코드(2) : Visual Odometry 2SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 5. 17:26
지난 글에서는 S-PTAM의 visual odometry에서 initialization 부분에 대해 알아보았습니다. 요약하자면 최초의 stereo frame으로부터 최초의 MapPoint와 Measurement들이 생성되고, 이 frame은 최초의 keyframe으로 선정되었습니다. 이제 두번째 프레임부터는 가지고 있는 MapPoint들로부터 3D-2D point correspondency를 찾아 6D pose 계산에 활용하고, 특정 조건(이 글 참조)을 만족하면 keyframe으로 지정하는 단계를 반복합니다. Initialization단계는 sptam.py의 SPTAM 클래스의 initialize 함수를 통해 수행되었습니다. sptam.py의 main 함수에서 여기까지의 코드는 다음과 같습니다. if ..
-
S-PTAM 설치 및 구동 가이드SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 2. 15:05
이전 글에서 언급했듯, S-PTAM 구동을 위해서는 pangolin의 Python 버전과 g2o의 Python 버전이 필요합니다. S-PTAM 파일은 제가 원본에 기능 추가/삭제/수정을 위해 원본에서 fork한 repositiory에 존재하고, pangolin과 g2o는 소스 코드를 내려받아 빌드해야 합니다. 가이드 시작 전, 제 구동 환경을 나열해 보자면 : AMD Ryzen 7 4700U, 16g 램 VMWare Workstation 16 Player에서 돌아가는 Pop!_OS 20.04(우분투 배포판 중 하나입니다) Linux 커널 5.11.0 과 같습니다. 라이브러리 설치와 구동을 위해 리눅스 운영체제가 필요합니다. ※ 구동 환경에 따라 저에게 없었던 오류가 나타날 수 있습니다. 그 때는 터미널의..
-
S-PTAM 리뷰 - 코드(1) : Visual Odometry 1SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 2. 11:11
S-PTAM에서 사용하는, 스테레오 카메라를 이용한 visual odometry pipeline에 대해 지난 3개의 포스트에서 알아보았습니다. 이번 포스트에서는 S-PTAM 코드에서 visual odometry에 관련된 부분을 살펴보며, 그러한 논리적 흐름과 수학적 방법론들이 코드로는 어떻게 구현되어 있는지 구경해 보도록 하겠습니다. 일단 이 글에서 설명한 대로 코드를 내려받았다고 가정합니다. 이번 포스트와 함께 열어놓고 참조하며 읽는 것이 도움이 될 것이라고 생각합니다. 처음에는 코드를 line-by-line으로 설명해 볼까 시도도 했는데, 함수 안에 함수 안에 함수가 있는 식으로 복잡한 코드인데다 데이터를 여기저기서 상호참조해 오기 때문에 흐름을 따라가기가 쉽지 않습니다. 따라서 모든 함수를 설명하지..
-
S-PTAM 리뷰 - 코드(0) : 주요 파일, 클래스 및 함수SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 2. 10:12
시작하기 앞서, 이 S-PTAM 코드는 제가 리뷰와 기능 추가를 위해 주석을 달고, 함수들의 이름을 바꾸고 몇몇 부분을 삭제/수정/추가한 버전임을 알려 드립니다. 원본 코드는 S-PTAM 및 코드 소개에 있는 것처럼 https://github.com/uoip/stereo_ptam입니다. 그리고 저도 계속 revision을 하고 있기 때문에 코드가 계속 바뀔 수도 있습니다. 큰 틀의 변화가 있을 시에는 관련된 글들을 수정하도록 하겠습니다. 이번 포스트에서는 본격적인 코드 리뷰에 들어가기 전 주요 파일과 클래스 및 함수들의 역할을 정리해 두는 시간을 가지려고 합니다. SLAM 시스템은 기본적으로 복잡한 편에 속하는 알고리즘이고, 각종 정보를 상호참조하며 작업을 수행하는 것이 중요합니다. 앞으로 코드 리뷰를 ..
-
S-PTAM 리뷰 - 이론(3) : Visual Odometry 3SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 7. 2. 10:03
S-PTAM의 visual odometry pipeline에 대한 디테일한 코드 리뷰에 들어가기 전 마지막 이론편입니다. 이론편 (1)과 (2)에서는 visual odometry의 개념과 수학적인 아이디어들에 대해 알아보았고, 이번 포스트에서는 구체적으로 어떤 데이터를 어떻게 얻고 어떻게 활용해 visual odometry를 수행하는지에 대해 알아보겠습니다. S-PTAM 소개글에서 언급했듯, 이 SLAM 방법론은 스테레오 카메라를 사용합니다. 스테레오 카메라란 동일한 스펙의 카메라 2대가 수평 거리를 두고 배치되어 있는 카메라로, 사람의 눈과 비슷한 시스템이라고 볼 수 있습니다. 카메라가 두 대이므로, 스테레오 카메라의 한 frame이란 왼쪽/오른쪽 카메라의 이미지 2장을 말합니다. 또한 예제로 돌려볼 ..