SLAM
-
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장을 말합니다. 또한 예제로 돌려볼 ..
-
S-PTAM 리뷰 - 이론(2) : Visual Odometry 2SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 6. 29. 16:53
다음과 같은 자료를 참조하였습니다. https://www.ipb.uni-bonn.de/msr2-2020/ (Cyrill Stachniss 교수님의 Mobile Sensing and Robotics 강의자료) http://rpg.ifi.uzh.ch/teaching.html (Davide Scaramuzza 교수님의 Vision Algorithms for Mobile Robotics 강의자료) 지난 글에서는 visual odometry 과정의 pose estimation($ R, T $를 구하는 것)에 비선형 최적화를 사용할 수 있다는 것을 알아보았습니다. 이번 포스트에서는 실제로 그 비선형 최적화를 수행하는 과정에 대해 알아보겠습니다. ※ 이후의 설명을 이해하려면 컴퓨터 비전과 projective geom..
-
S-PTAM 리뷰 - 이론(1) : Visual Odometry 1SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 6. 28. 18:32
다음과 같은 자료를 참조하였습니다. https://www.ipb.uni-bonn.de/msr2-2020/ (Cyrill Stachniss 교수님의 Mobile Sensing and Robotics 강의자료) http://rpg.ifi.uzh.ch/teaching.html (Davide Scaramuzza 교수님의 Vision Algorithms for Mobile Robotics 강의자료) 물체의 이동 거리와 방향을 연속적으로 추정하는 것, 또는 그 데이터를 odometry라고 부릅니다. 자동차 등 평면을 움직이는 로봇을 예로 들자면, 로봇의 위치와 방향(Pose)는 $ (x, y, \theta) $로 나타낼 수 있습니다. Odometry는 여기에 시간의 개념을 추가합니다. 즉 0초(처음)에서의 위치는 ..
-
S-PTAM 및 코드 소개SLAM/S-PTAM 이론 설명 및 코드 리뷰 2021. 6. 28. 15:18
본 리뷰 시리즈에서 파헤치고자 하는 SLAM 알고리즘의 이름은 S-PTAM(Stereo Parallel Tracking And Mapping)이며, 코드 리뷰를 위해 사용할 구현체는 S-PTAM의 Python 버전입니다. S-PTAM을 선택한 이유로는 스테레오 카메라를 사용한 그래프 기반 SLAM이라는, 표준적이라고 할 수 있는 구현 방법을 채택했다는 점을 들겠습니다. Python버전을 선택한 이유는 그래프 기반 SLAM의 workflow를 좀 더 편하게 이해하기 위해서입니다. SLAM 알고리즘에서 최상의 성능을 얻기 위해서는 C++을 사용해야 할 것입니다. S-PTAM 논문과 Python 구현체의 출처는 다음과 같습니다. https://ieeexplore.ieee.org/document/7353546 ..
-
그래프 기반 SLAM의 동작 방식SLAM/SLAM 전반 2021. 6. 27. 21:59
이 글에서는 그래프 기반 SLAM의 전반적인 작동 방식을 설명합니다. 수식이 포함된 보다 디테일하고 엄밀한 설명은 코드 리뷰와 함께 진행할 예정입니다. 다음과 같은 자료를 참조하였습니다. https://www.youtube.com/watch?v=saVZtgPyyJQ (MATLAB YouTube 채널 - Understanding SLAM Using Pose Graph Optimization) https://www.ipb.uni-bonn.de/msr2-2020/ (Cyrill Stachniss 교수님의 Mobile Sensing and Robotics 강의자료) 먼저 여기에서 말하는 그래프가 무엇인지 알고 가 보기로 합시다. 일반적으로 그래프는 Node(Vertex)와 Edge로 구성된 자료 구조를 말합니다..
-
SLAM 구현 기법에는 어떤 것들이 있고, 각각의 특징은 무엇일까요?SLAM/SLAM 전반 2021. 6. 27. 16:35
SLAM 알고리즘의 종류를 분류하려면 사용하는 센서 기준, 2D/3D 기준, 활용 분야 기준 등등 다양한 기준이 있겠지만, 가장 근본적이라고 생각되는 기준은 구현에 사용된 수학적 기법입니다. 일단 SLAM의 workflow와 해결해야 할 문제들에 대해 알아보도록 하겠습니다. Agent(로봇 또는 카메라를 들고 있는 사람 등)가 이동하면서 일정 시간 간격으로 공간을 측정하고(LiDAR, 카메라, 초음파 센서 등), 그 측정 간격 사이의 이동 정보를 추정하고(=Pose estimation), 이를 통해 측정된 데이터를 적절하게 정렬해 지도를 만드는 과정이 일반적인 SLAM 알고리즘의 흐름입니다. 2D/3D 또는 센서의 종류에 따라 측정되고 추정되는 정보의 양과 형태에는 차이가 있겠지만, 기본적인 흐름은 동일..
-
왜 SLAM 공부를 시작했나요?SLAM/SLAM 전반 2021. 6. 27. 16:20
저번 글에도 언급했지만 저는 작년 상반기까지 파이썬이 뭔지도 잘 몰랐습니다. 대학 4년 다닐 때도 대강 학과 공부만 하면서 '나는 컴퓨터랑 잘 안맞아 코딩공부는 나중에 필요하면 해야지' 이런 생각 하면서 앞으로 뭐 하면서 살지, 어떤 걸 내 스킬로 만들지에 대한 생각도 딱히 없었던 것 같습니다. 그래도 뭐 전문성을 가지긴 해야지 하면서 (학과 기계과 다녔으니까) 기계과 대학원에 지원해서 붙긴 했는데, 막상 여기 가서 뭘 연구할지 내 실력에서 뭘 발전시킬지... 이런 생각도 딱히 없었던 채로 입학부터 했습니다. 그러다가 정말 운좋게... 쿼드콥터(드론) 사용하는 연구를 하고 있던 사수 형을 만나게 되어서 그 연구를 돕고, 또 1학기에 우연히 듣게 된 컴퓨터 비전 과목에 흥미를 가지게 되면서 내가 아는게 아..