Home

Awesome

openFABMAP <img width="100" alt="openfabmap" src="https://user-images.githubusercontent.com/9265237/52215895-5272bc80-2895-11e9-8af5-0a9fca32cf42.PNG">

Open Source C++ Code for the FAB-MAP Algorithm

St. Lucia Multiple Times of Day and Other Datasets

See the Wiki for tips!

@inproceedings{
   author = {Glover, A. and Maddern, W. and Warren, M. and Reid, S. and Milford, M. and Wyeth, G.},
   title = {OpenFABMAP: An Open Source Toolbox for Appearance-based Loop Closure Detection},
   booktitle = {The International Conference on Robotics and Automation},
   address = {St Paul, Minnesota},
   publisher = {IEEE},
   year = {2011}
}

OpenFABMAP Glover et. al. 2012 is an open-source, OpenCV-only dependent, version of the popular Fast Appearance-based Mapping (FAB-MAP) algorithm [Cummins & Newman 2008](http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5509547&tag=1 Glover et al. 2010). OpenFABMAP was developed from the ground-up following FAB-MAP publications. The original FAB-MAP algorithm is now also open-source but requires alternative project dependencies.

FAB-MAP is a Simultaneous Localisation and Mapping algorithm which operates solely in appearance space. FAB-MAP performs location matching between places that have been visited within the world as well as providing a measure of the probability of being at a new, previously unvisited location. Camera images form the sole input to the system, from which OpenCV's feature extraction methods are used to develop bag-of-words representations for the Bayesian comparison technique.

The code has implementations of

An overview of OpenFABMAP Glover et. al. 2012 or the original implementation/use Glover et al. 2010.

As of the latest version, openFABMAP is dependent solely on OpenCV 2.3 or higher. The project has a CMake build environment for general use on both Linux and Windows systems. OpenFABMAP is also designed to integrate with ROS. See the CyPhy-ROS page for a package that has implemented openFABMAP as a ROS node.

The original googlecode project page was here

Installation

Linux (g++)

  1. install cmake sudo apt install cmake
  2. install opencv sudo apt install libopencv-dev
  3. get the openFABMAP code git clone https://github.com/arrenglover/openfabmap.git
  4. make the build directory mkdir openfabmap/build && cd openfabmap/build
  5. use cmake to compile the makefile cmake ... note: the output will tell you which version of opencv you are using and if you are using the "non-free" modules
  6. make the project make
  7. view/modify the settings file gedit ../samples/settings.yml
  8. run the command line tool bin/openFABMAPcli -s ../samples/settings.yml

OpenCV non-free for OpenCV 3.4

  1. clone opencv_contrib
  2. clone opencv repository
  3. checkout version 3.4
  4. mkdir build && cd build
  5. cmake .. -DOPENCV_EXTRA_MODULES_PATH='path_to/opencv_contrib/modules' -DBUILD_opencv_xfeatures2d=ON -DOPENCV_ENABLE_NONFREE=ON
  6. make

Windows (Visual Studio 2008)

  1. install openCV2.3
  2. install cmake
  3. open the cmake gui, specify the source directory (the directory this README is in), a build directory for the code, and click configure
  4. you may have to specify the location of opencv2.3 in UngroupedEntries->OPENCV_PATH.
  5. click configure in the cmake gui again
  6. click generate
  7. open the visual studio solution, for default running right-click on openFABMAPexe project and select 'Set as StartUp project'. Compile openFABMAP within Visual studio.
  8. add required .dll files from openCV2.3 to your build/bin directory (respective debug versions for debug mode).
  9. you also may need an extra tbb .dll due to OpenCV bug which can be downloaded here
  10. under openFABMAPcli->properties->Debugging->command arguments specify the path to the settings file (e.g. "-s samples\settings.yml")
  11. Alter the settings file for your data
  12. run exampleopenFABMAP in your build/bin directory (respective debug versions for debug mode).

Contributors