Giter Club home page Giter Club logo

libcml's Introduction

libCML and MODSLAM

1. About libCML

libCML is a SLAM library and scientific tool, which include a novel fast thread-safe graph map implementation. It is used by MOD SLAM : a mixed method for a more robust SLAM without loop closing, that is implemented on this repository. You can find the paper here : Paper link : https://hal.archives-ouvertes.fr/hal-03538133.

If you want to make your own SLAM based on libCML, follow the tutorial here : under construction.

2. Compilation

a. Windows, Linux and Mac

If you want to build the GUI, you will need Qt6 with Qt Multimedia and Qt Charts. Otherwise, please disable it with the according option (see below).

We recommend you to use CLion from Jetbrains, or Qt Creator from Nokia, to build and test. Otherwise, you can :

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 4

This is a list of different option you can pass to cmake :

-DENABLE_GUI=OFF # Disable/Enable the gui
-DUSE_GOOGLE_HASH=ON # Disable/Enable Google Hash Map. Enabling this option cause the map to take more memory, but to be faster.
-DENABLE_OPENMP=OFF # Disable/Enable OpenMP

b. Android and iPhone

We recommend you to use Qt Creator, as it is the most simple way to build ModSLAM on Android and iPhone.

  1. Download and Install Android Studio
  2. Download and Install JDK 17 (Higher version not supporter for the moment)
  3. Download and Install Qt (with QtCreator, Qt 6 for Android, Qt Multimedia and Qt Charts)
  4. Launch Qt Creator. Go to Android settings. Make sure that all is ok. Download the Android SDK you want.
  5. Open the project with Qt Creator, configure it for Android/Release and simply build it

3. Execution

cd build
./modslam -d PATH_TO_THE_DATASET

where PATH_TO_THE_DATASET can be any dataset (TUM, KITTI, RobotCar, a mkv/mp4/avi/other video file...). MODSLAM will automatically detect the right dataset format.

Here is a list of arguments you can pass to the executable :

-c configfile.yaml # Load a specific config file
-g # Use Gui Mode
-t # Use Terminal Mode
-r path_to_result -f [tum|kitti|all] # Save the results with the specified format
-l log.txt # Write the log to a file
-s path_to_images # Export the 3D rendering to a ton of .jpeg files at specified folder
-z # Print the statistics at each iteration. Used for python script and result analasys.

4. Datasets

KITTI Odometry

Download here : https://www.cvlibs.net/datasets/kitti/eval_odometry.php

  • Gray Scale Required
  • Color Optional
  • Groundtruth Optional
/KITTI
├── dataset
│   ├── poses
│   │   ├── 00.txt
│   │   ├── 01.txt
│   │   ├── 02.txt
│   │   ├── 03.txt
│   │   ├── 04.txt
│   │   ├── 05.txt
│   │   ├── 06.txt
│   │   ├── 07.txt
│   │   ├── 08.txt
│   │   ├── 09.txt
│   │   └── 10.txt
│   └── sequences
│       ├── 00
│       ├── 01
│       ├── 02
│       ├── 03
│       ├── 04
│       ├── 05
│       ├── 06
│       ├── 07
│       ├── 08
│       ├── 09
│       ├── 10

To run MOD SLAM on KITTI Odometry, you can use the following command :

cd build
./modslam -d /KITTI/dataset/sequences/02

Stereopolis

/Stereopolis
├── Camera_0.zip
├── Camera_0.gt.txt
├── Camera_0.mask.png
├── Camera_0.times.txt
├── Camera_0.xml

To run MOD SLAM on Stereopolis, you can use the following command :

cd build
./modslam -d /Stereopolis/Camera_0.zip

5. Evaluation

cd result
python3 statson.py # Compute the absolute trajectory error of each videos
python3 bruteforce.py # Make statistics for the parameters / Search for a better parameters set
python3 make2dtable.py # Make a 2D table of the variation of ATE between by varying two parameters

The configuration file evaluation/config.txt contains the SLAMs and the datasets to evaluate on :

ModSLAM "../cmake-build-release/modslam"
TUM "/home/thomas/Datasets/TUM"
KITTI "/home/thomas/Datasets/KITTI"

The configuration file evaluation/modslam.yaml is the SLAM configuration you want to initialize the python script with.

Each result is stored in a .json file. Experience are never run twice. If a the result of an experience is already present in the .json file, the experience will not run a second time. You can plot all the result stored in the json database :

python3 plotall.py

All the result are stored in a result folder. This is the kind of result you can except with a few experiences :

Known bugs

The camera won't open on Android

This is a bug of Qt. Please use at least Qt 6.3.0.

MSVC / CLang, LLVM Out of memory

This can be cause when you use the 32 bits of the compiler instead of the 64. Please read https://cmake.org/cmake/help/git-stage/guide/user-interaction/index.html for more details.

libcml's People

Contributors

lizabelos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

libcml's Issues

Frame time?

Hi, and thank you for making this code available! Quick question, does this code use the cpu only, or the gpu as well? What is the average frame time for a stereo slam frame, for example in the kitti dataset?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.