Real-time dense visual SLAM system capable of capturing comprehensive dense globally consistent surfel-based maps of room scale environments explored using an RGB-D camera. ( Just make it build easyer for Windows via using CMake, and use librealsense2 instead of librealsense. Original Author: https://github.com/mp3guy/ElasticFusion )
Please cite this work if you make use of our system in any of your own endeavors:
- ElasticFusion: Real-Time Dense SLAM and Light Source Estimation, T. Whelan, R. F. Salas-Moreno, B. Glocker, A. J. Davison and S. Leutenegger, IJRR '16
- ElasticFusion: Dense SLAM Without A Pose Graph, T. Whelan, S. Leutenegger, R. F. Salas-Moreno, B. Glocker and A. J. Davison, RSS '15
- Windows 7/10 with Visual Studio 2017 (Though other configurations may work, but 2019 will crash in run time)
- [CMake] (https://cmake.org/)
- OpenGL
- CUDA >= 7.0
- OpenNI2
- [SuiteSparse] (https://github.com/jlblancoc/suitesparse-metis-for-windows)
- [Eigen] (http://eigen.tuxfamily.org)
- Pangolin
- zlib (Pangolin can automatically download and build this)
- libjpeg (Pangolin can automatically download and build this)
- [librealsense2] (https://github.com/IntelRealSense/librealsense) - Optional (for Intel RealSense cameras)
-
Create folders:
Your project folder structure should be this manner:
Root/
|
|-ElasticFusion/ # Source code and CMakeLists of ElasticFusion
| CMakeLists.txt # CMakeLists, you should follow this file to place headers, libs and dlls of Eigen, SuiteSparse and Pangolin
|
|-Dependency/ # The folder that is used to place dependency libraries: Eigen, SuiteSparse and Pangolin
|
|-build # The folder that is used to build ElasticFusion
|
|-install # Final folder that contains Libs and Exes -
Install cmake and cuda, OpenNI2, RealSense SDK(Optional).
-
Download and build from source Eigen, SuiteSparse.
-
Download and build from source Pangolin but pay attention to the following cmake settings. There will be a lot of dependencies where path was not found. That is OK except OPENNI2 and EIGEN3 (those should be set to valid paths, and make sure define "HAVE_EIGEN"). You also need to set MSVC_USE_STATIC_CRT to false in order to correctly link to ElasticFusion projects.
-
Refer to my CmakeList.txt, copy the headers, libs and dlls of Eigen, SuiteSparse and Pangolin to right place ( I didnot wrie cmake find package for Eigen, SuiteSparse and Pangolin )
-
Run Cmkae and it will build all automatically for you.
There are three subprojects in the repo:
- The Core is the main engine which builds into a shared library that you can link into other projects and treat like an API.
- The GUI is the graphical interface used to run the system on either live sensor data or a logged data file.
- The GPUTest is a small benchmarking program you can use to tune the CUDA kernel launch parameters used in the main engine.
The GUI (ElasticFusion) can take a bunch of parameters when launching it from the command line. They are as follows:
- -cal : Loads a camera calibration file specified as fx fy cx cy.
- -l : Processes the specified .klg log file.
- -p : Loads ground truth poses to use instead of estimated pose.
- -c : Surfel confidence threshold (default 10).
- -d : Cutoff distance for depth processing (default 3m).
- -i : Relative ICP/RGB tracking weight (default 10).
- -ie : Local loop closure residual threshold (default 5e-05).
- -ic : Local loop closure inlier threshold (default 35000).
- -cv : Local loop closure covariance threshold (default 1e-05).
- -pt : Global loop closure photometric threshold (default 115).
- -ft : Fern encoding threshold (default 0.3095).
- -t : Time window length (default 200).
- -s : Frames to skip at start of log.
- -e : Cut off frame of log.
- -f : Flip RGB/BGR.
- -icl : Enable this if using the ICL-NUIM dataset (flips normals to account for negative focal length on that data).
- -o : Open loop mode.
- -rl : Enable relocalisation.
- -fs : Frame skip if processing a log to simulate real-time.
- -q : Quit when finished a log.
- -fo : Fast odometry (single level pyramid).
- -nso : Disables SO(3) pre-alignment in tracking.
- -r : Rewind and loop log forever.
- -ftf : Do frame-to-frame RGB tracking.
- -sc : Showcase mode (minimal GUI).
Essentially by default ./ElasticFusion will try run off an attached ASUS sensor live. You can provide a .klg log file instead with the -l parameter. You can capture .klg format logs using either Logger1 or Logger2.
We have provided a sample dataset which you can run easily with ElasticFusion for download here. Launch it as follows:
./ElasticFusion -l dyson_lab.klg
ElasticFusion is freely available for non-commercial use only. Full terms and conditions which govern its use are detailed here and in the LICENSE.txt file.