알파카농장

VINS-MONO 환경 구축 및 실행법 본문

SLAM

VINS-MONO 환경 구축 및 실행법

갱파카 2022. 11. 25. 19:08

ORB-SLAM에 이어서 VINS-MONO 또한 SLAM의 바이블이라 생각되어 환경 구성을 해보았다. 교수님께서 ORB-SLAM3보다 VINS-MONO가 코드가 잘 짜여있다고 말씀을 해주셔서 VINS-MONO는 코드 분석 목적까지 잡고 환경 구축을 진행하고자 했다. 

 

VINS-MONO는 Monocular Visual-Inertial System을 위한 실시간 SLAM framework로(tightly-coupled)
나도 아직 코드는 안 읽어봐서 자세한 내용은 모르겠다.. 추후에 업데이트 하려고 한다 :) 

VINS-MONO rqt_graph

 

거두절미하고, VINS-MONO의 rqt_graph부터 보면 크게 3개의 모듈로 나눠져 있다. 

1. feature_tracker : 특징점 뽑고 match하는 부분까지 (이미지 값만 input으로 사용한다)

2. vins_estimator : 특징점과 imu의 odometry 값을 같이 input으로 받아서, pose는 계속해서 뽑아내고
keyframe을 뽑아내는 역할을 수행한다고 보여진다.

3. pose_graph : path들을 그리고, 이전 프레임과 현재 프레임을 비교해서 match되는 image(loop closure) 도 출력해주고, match되는 point들은 아마 vins_estimator로 들어가서 keyframe들에 대해 bundle adjustment로 3d point를 최적화 해주지 않을까.. 하는 추측이다.

 

코드를 사실 자세하게 뜯어봐야 내용을 아는데 전체적인 흐름만 파악하고자 rqt_graph를 통해 확인해보았다. 따라서, 정확하지 않을 수 있다..!! 잘못 이야기했다면 댓글 달아주시면 감사하겠습니다.

 

자율차대회랑 이전 연구실에서 현대차과제할 때 차량 통신을 ROS로 진행해서, 나도 ROS로 되어있는 패키지나 시스템이 더 한눈에 파악되는 것 같다. (아 그리고 $rostopic info __________로 각 토픽이 어떠한 msg type으로 발행이 되는지 확인해 놓으면 어떤 데이터인지 조금 더 잘 파악할 수 있는 것 같다!)

 


그래서 쨌든 VINS_MONO 환경 구축하는 방법은 다음과 같다.

https://github.com/HKUST-Aerial-Robotics/VINS-Mono

 

GitHub - HKUST-Aerial-Robotics/VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

A Robust and Versatile Monocular Visual-Inertial State Estimator - GitHub - HKUST-Aerial-Robotics/VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

github.com

이것도 ORB-SLAM3과 마찬가지로 Prerequisites가 있다. 비교적 짧음 2개밖에 없어서 할 의지가 마구마구 생김 ^.^

 

이 분들은 Ubuntu 16.04를 사용했지만, 나는 Ubuntu 18.04. ROS Melodic을 사용하니까 DISTRO 버전만 바꿔서 입력해준다.

sudo apt-get install ros-melodic-cv-bridge ros-melodic-tf ros-melodic-message-filters ros-melodic-image-transport

굿. 그리고 마지막으로 ~,, Ceres Solver를 깔아준다.

이번 학기에 수치해석 수업을 듣는데, 교수님께서 Ceres Solver 소개해주시면서 최적화 알고리즘이 잘 구현되어 있는 라이브러리라고 소개해주셨는데 여기서 만났다. 

 

http://ceres-solver.org/installation.html

 

Installation — Ceres Solver

When building Ceres, some dependencies (Eigen, gflags) are not found using custom Find .cmake modules any more. Hence, instead of the custom variables ( _INCLUDE_DIR_HINTS , _INCLUDE_DIR , …) you should use standard CMake facilities to customize where th

ceres-solver.org

