SceneLib2 - MonoSLAM open-source library

December 28, 2015 · View on GitHub

========================================== SceneLib2 - MonoSLAM open-source library

Please also refer to the following links; http://hanmekim.blogspot.com/2012/10/scenelib2-monoslam-open-source-library.html https://github.com/hanmekim/SceneLib2


  • What is SceneLib2? *

SceneLib2 is an open-source C++ library for SLAM originally designed and implemented by Andrew Davison and colleagues at the University of Oxford.


  • Why is it named SceneLib2? *

His version, SceneLib 1.0, was released with full source code under the LGPL, and as SceneLib2 is a reimplemented version of it, I gave the same name with a new version number to this library.


  • Why is it reimplemented? *

I reimplemented his version with the following objectives;

  1. Understand his MonoSLAM algorithm in code level.
  2. Replace older libraries (i.e. VW34, GLOW, VNL, Pthread) with newer ones (Pangolin, Eigen3, Boost).
  3. Support USB camera instead of IEEE1394.
  4. Make it more portable and convenient by using CMake and git repository.

  • Implementation *

I tried to make it as same as the original version, so that I can easily find any problems that I might have introduced to it by accident (I didn't even change most of functions' and variables' name). But, at the same time, I also tried to make it easier to understand by using different class architectures and various changes.

To give you the same executable example program like MonoSLAMGlow in SceneLib 1.0, I implemented a very similar one called MonoSlamSenceLib1, and again I tried to make it as same as the original version.


  • Notes and Warnings *

Even though my intention is to make it as a cross-platform library, I only added and tested it for the following platforms, but, of course, I will increase its portability continuously (you can check the following platforms list later on).

  • Ubuntu 12.04 LTS - 32bits
  • Ubuntu 12.04 LTS - 64bits (thanks to Prof. Davison for testing it)
  • Ubuntu 12.10 - 64bits
  • Ubuntu 14.04 LTS - 64bits
  • Mac OS X 10.9
  • Mac OS X 10.10

This library is a research-level software which is still in development. It will be frequently changed without notification to fix bugs, to add more features and to make it better.


  • Installation *

  1. Install various development related packages sudoaptgetinstallbuildessentialsudo apt-get install build-essential sudo apt-get install git cmake sudoaptgetinstallfreeglut3devlibgludevlibglewdevsudo apt-get install freeglut3-dev libglu-dev libglew-dev sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev

  2. Install Engen3 $ sudo apt-get install libeigen3-dev

  3. Install Boost $ sudo apt-get install libboost-all-dev

  4. Install OpenCV cdMYEXTERNALLIBRARIESDIRECTORYcd MY_EXTERNAL_LIBRARIES_DIRECTORY wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2 tarxvfOpenCV2.4.2.tar.bz2tar xvf OpenCV-2.4.2.tar.bz2 cd OpenCV-2.4.2 mkdirBUILDmkdir BUILD cd BUILD cmake..cmake .. make -j4 $ sudo make install

  5. Install Pangolin cdMYEXTERNALLIBRARIESDIRECTORYcd MY_EXTERNAL_LIBRARIES_DIRECTORY git clone https://github.com/stevenlovegrove/Pangolin.git cdPangolincd Pangolin mkdir BUILD cdBUILDcd BUILD cmake .. makej4make -j4 sudo make install

  6. Install SceneLib2 cdMYWORKDIRECTORYcd MY_WORK_DIRECTORY git clone git://github.com/hanmekim/SceneLib2.git SceneLib2 cdSceneLib2cd SceneLib2 mkdir BUILD cdBUILDcd BUILD cmake .. $ make -j4

  7. Download an example image sequence cdMYIMAGEDIRECTORYcd MY_IMAGE_DIRECTORY wget www.doc.ic.ac.uk/~ajd/Scene/Release/testseqmonoslam.tar.gz $ tar xvf testseqmonoslam.tar.gz


  • How to use *

1-1. Modify the configuration file to use the example image sequence $ gedit MY_WORK_DIRECTORY/SceneLib2/data/SceneLib2.cfg

input.mode = 0; input.name = MY_IMAGE_DIRECTORY/TestSeqMonoSLAM;

these are default camera parameters for the example image sequence

cam.width = 320; cam.height = 240; cam.fku = 195; cam.fkv = 195; cam.u0 = 162; cam.v0 = 125; cam.kd1 = 9e-06; cam.sd = 1;

1-2. Modify the configuration file to use a USB camera $ gedit MY_WORK_DIRECTORY/SceneLib2/data/SceneLib2.cfg

input.mode = 1;

change [number] to your camera (e.g. mine is video0)

input.name = convert:[fmt=RGB24]//v4l:///dev/video[number];

these are default camera parameters for (Logitech V-U0009),

not calibrated properly, but it works for now

cam.width = 320; cam.height = 240; cam.fku = 195; cam.fkv = 195; cam.u0 = 162; cam.v0 = 125; cam.kd1 = 1e-12; cam.sd = 1;

  1. Run MonoSlamSceneLib1 cdMYWORKDIRECTORY/SceneLib2/BUILD/examplescd MY_WORK_DIRECTORY/SceneLib2/BUILD/examples ./MonoSlamSceneLib1

  • Known issues *

There are known issues, and they will be resolved as soon as possible.

  • Detected features are slightly different to the original version's.
  • Most of member functions and variables are currently public for convenient debugging, and they will be properly encapsulated later.

  • Thanks to *

I really appreciate Professor Andrew Davison for sharing his great achievement, and I promise him that I will share every findings based on this to help others who are interested in this field as he is doing continuously in various ways. Thank you.