최근에 ORB SLAM 논문을 읽고 SLAM의 지식이
부족했던 나는 코드를 통해서 이해도를 높혀보고자 개발자 깃헙(github)에 가서
소스를 다운받고 실행을 시켜 볼려고 했다.
생각보다 순탄하지 않아서 나중에 소스를 다시 다운받을 때를 대비하여 정리해보려고한다.
이후 슬램에 대해서 연구하면서 코드 분석과 내용정리를 진행 해보려고한다.
첫째로 ORB SLAM 은 두가지 버전이 있는데
버전 1은 단안의 렌즈를 사용하여(스테레오나 , Depth정보 없이) ORB라는 특징점과 기술자를 통해
맵을 생성하고 Localization을 한다.
(ORB(Oriented FAST and rotated BRIEF): FAST(코너 검출) 특징점 검출 + BRIEF 이진 기술자 )
맵을 생성하는 행동을 Mapping이라고 하고
이맵에서 자신의 위치를 인지하는 행위를 Localization이라고 한다.
(SLAM:Simultaneous localization and mapping)
ORB SLAM2 는 stereo와 RGBD(depth) 카메라를 통해서 구현한 내용이다
크게 깊이정보를 갖고 안갖고라고 생각하면 된다.
(사실 아직 2논문은 읽어보지는 않았다.. 그치만 다운받은 소스는 2여서 크게 깊이로 글쓴이는 구분한다.)
간단하게 정리는 이쯤해서 접어두고
이제 설치하는 과정으로 넘어가보자
저자의 환경은 리눅스(우분투) 16.04 LTS를 기준으로 하였다.
추후 윈도우에서도 하는 방법에 대해서 글을 쓸예정이다.
(그놈의 추후..)
자~! 개발자의 깃헙으로 들어가보자
https://github.com/raulmur/ORB_SLAM2
논문은 버전 1을 읽고 2를 설치하는 이유는
버전1은 ROS(Robot Operating System)에서만 구동되기 때문에
버전 2를 선택한 이유이다.
리눅스 이기 때문에
터미널 창에서 다운 받는법과 그냥 사이트에 들어가서 다운로드 눌르는 방법 두가지가 있다
터미널 설치: $ git clone https://github.com/raulmur/ORB_SLAM2.git
(만약 git 명령어가 없다면: $ sudo apt install git-all )
자설치한 폴더로 이동해봅시다
터미널을 켜고(ctrl + alt + 't')
$ cd ORB_SLAM2 을 쳐줍니다.
(cd: change directory)
(물론 설치된곳까지 저 cd명령어로 이동해서 가셔야한다 이부분이 잘 모르신다면 댓글을 통해 질문해주시면 감사하겠습니다.)
이제 명령어 파티가 열릴것이니 천천히 복붙을 해서 치면된다
컨트롤 + c를하고 터미널에서 우측마우스를 클릭하고 Paste를 누르면된다
$ sudo apt-get install libglew-dev
$ git clone http://github.com/ktossell/libuvc
$ cd libuvc
$ mkdir build
$ cd build
(mkdir: make directory)
$ cmake ..
$ make && sudo make install
이제 ORB_SLAM2폴더로 돌아온다
$ cd .. (두번)
$ cd Thirdparty/
$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake ..
$ make -j8
$ sudo make install
ORB_SLAM2폴더로 다시 돌아온다
$ cd .. (세번)
$ chmod +x build.sh
$ sh build.sh
이제 예제를 돌려볼 이미지 시퀀스를 다운받는다
http://vision.in.tum.de/data/datasets/rgbd-dataset/download
monocular(단안) stereo,RGBD 등 다양한 예제가 있지만
단안으로 예제를 돌려보도록하겠다.
다른 예제를 사용하고 싶으신 분들은 다른 방법으로 깃허브에 자세히 나와있으니
응용해서 따라하면 된다.
(저자는 맨 위에 저 링크에서 파일을 사용했다. fr1/xyz = (rgbd_dataset_freiburg1_xyz.tgz ) )
폴더를 관리하기 편하게
ORB_SLAM2/Examples/Monocular
폴더에 압축을 풀었다.
이제 실행을 해보자~!
ORB_SLAM2폴더에서
$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Examples/Monocular/rgbd_dataset_freiburg1_xyz/
(한줄입니다...헷갈릴까봐 사진첨부..ㅠ)
엔터를 누르면!!!!!!!!!!!!!!!!!!!!!
실행 되는 모습을 볼 수있다.
이미지 시퀀스를 가져와 실행하는 부분이기 때문에 크게 돌아가는 감만 잡아보길 바란다
우리가 실행한 명령어를 분석해보자면
크게 4가지로 구분할 수 있는데
./Examples/Monocular/mono_tum
Vocabulary/ORBvoc.txt
Examples/Monocular/TUM1.yaml
Examples/Monocular/rgbd_dataset_freiburg1_xyz/
이렇게 구별할 수 있다.
첫번째 ./Examples/Monocular/mono_tum 는
Examples 폴더안 Monocular 폴더 안에
mono_tum라는 실행파일(윈도우로따지면 exe파일)을 실행한다는 의미이다.
두번째부터 세번째는
우리가 메인문을 c언어에서 생성할때
int main(void) 라고도하지만
int main(int argc, char **argv) 도있다
이것은 실행할때 같이 넣어준 값들을 담는 정보인데
자세하게 다루면 다른내용으로 세어나가는거 같으니
간단히 말하면
어떠한 인자를 메인문에 전달하면서 실행한다고 생각하면 된다.
받은 정보를 분석해보면
두번째 Vocabulary/ORBvoc.txt 는
Vocabulary폴더안에 ORBvoc.txt를 넘겨주는데 (나머지 세번째와 네번째도 동일한 원리)
이 파일은 폴더명처럼 단어장이라 생각하면 된다 열어보면 알수 없는 숫자들로 가득한데
논문에서 Bag of Words라는 용어를 사용하는데 그걸 사용하기 위한 단어장이라 생각하시면 된다.
세번째 Examples/Monocular/TUM1.yaml 는
카메라마다 정보가 다른데 이를 캘리브레이션(인터넷에 치면 자세하게 나옴 차후 opencv강의에서도 다룰예정)을 통해
focal length 등에 대한 정보가 담겨있다.
이정보가 없으면 특징점을 기반으로 맵을 만드는데 왜곡된 정보가 맵에 기입될 수 있다.
나중에 웹캠을 통해 다루는 예제를 추가할 텐데 여기서도 우리는 직접 캘리브레이션을 한 뒤 얻은 matrix값을
yaml파일에 기입해서 사용한다.(즉, 다른 예제를 사용하려면 다른 yaml파일 사용)
네번째 Examples/Monocular/rgbd_dataset_freiburg1_xyz/ 는
우리가 사용할 이미지 시퀀스폴더이다 (다른 예제를 사용하려면 다른 폴더경로를 기입해주면 된다.)
이상으로 ORB_SLAM을 리눅스 환경에서 돌려보는것을 마치겠다
'스터디 > SLAM' 카테고리의 다른 글
ORB SLAM 웹캠 코드 (24) | 2020.09.14 |
---|