본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Computer Vision

[SLAM] EuRoC를 이용한 ORB-SLAM3 테스트

by zpstls 2023. 1. 11.
반응형

 

 

이전 포스트에서 ORB-SLAM에 대해 정리해 보았습니다.

이번 포스트에서는 이러한 ORB-SLAM을 EuRoC Dataset을 이용하여 테스트해보고자 합니다.

 

ORB-SLAM3

 

우선, ORB-SLAM에 대한 이전 포스트는 다음과 같습니다.

 

[SLAM] ORB SLAM과 SLAM Dataset에 관한 정리

요번 포스트는 SLAM과 관련된 내용을 다루고자 합니다. SLAM과 관련된 많은 Open Project들이 있는데 이 중에서 ORB SLAM에 대해 정리할 예정입니다. (SLAM과 관련된 내용은 시리즈로 작성될 예정입니다.)

mj-thump-thump-story.tistory.com

 

테스트 환경은 Windows 환경, Visual Studio 2017입니다.

 

ORB-SLAM3을 이용할 예정이며, Project Pakage는 다음 링크를 통해 다운로드하여 사용합니다.

 

GitHub - chanho-code/ORB-SLAM3forWindows: ORB-SLAM3 for Windows Platform

ORB-SLAM3 for Windows Platform. Contribute to chanho-code/ORB-SLAM3forWindows development by creating an account on GitHub.

github.com

Github 내용대로 따라가면 되긴 하지만, Github보다 조금 자세하게 정리해보고자 합니다. 순서대로 따라 하시면 큰 문제없이 테스트해 보실 수 있을 것입니다.

 

Program Install에 필요한 Library 설치

  • Visual Studio : Tested VS2017
  • Cmake : Required at least 2.8.

CMAKE에서 Compiler를 선택할 때, 설치된 Visual Studio의 버전에 맞게 선택합니다. 앞으로의 모든 Build 과정에서 동일하게 설정합니다.

 

  • OpenCV + Eigen : Required at least 3.0. (3.x Version 사용을 권장함.)

설치 과정은 생략하도록 하겠습니다.

 

  • glew (for Pangolin)

설치 과정은 생략하도록 하겠습니다.

 

  • Bootstrap : Tested with 1.67

ORB-SLAM3forWindows/Thirdparty/boost_1_67_0에 포함된 zip 파일을 풀고 해당 Directory에서 CMD창을 열어 다음과 같이 순서대로 입력합니다.

 

bootstrap.bat

→ b2.exe 등의 파일이 생성될 것입니다.

 

b2.exe link=static threading=multi

→ ./stage/lib Directory에 libboost_serialization-vc141-mt-s-x32-1_67.lib과 같은 파일이 생성될 것입니다.

 

  • DBoW2

OpenCV_DIR에 설치되어 있는 openCV의 build 경로를 입력해 줍니다. 이후 Configure→Gernerate→Open Project를 통해 Visual Studio를 Open 합니다.

Build Type을 Release로 변경한 후, 다음과 같이 Project 설정을 진행합니다.

모든 설정이 끝났다면 ALL_BUILD를 진행합니다. 진행이 완료되면 Thirdparty/DBoW2/lib Directory에 .lib 파일이 생성되어 있을 것입니다.

 

  • g2o

이후 Configure→Gernerate→Open Project를 통해 Visual Studio를 Open 합니다. Build Type을 Release로 변경한 후, 다음과 같이 Project 설정을 진행합니다.

모든 설정이 끝났다면 ALL_BUILD를 진행합니다. 진행이 완료되면 Thirdparty/build/Release Directory에 .lib 파일이 생성되어 있을 것입니다.

 

  • Pangolin

OpenCV_DIR에 설치되어 있는 openCV의 build 경로를 입력해 줍니다. 이후 Configure→Gernerate→Open Project를 통해 Visual Studio를 Open 합니다.

Build Type을 Release로 변경한 후, 다음과 같이 Project 설정을 진행합니다.

모든 설정이 끝났다면 ALL_BUILD를 진행합니다. 이때 만일 "cannot open input file 'pthread.lib'"라는 Error Message가 나왔다면 무시합니다.

진행이 완료되면 Thirdparty/Pangolin/lib/Release Directory에 .lib 파일이 생성되어 있을 것입니다.

 

  • ORB-SLAM3

OpenCV와 Pangolin DIR를 확인한 후, 설치 경로를 넣어줍니다. 이후 Configure→Gernerate→Open Project를 통해 Visual Studio를 Open 합니다.

