Giter Site home page Giter Site logo

hanmekim / scenelib2 Goto Github PK

View Code? Open in Web Editor NEW
352.0 42.0 199.0 155 KB

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

License: Other

C++ 97.99% CMake 2.01%

scenelib2's Introduction

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

scenelib2's People

Contributors

hanmekim avatar limhyon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scenelib2's Issues

Found possible bug when normalizing quaternion

Thanks for this amazing work leading the trend for monocular SLAM!

I found two possible bugs in the part that normalizing the quaternion after EKF. Please check and correct me if I was wrong.

  • the Jacobian for dq_norm_by_dq. Specifically, in the function dqi_by_dqi() and dqi_by_dqj() in motion_model.cpp, the "qq" should all be "sqrt(qq)", according to my derivation

Monoslam_四元数归一化Jacobian

  • the quaternion is not successfully normalized in function func_xvnorm_and_dxvnorm_by_dxv in motion_model.cpp. After this function , the quaternion in state vector is still not an unit quaternion. In function "func_xvnorm_and_dxvnorm_by_dxv",
    Tempqb should be divided by its norm before passing its value to "xvnorm"

xvnormRES_(3) = Tempqb.w();
xvnormRES_(4) = Tempqb.x();
xvnormRES_(5) = Tempqb.y();
xvnormRES_(6) = Tempqb.z();
image

When I run the Scenlib2, the quaternion norm is increasing by the time, this value is close to 1 during a short time, so the performance is not infected significantly. But when running in a long period, this could be a serious problem.

Compilation and test on Debian 9 x64

Hi Kim,
I've successfully compiled and used Scenelib2 on Debian 9 x64 following your instruction and used with the test sequence.

I've upgraded open cv version to opencv-2.4.13.6 (downloaded directly from OpenCv site) after some compilation errors on my machine (probably for the update packages installed by apt-get).

Also, to avoid some NOTFOUND cmake errors , e.g:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. ... GLUT_Xi_LIBRARY (ADVANCED) ... GLUT_Xmu_LIBRARY (ADVANCED) ...

you need to add libxmu and libxi-dev using package manager.

debian9scenelib2

Thank you for update the original scenelib. I tried to compile and use the old version without success.

Error running example

Hi,
I am trying to run examples/MonoSlamSceneLib1 on mac osx 10.10. After building sucsessfully I get this:

Tyler@Tylers-MBP ~/dev/SceneLib2/SceneLib2/BUILD/examples:  ./MonoSlamSceneLib1
    libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: provided directory      doesn't exist!
    [1]    81348 abort      ./MonoSlamSceneLib1 

I have no clue what that error actually means ( what directory? ) and googling didn't help. Maybe you would know what to do with it?

update:
When I open the file by double clicking it, I also get:

Unable to open '../../data/SceneLib2.cfg' for configuration data

in addition to the above. The file is there, I can open it with vim and the permissions are 777.

Thanks for your attention,
Petr

SceneLib2 build errors

Hi,

   All the previous installations before SceneLib2 worked good. After executing $cmake .. in the build directory of SceneLib2, the following errors occurred:

 Build type not set (defaults to debug)

-DCMAKE_BUILD_TYPE=Release for release
-- OpenCV ARCH:
-- OpenCV RUNTIME:
-- OpenCV STATIC: OFF
CMake Warning at /home/meng/opencv/cmake/OpenCVConfig.cmake:161 (message):
Found OpenCV Windows Pack but it has not binaries compatible with your
configuration.

You should manually point CMake variable OpenCV_DIR to your build of OpenCV
library.
Call Stack (most recent call first):
scenelib2/CMakeLists.txt:10 (FIND_PACKAGE)

CMake Error at scenelib2/CMakeLists.txt:10 (FIND_PACKAGE):
Found package configuration file:

/home/meng/opencv/cmake/OpenCVConfig.cmake

but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be
NOT FOUND.

-- Configuring incomplete, errors occurred!
See also "/home/meng/workspace/MonoSLAM2/SceneLib2/build/CMakeFiles/CMakeOutput.log".

Could anyone provide some suggestions? Thanks in advance!

Classes' encapsulation.

Most of member functions and variables are currently public for convenient debugging, and they will be properly encapsulated later.

compiling error, using Pangolin headers

Hi,
when I build the project using make, I have this error:
/usr/local/include/pangolin/var/varvalue.h: In instantiation of ‘void pangolin::VarValue::Init() [with T = int]’:
/usr/local/include/pangolin/var/varvalue.h:56:14: required from ‘pangolin::VarValue::VarValue(const T&) [with T = int]’
/usr/local/include/pangolin/var/var.h:169:20: required from ‘pangolin::Var::Var(const string&, const T&, bool) [with T = int; std::string = std::basic_string]’
/home/salah/linaro/SceneLib2/SceneLib2/scenelib2/monoslam.cpp:1584:94: required from here
/usr/local/include/pangolin/var/varvalue.h:100:23: error: ‘class pangolin::VarValue’ has no member named ‘str’
this->str = (VarValueTstd::string*)this;
^
/usr/local/include/pangolin/var/varvalue.h:103:23: error: ‘class pangolin::VarValue’ has no member named ‘str’
this->str = str_ptr;

shall I change the line 108 of the header file varvalue.h

VarValueTstd::string* str_ptr;

to

VarValueTstd::string* str;

if not what should I do?

libscenelib2.so: undefined reference to `glutBitmapCharacter'

Dear author,

When I compile the example, I have the following errors,

libscenelib2.so: undefined reference to `glutBitmapHelvetica12'

libscenelib2.so: undefined reference to `glutBitmapCharacter'

libscenelib2.so: undefined reference to `glutBitmapHelvetica18'

Could you help me?

Best Regards,
Jack

Camera calibration problem

Hello.

I successfully ran the example with a handled USB webcam, but the feature tracking and pose estimation were terrible. Then I ran the example on provided image files, and it worked well. So I guess the problem is camera calibration.

I am confused with the camera parameters in SceneLib2.cfg, because usually there are 4 intrinsic matrix parameters and 5 distortion parameters but actually there are 4 intrinsic matrix parameters and 2 distortion parameters (I guess). Why ?

Besides, my camera provide 640x480 image size, and in usbcam_grabber it will be resized to 320x240. So what should I do about my camera calibration parameters ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.