모든 환경은 구축할 때 가장 최근 환경을 피하라 했거늘.. 그래서 Ceres Solver 2.2 를 피하고 Ceres Solver 2.1를 다운받아 사용했다. 그리고 아래 그림대로 막 깔다가 아래 블록의 cmake ../ceres-solver-2.1.0 쯔음 에러를 만났던 것 같다. 그건 바로 cmake 버전이 낮다는 것 => CMake 3.10 or later required.

확인해보니까, 내 PC의 cmake 버전은 Cmake 3.9였다. 아래 블로그를 참고해서 cmake를 업데이트 했다. 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=chandong83&logNo=221672989050 

 

cmake 업그레이드하기 - 우분투(Ubuntu)

최근 어떤 코드를 빌드 하려고 하니 버전이 낮아서 안된다고 한다. cmake 파일 업그레이드를 하면서 겸사겸...

blog.naver.com

이 분을 따라해서 3.11.4로 다운로드했다. (나름 검증된 cmake를 다운받았을거라는 믿음에,,)

그리고 마지막 부분에 읽어보면 기존에 cmake가 있는 상태로 빌드하였다면 삭제하고 소스코드도 삭제하고 다시 하는 것이 정신건강에 좋을 것이라고 적혀있다. 내 정신건강을 위해서 다시 처음부터 빌드했고, 

 

설치를 하다가 cmake까지는 됐는데, make -j3할 때 에러가 났다. 캡쳐를 안해놔서 어떤 건지는 기억이 안나는데, 구글링을 해보니 g++ 버전이 낮아서 생기는 문제 같았다. 그리고 github issue들을 살펴보니 대부분의 유저분들께서 g++, gcc를 11 version으로 사용하는 것 같아서 다운로드 받아 사용했다.

 

gcc, g++ 최신 버전이 있는 레포지토리를 다운받고 update를 통해 추가해준 후, 깔기..

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-11 g++-11

그리고 cmake를 할 때, compiler 버전을 설정해주기 위해서, 

cmake -S . -B build -DCMAKE_C_COMPILER=/usr/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/bin/g++-11 ../ceres-solver-2.1.0

이렇게 설치해줬더니 잘 됐다! (괜히 뿌듯뿌듯..)

Ceres-Solver는 대형 nonlinear least squares 최적화 문제를 풀기 위해 만든 오픈 소스 라이브러리 라 하고, 

각 모듈(?)에서 연산 목표를 설정하고 통과했는지 실패했는지 확인하는 거 같은데 183개 중에 10개 정도 실패한 것 같다.

괜찮은거겠지...? 쨌든..

 

ceres-solver 밑 부분에 있는 simple_bundle_adjuster 테스트에 대해서 Convergence 하는 걸 확인할 수 있었다. 여기 있는 내용도 확실하게 이해하려면 최적화를 많이 공부해야겠다는 생각을 했다. (SLAM은 matrix나 선형대수, 수치해석이 정말 중요하구나를 느낀.. 나의 과거 모습을 반성하게 되었다.)

 

쨌든, 여기까지 하면 Prerequisites는 모두 끝난다. 

그리고 ROS에서 VINS-MONO를 빌드하는 방법은 쉽다. 그냥 깃헙 레포지토리 clone해서 catkin_make하고, devel setup.bash에 반영시켜주기만 하면 됨 

 

그러고 나서, 3절을 확인해보면, Public Dataset에 대해서 Odometry하는 방법이 나와있다.

3개의 터미널 창을 키고 3개의 명령어를 실행하면 아래와 같은 rviz를 확인해 볼 수 있을 것이다.

path가 초록색으로 나오고 matching되는 keyframe들을 빨간 선으로 이어주는 것 같은데, 이것도 VINS_MONO 코드를 리뷰해보면 터미널 로그나 시각화된 결과가 어떤 건지 더 확실하게 알 수 있을 것 같다.

 

조만간에 코드 리뷰 꼭 올려야지!

 

쨌든.. VINS_MONO 환경 구축할 때 Ceres_solver 빌드에 좀 유의하면 될 거 같고, cmake랑 g++, g-- 다운받고 실행하면 오류 없이 한 번에 빌드할 수 있지 않을까 싶다.

'SLAM' 카테고리의 다른 글

ORB-SLAM3 환경 구축 및 실행법  (3) 2022.11.25