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;
- Understand his MonoSLAM algorithm in code level.
- Replace older libraries (i.e. VW34, GLOW, VNL, Pthread) with newer ones (Pangolin, Eigen3, Boost).
- Support USB camera instead of IEEE1394.
- 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 *
-
Install various development related packages sudo apt-get install git cmake sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
-
Install Engen3 $ sudo apt-get install libeigen3-dev
-
Install Boost $ sudo apt-get install libboost-all-dev
-
Install OpenCV wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2 cd OpenCV-2.4.2 cd BUILD make -j4 $ sudo make install
-
Install Pangolin git clone https://github.com/stevenlovegrove/Pangolin.git mkdir BUILD cmake .. sudo make install
-
Install SceneLib2 git clone git://github.com/hanmekim/SceneLib2.git SceneLib2 mkdir BUILD cmake .. $ make -j4
-
Download an example image sequence 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;
- Run MonoSlamSceneLib1 ./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.