-
SLAM 공부를 위한 선행지식과, 공부를 통해 배울 수 있는 것은?SLAM/SLAM 전반 2021. 6. 27. 15:06
이전 글에서 언급했듯, SLAM의 구현 기법은 꽤 다양하기 때문에 각각의 기법에 따라 공부와 이해에 필요한 선행 지식도 조금씩 다릅니다. 일단 제가 리뷰 대상으로 잡은, 스테레오 카메라를 이용한 그래프 기반 SLAM의 경우에는 대략 다음과 같은 지식이 필요했습니다.
기술적인 부분(프로그래밍 관련):
- C++ 혹은 Python 프로그래밍 경험
- 리눅스 기반 시스템 사용 경험
- 멀티스레딩 또는 멀티프로세싱 사용/구현 경험
- (내 것이 아닌)코드의 흐름을 따라가며 논리의 흐름을 해석할 수 있는 능력
컴퓨터 비전 및 영상처리 관련:
- 영상처리에 관한 전반적인 지식
- OpenCV등 영상처리용 라이브러리 사용 경험(있는 함수 갖다 쓰는 것뿐이 아닌, 용도와 원리 이해 필요)
- Projective geometry에 관한 지식(카메라 이미지와 실제 3차원 세상 사이의 관계)
- Multiple view geometry에 관한 지식(다양한 위치에서 찍은 카메라 이미지 간의 기하학적 관계)
- Image feature에 관한 지식(Image feature가 무엇이고 어디에 어떻게 쓰이는지)
- 스테레오 카메라와 depth 및 point cloud에 관한 지식
수학 관련:
- Rigid body motion에 관한 지식(회전/이동 행렬 등)
- 행렬 연산과 선형대수에 관한 전반적인 지식
- 최적화 기법의 이해(뉴턴법, 뉴턴-랩슨법, gradient descent 등)
- 확률론에 관한 전반적인 지식
좀 많게 느껴지실 수도 있고, 저도 기본적으로 빠릿하거나 머리가 엄청 좋지는 않아서 이해하는 데 고생한 부분도 여기저기 있었습니다. 그런데 저도 저걸 다 알고 SLAM 공부를 시작한 게 아니고, 다 아시는 분이라고 할지라도 그때그때 찾아봐야 할 일이 많을 거라고 생각됩니다. 일단 공부를 시작해 보고, 어느 한 부분에 대한 지식이 더 필요하다고 생각되면 그때 여러 가지 자료를 참조하며 알아가는 것도 좋은 것 같습니다.
사실 저는 작년 상반기까지 파이썬이 뭔지도 잘 몰랐습니다. 뭐 요즘 많이 쓰는 프로그래밍 언어라는데...
영상처리 관련 지식은 당연히 없었고, 수학 지식은 있었지만 많이 까먹은 상태였고, 사실 별 생각도 없었던 것 같습니다.
제가 할 수 있었던 걸 보면, 이 글 보시는 분도 충분히 배워갈 수 있습니다. 저거 다 디테일하게 100프로 알고 있을 필요도 없습니다.
하지만 수학 관련 지식 등 핵심적이고 중요하거나 많이 쓰이는 부분은 어떤 자료를 쓰던 잘 공부해 놓는 게 좋습니다. 선형대수랑 최적화 기법, 확률론 등은 SLAM 말고도 많은 분야에 쓰이니까... Neural Net 같은 거 공부할 때도 도움 많이 됩니다.
SLAM을 잘 구현해 놓은 라이브러리나 프로그램은 여기저기 꽤 있습니다. 당연히 SLAM 말고 다른 분야도 그렇습니다. 하지만 누가 만들어놓은 거 어떻게 돌아가는지 모른 채 써보기만 한다면 거기서 끝이고, 새로운 걸 만들거나 추가하거나 하는 건 절대 불가능하겠죠?? 다운받아서 돌려보고 화면에 띄워놓으면 당장 보기는 좋겠지만, 그래도 어렵게, 시간 쓰면서 그 원리를 공부해 둬야 발전의 여지라도 있을 거 같습니다. 모든 코드를 바닥까지 뜯어볼 필요는 없겠지만, 자기가 공부하고자 하는 분야의 물건은 코드 파훼를 진행하는 동안 꽤 많은 것을 깨달을 수 있습니다.
SLAM 공부를 통해 배울 수 있는 것은 특정한 하나의 무언가라기보다는, 저러한 여러 가지 지식을 어떻게 합쳐서 목표하는 시스템을 만들어내는 것에 대한 노하우라고 생각합니다. 파이썬 처음 배울 때 클래스에 관해 배우지만 실제로 다른 사람 코드 구경하면서 클래스를 어떻게 쓰는지 보기 전에는 클래스를 왜 쓰는지 어디다 쓰는지 잘 안 와닿죠. SLAM은 여러 가지 sub-component가 합쳐진 하나의 시스템이기 때문에 이걸 바닥부터 공부한다면 꽤 많은 노하우를 얻을 수 있습니다. 저는 다 알지 못하는 상태에서 SLAM을 공부하면서 멀티스레딩의 활용법, 파이썬 매직 메소드(Magic method)의 활용법, 최적화 기법을 원하는 문제에 응용하는 방법, Projective geometry와 rigid body motion에 대한 더 디테일한 지식 등 여러 가지를 더 잘 알게 되었던 것 같습니다. 새로운 기능을 생각해 냈다면 그걸 기존 시스템의 어디에 어떻게 끼워넣을지, 그런 것도 자연스럽게 배우게 됐습니다.
'SLAM > SLAM 전반' 카테고리의 다른 글
그래프 기반 SLAM의 동작 방식 (0) 2021.06.27 SLAM 구현 기법에는 어떤 것들이 있고, 각각의 특징은 무엇일까요? (0) 2021.06.27 왜 SLAM 공부를 시작했나요? (0) 2021.06.27 SLAM이란 무엇인가요? (0) 2021.06.27