만일 C++ Directory에 Opencv 및 boost가 포함되어 있지 않다면 설치 Directory를 추가합니다.

모든 설정이 끝났다면 ORB-SLAM3 Build를 진행합니다. 진행이 완료되면 build/Release Directory에 .lib 파일이 생성되어 있을 것입니다.

 

이로서 Test를 위한 Build과정이 완료되었습니다.

 

 

 

 

 

이제는 Visual-Inertial을 Test 해보도록 합시다.

 

Test with Monocular-Inertial

Camera와 IMU의 Fusion사용이 목적이므로 Monocular-Inertial 부분만 Test 해봅니다.

우선 mono_inertial_euroc를 아래와 같이 Build 합니다.

Linker의 advanced에 초기 설정되어 있는 Library는 삭제해 줍니다. 이후 boost 및 opencv관련 Directory가 빠져있다면 설정합니다.

다음으로 Windows에는 Linux관련 함수가 없으므로 다음과 같은 함수를 추가해 주어야 합니다.

다음은 ms단위로 동작하는 Sleep 함수입니다.

void usleep(__int64 usec)
{
	HANDLE timer;
	LARGE_INTEGER ft;

	ft.QuadPart = -(10 * usec); // Convert to 100 nanosecond interval, negative value indicates relative time

	timer = CreateWaitableTimer(NULL, TRUE, NULL);
	SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
	WaitForSingleObject(timer, INFINITE);
	CloseHandle(timer);
}

이후, Build를 진행한다. Build가 성공적으로 완료되면 Examples/Monocular-Inertial/Release Directory에 mono_inertial_euroc.exe와 .lib 파일이 생성되어 있을 것입니다. 이 Directory에 opencv_world~.dll을 추가해 줍니다.

 

다음으로는 Dataset을 Download 받아 Test를 진행해 보겠습니다. 다음 Link에 들어가 Downloads를 받습니다.

EuROC Link : http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/

 

Index of /~asl-datasets/ijrr_euroc_mav_dataset

 

robotics.ethz.ch

 

Dataset을 Download 받게 되면 다음과 같은 Structure의 Folder를 얻게 됩니다.

앞으로 해당 Folder의 Cam0속의 Image를 이용하게 될 것입니다.

Dataset까지 준비되었다면 이후, Examples/Monocular-Inertial/Release Directory 경로에서 CMD 창을 열어 다음과 같은 명령어를 입력하여 Test를 진행합니다.

>> mono_inertial_euroc.exe {~Vocabulary/ORBvoc.txt} {~Monocular-Inertial/EuRoC.yaml} {~Dataset/V102} {~Monocular-Inertial/EuRoC_TimeStamps/V102.txt}

첫 번째 Parameter는 ORB의 voc.txt파일을 경로를 적어줍니다. (Project Folder에 포함되어 있습니다.)

두 번째 Parameter는 ORB에 사용되는 .yaml 파일의 경로입니다. 이 또한 Example Folder에 포함되어 있습니다.

세 번째 Parameter는 Download 받은 Dataset의 경로입니다. mov0 상위 폴더명을 적어주면 됩니다.

네 번째 Parameter는 TimeStamp txt파일의 경로입니다. Example Folder에 포함되어 있습니다. 참고로 Dataset을 Vicon room1의 V1 02 medium으로 Downloads 받았다면 Example/Monocular-Inertial의 TimeStamps txt 파일을 V102.txt를 사용하도록 합니다.

 

앞의 모든 과정을 수행한 후 진행한 Test 결과물은 다음과 같습니다.

→ 초반에 움직임을 잃어버리는 부분이 있긴 하지만, 꽤 복잡한 움직임을 하고 있음에도 Map을 잘 생성하는 것을 확인할 수 있습니다.

→ 거의 제자리에서 좌우 회전이 있을 때도 LOST가 되지 않는 것으로 확인이 되어 RC Car에 적용했을 때도 LOST가 되지 않을 확률이 많다고 생각됩니다.

 

 

이렇게 ORB-SLAM3을 Windows 환경에서 Test 해보았습니다.

SLAM이 동작하는 모습을 보니 뿌듯하기도 합니다.

이번 포스트는 여기서 마무리하고, 향후 이러한 SLAM을 직접 구현하거나 활용하는 방법에 대해서도 작성해 보도록 하겠습니다.

 

 

반응형

댓글