SLAM 개발에 유용한 라이브러리

C++ 개발에 유용한 라이브러리들은 여기를 봐주세요!

라이브러리마다 3줄 요약 + 링크를 남깁니다.

영상처리

OpenCV

제일 많이 사용되는 영상처리 라이브러리!
왠만한 플랫폼에 적용 가능 + 왠만한 영상 알고리즘 성능의 베이스라인
개인적으로 생각하는 SLAM 개발자의 필수 라이브러리

  • 링크
    • 웹사이트
    • GitHub

EmguCV

OpenCV의 C# 버전
C# 유니티를 쓰면서 필요하다면 쓸 수 있겠지만, 개인적으로는 C++ 모듈로 개발한 다음에 export하는 것을 추천
블로그 글 순서 상 여기에 적었지만, 사실 그렇게 추천하는 라이브러리는 아님

  • 링크
    • GitHub

FastCV

ARM 코어 + Snapdragon Mobile CPU에서 가속이 잘 되도록 만든 컴퓨터 비전 라이브러리
모바일 전용 영상처리가 필요할 때 좋을 듯

  • 링크
    • 웹사이트
    • API doc

OpenGV

3D geometric vision을 위한 minimal / non-minimal solver 알고리즘들을 모아놓은 라이브러리
EPnP, P3P와 같은 알고리즘 구현체가 상당히 좋음

  • 링크
    • 웹사이트 / API doc
    • 논문: Kneip 2014 - OpenGV: A Unified and Generalized Approach to Real-Time Calibrated Geometric Vision

PCL

포인트 클라우드 프로세싱 라이브러리
LiDAR SLAM, RGB-D SLAM을 한다면 필수로 사용하는 라이브러리
OpenCV에 더불어 사용할 수 있으면 매우 도움이 됨

  • 링크
    • 웹사이트
    • GitHub

Open3D

PCL을 위협하는 최신 라이브러리
하지만 아직 첫번째 메이저 릴리즈가 진행되지 않았음 (i.e. 조금 불안정할수도?)
딥러닝 기능들과도 밀접한 연관을 가지고 있기 때문에, 최신 연구를 한다면 강력하게 추천

  • 링크
    • 웹사이트
    • GitHub

GML Camera Calibration Toolbox

쓰기 쉬운 카메라 캘리브레이션 앱
Camera coefficient를 4개까지 계산할 수 있다.
스마트폰 카메라처럼 화각이 넓은 카메라를 쓴다면 OpenCV 카메라 캘리브레이션을 추천한다

Android camera calibration

안드로이드 모바일에서 카메라 캘리브레이션 하는 앱
OpenCV3와 Camera2 API를 이용함

  • 링크
    • GitHub 링크

COLMAP

Structure-from-Motion / Multi-View Stereo 라이브러리
3D reconstruction 또는 Visual localization을 연구하려면 필수

  • 링크
    • 웹사이트
    • GitHub

FFmpeg

동영상 처리 라이브러리
OpenCV에 포함시켜 빌드 할 수 있음 (이 방법이 더 쓰기 쉬움…)

  • 링크
    • 웹사이트

OpenMVS

COLMAP이나 OpenMVG가 하지 못하는 full surface reconstruction을 수행하는 라이브러리

  • 링크
    • GitHub

OpenMVG

COLMAP 과 비슷한 용도의 라이브러리

  • 링크
    • GitHub

OpenSfM

Mapillary에서 만든 Python 기반 Structure-from-Motion 라이브러리

  • 링크
    • GitHub

Meshroom

Point cloud의 시각화하여 후처리 및= 분석을 할 수 있는 프로그램.

  • 링크
    • 웹사이트

ARM Compute Library

ARM CPU/GPU코어에서 빠른 딥러닝 연산을 위한 라이브러리

  • 링크
    • 웹사이트

vilib

VIO 프론트엔드를 CUDA 가속 시킨 라이브러리

  • 링크
    • GitHub

REMODE

Probabilistic dense map을 생성해서 sparse -> dense point cloud를 만드는 라이브러리

  • 링크
    • GitHub

Deprecated…

  • CVD
  • Metaio SDK

 


수학 / 최적화

Eigen

가장 많이 사용되는 선형대수 라이브러리
3D geometric vision을 한다면 거의 필수적으로 사용하는 라이브러리
로우레벨 알고리즘을 직접 구현한다면 거의 필수적으로 사용하는 라이브러리

BLAS + ATLAS + LAPACK

많은 선형대수 라이브러리의 백엔드로 사용되는 라이브러리
… 정말로 로우레벨로 내려갈게 아니라면 사용할 일 없는 라이브러리. 지식 채움 용도로만 사용하는 것을 추천.
Fotran으로 작성되어있고, 왠만하면 C래퍼로 된 라이브러리를 사용하는편.

  • 링크
    • BLAS 웹사이트
    • LAPACK 웹사이트

Ceres-solver

비선형 최적화 라이브러리
g2o, GTSAM과 더불어 가장 많이 사용되는 SLAM 백엔드 라이브러리
커스텀 cost function을 짤 수 있는게 가장 큰 장점! 초심자부터 고수까지 쓰기 좋음.

  • 링크
    • 웹사이트
    • GitHub

g2o

Graph optimization 라이브러리
SLAM 백엔드로 사용하기에 난이도가 낮지만, 성능이 다른 라이브러리에 비해 낮은 편

  • 링크
    • GitHub

GTSAM

