Git Product home page Git Product logo

scenelib2's Introduction

MonoSLAM 扩展卡尔曼滤波 更新 相机特征点法得到的位姿

Extended Kalman Filter based Monocular SLAM

参考 EKF+ Monocular SLAM

Real-Time Single Camera SLAM  单目摄像头的3D运动轨迹的算法
本文设计了一种可以实时复现在未知场景里随机运动的单目摄像头的3D运动轨迹的算法。
我们叫这个系统为MonoSLAM,它是第一个成功地利用一个移动端的不可控制的摄像头获得“纯粹的视觉”的系统
,在用移动的方法无法预知接口的情况下可以达到实时且无漂亮的表现。
这个方法的核心是在一个概率框架内实时在线地创建一些稀疏但持久的自然landmark。 
关键贡献点包括一种映射和测量的积极的方式,一种为摄像头平滑运动设计的通用移动模型的使用,
以及单目特征初始化和特征方向估计的解决方案。
综合以上,我们设计了非常有效和鲁棒的算法,
在普通PC和摄像头可以运行到30HZ。 这些工作扩展了robotic系统的范围,也开辟了SLAM在其中应用的大门。
最后我们把MonoSLAM应用于高性能全自由度的仿人机器人和人手持摄像头的增强现实中。

扩展卡尔曼滤波

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

  1. 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

ewenwan avatar hanmekim avatar limhyon avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

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.