/SceneLib2

SceneLib2 is an open-source C++ library for SLAM originally designed and implemented by Professor Andrew Davison at Imperial College London.

Primary LanguageC++OtherNOASSERTION

==========================================
 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

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
 $ sudo apt-get install build-essential
 $ sudo apt-get install git cmake
 $ sudo 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
 $ cd MY_EXTERNAL_LIBRARIES_DIRECTORY
 $ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2
 $ tar xvf OpenCV-2.4.2.tar.bz2
 $ cd OpenCV-2.4.2
 $ mkdir BUILD
 $ cd BUILD
 $ cmake ..
 $ make -j4
 $ sudo make install

5. Install Pangolin
 $ cd MY_EXTERNAL_LIBRARIES_DIRECTORY
 $ git clone https://github.com/stevenlovegrove/Pangolin.git
 $ cd Pangolin
 $ mkdir BUILD
 $ cd BUILD
 $ cmake ..
 $ make -j4
 $ sudo make install

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

7. Download an example image sequence
 $ cd 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;

2. Run MonoSlamSceneLib1
 $ cd 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.