Factor graph 기반 로보틱스 센서퓨전 라이브러리
SLAM 백엔드로 쓰기에 아주 좋은 라이브러리 - 특히나 IMU를 사용한다면 Pre-integration 알고리즘이 이미 들어가있음

  • 링크
    • 웹페이지
    • GitHub

SE-Sync

비교적 최근에 공개된 SLAM 백엔드 라이브러리
Global minimum을 찾을 수 있는 최적화 알고리즘을 사용한다고 함

  • 링크
    • GitHub

Sophus

최적화를 위한 Lie algebra / Lie group 라이브러리

  • 링크
    • GitHub

Manif

비교적 최근에 나온 최적화를 위한 Lie 이론 알고리즘 라이브러리

  • 링크
    • GitHub

 


딥러닝

TensorFlow / PyTorch / MxNet

딥러닝 필수 라이브러리
C++ API도 있음

  • 링크
    • TensorFlow 웹사이트
    • PyTorch 웹사이트
    • mxnet 웹사이트

Detectron 2

General object detection, segmentation, pose estimation 및 기타 딥러닝 기반 비전 태스크 라이브러리

  • 링크
    • GitHub

DarkNet

C와 CUDA로 작성되어있는 딥러닝 라이브러리
대표적인 알고리즘으로는 YOLO가 있음

  • 링크
    • 웹사이트
    • GitHub

DLib

C++ 머신러닝 라이브러리
SVM와 같은 고전 머신러닝 알고리즘 사용 가능
Face landmark detection과 같은 딥러닝 기능도 사용 가능

  • 링크
    • 웹사이트

DBoW2 / DBoW3 / FBoW

DBoW2 - ORB-SLAM에서 Loop closure detection을 위해 사용하는 라이브러리
DBoW3 - DBoW2를 개선시켰다고 주장하는 라이브러리
FBoW - DBoW3에 하드웨어 가속을 적용한 라이브러리

  • 링크
    • DBoW2 GitHub
    • DBoW3 GitHub
    • FBoW GitHub

SNPE SDK

Qualcomm Snapdragon 칩에서 빠르게 딥러닝 기능을 작동시킬 수 있는 라이브러리 - Snapdragon CPU, Adreno GPU, Hexagon DSP
Caffe, Caffe2, ONNX, TensorFlow 모델을 Snapdragon에서 가속시킬 수 있는 형태로 변환 가능

  • Snapdragon Neural Processing Engine

  • 링크

    • 웹사이트
    • Docs

 


시뮬레이션

CARLA

가장 유명한 자율주행 시나리오 시뮬레이터

  • 링크
    • 웹사이트
    • GitHub

Habitat-Sim + Replica

인도어 환경에서 다양한 비전/언어 태스크를 수행할 수 있도록 만들어진 시뮬레이터

  • 링크
    • 웹사이트
    • GitHub

AirSim

  • Unity / Unreal Engine의 플러그인으로써, 게임 엔진 속 세상에 자동차/드론을 사용하는 시뮬레이터

  • 링크

    • 웹사이트
    • GitHub

NVIDIA Omniverse / Isaac Sim

최근 NVIDIA에서 공개한 Omniverse 그래픽 엔진 + ISAAC 로보틱스 시뮬레이터

  • 링크
    • 웹사이트

Gazebo

ROS에서 많이 사용하는 시뮬레이터
최신 시뮬레이터들에 비해 그래픽은 많이 부족한 편

  • 링크
    • 웹사이트
    • GitHub

 

그래픽스 / 렌더링

OpenGL

그래픽스 렌더링을 위해 가장 많이 사용되는 API
수많은 엔진들이 OpenGL 기반으로 되어있음

  • 링크
    • OpenGL 공부 웹사이트

Vulkan

크로스 컴파일이 가능한 그래픽스 API
OpenGL에 비해 훨씬 어렵지만, 그만큼 컨트롤 할 수 있는 부분도 많다고 한다.

  • 링크
    • Vulkan 공부 웹사이트

Metal

Apple 제품 및 맥북에서 사용 가능한 그래픽스 API

Qt

크로스 컴파일이 가능한 GUI 앱 개발 프레임워크
OpenGL의 난이도에 크로스 컴파일 기능이 들어간 정도

  • 링크
    • 웹사이트

Filament

크로스 컴파일이 가능한 물리 렌더링 엔진
OpenGL을 할 수 있다면 이 라이브러리를 적극 추천함

  • 링크
    • GitHub

Pangolin

오픈소스 SLAM에서 많이 사용하는 3D 시각화 라이브러리
성능이 그렇게 좋은 편은 아니지만, OpenCV나 OpenGL을 알면 쉽게 쓸 수 있도록 되어있다

  • 링크
    • GitHub

rviz

ROS에서 많이 사용되는 3D 시각화 라이브러리

  • 링크
    • 웹사이트
    • GitHub

Ogre, GODOT, Hazel, VTK, ITK

가벼운 3D 게임 / 렌더링 엔진

  • 링크
    • Ogre 웹사이트
    • GODOT 웹사이트
    • Hazel 웹사이트
    • VTK 웹사이트

 

통신

gRPC

고성능 RPC 프레임워크

  • 링크
    • 웹사이트

rpcLib

클라이언트~서버 간의 rpc 통신을 위한 라이브러리

  • 링크
    • 웹사이트

lcm

가벼운 메세지 통신 및 data marshalling 라이브러리

  • 링크
    • GitHub