Open Source C++ Code for the FAB-MAP Algorithm
St. Lucia Multiple Times of Day Dataset
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
- Feature Detection, Feature Extraction, and Bag-of-words models using OpenCV
- Chow-Liu tree implementation
- FAB-MAP v1.0 [Cummins & Newman 2008](http://ijr.sagepub.com/content/27/6/647.short Cummins & Newman 2008)
- FAB-MAP v1.0 using a Look-up-table for improved computation speed
- FAB-MAP with Fast-Bailout Cummins & Newman 2010
- FAB-MAP v2.0 Cummins & Newman 2010
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
Linux (g++)
- install cmake
sudo apt install cmake
- install opencv
sudo apt install libopencv-dev
- get the openFABMAP code
git clone https://github.com/arrenglover/openfabmap.git
- make the build directory
mkdir openfabmap/build && cd openfabmap/build
- 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 - make the project
make
- view/modify the settings file
gedit ../samples/settings.yml
- run the command line tool
bin/openFABMAPcli -s ../samples/settings.yml
OpenCV non-free for OpenCV 3.4
- clone opencv_contrib
- clone opencv repository
- checkout version 3.4
- mkdir build && cd build
- cmake .. -DOPENCV_EXTRA_MODULES_PATH='path_to/opencv_contrib/modules' -DBUILD_opencv_xfeatures2d=ON -DOPENCV_ENABLE_NONFREE=ON
- make
Windows (Visual Studio 2008)
- install openCV2.3
- install cmake
- open the cmake gui, specify the source directory (the directory this README is in), a build directory for the code, and click configure
- you may have to specify the location of opencv2.3 in UngroupedEntries->OPENCV_PATH.
- click configure in the cmake gui again
- click generate
- open the visual studio solution, for default running right-click on openFABMAPexe project and select 'Set as StartUp project'. Compile openFABMAP within Visual studio.
- add required .dll files from openCV2.3 to your build/bin directory (respective debug versions for debug mode).
- you also may need an extra tbb .dll due to OpenCV bug which can be downloaded here
- under openFABMAPcli->properties->Debugging->command arguments specify the path to the settings file (e.g. "-s samples\settings.yml")
- Alter the settings file for your data
- run exampleopenFABMAP in your build/bin directory (respective debug versions for debug mode).
- Arren GLover
- Will Maddern
- Kirk MacTavish