Coder Social home page Coder Social logo

felixchenfy / monocular-visual-odometry Goto Github PK

View Code? Open in Web Editor NEW
353.0 10.0 85.0 370 KB

A simple monocular visual odometry (part of vSLAM) by ORB keypoints with initialization, tracking, local map and bundle adjustment. (WARNING: Hi, I'm sorry that this project is tuned for course demo, not for real world applications !!!)

License: MIT License

CMake 3.76% Python 2.40% C++ 93.85%
monocular-slam visual-odometry cpp opencv eigen g2o initialization tracking local-mapping slambook

monocular-visual-odometry's Introduction

Monocular Visual Odometry

A monocular visual odometry (VO) with 4 components: initialization, tracking, local map, and bundle adjustment.

I did this project after I read the Slambook.
It's also my final project for the course EESC-432 Advanced Computer Vision in NWU in 2019 March.

A demo:

In the above figure:
Left is a video and the detected key points.
Right is the camera trajectory corresponding to the left video: White line is from VO; Green line is ground truth. Red markers on white line are the keyframes. Points are the map points, where points with red color are newly triangulated.
You can download video here.

Report

My pdf-version course report is here. It has a more clear decription about the algorithms than this README, so I suggest to read it.

Directory

1. Algorithm

This VO is achieved by the following procedures/algorithms:

1.1. Initialization

Estimate relative camera pose:
Given a video, set the 1st frame(image) as reference, and do feature matching with the 2nd frame. Compute the Essential Matrix (E) and Homography Matrix (H) between the two frames. Compute their Symmetric Transfer Error by method in ORB-SLAM paper and choose the better one (i.e., choose H if H/(E+H)>0.45). Decompose E or H into the relative pose between two frames, which is the rotation (R) and translation (t). By using OpenCV, E gives 1 result, and H gives 2 results, satisfying the criteria that points are in front of camera. For E, only single result to choose; For H, choose the one that makes the image plane and world-points plane more parallel.

Keyframe and local map:
Insert both 1st and K_th frame as keyframe. Triangulate their inlier matched keypoints to obtain the points' world positions. These points are called map points and are pushed to local map.

Check Triangulation Result
If the median triangulation angle is smaller than threshold, I will abandon this 2nd frame, and repeat the above process on frame 3, 4, etc. If at frame K, the triangulation angle is large than threshold, the initialization is completed.

Change scale:
Scale the translation t to be the same length as the ground truth, so that I can make comparison with ground truth. Then, scale the map points correspondingly.

1.2. Tracking

Keep on estimating the next camera pose. First, find map points that are in the camera view. Do feature matching to find 2d-3d correspondance between 3d map points and 2d image keypoints. Estimate camera pose by RANSAC and PnP.

1.3. Local Map

Insert keyframe: If the relative pose between current frame and previous keyframe is large enough with a translation or rotation larger than the threshold, insert current frame as a keyframe.
Do feature matching between current and previous keyframe. Get inliers by epipoloar constraint. If a inlier cv::KeyPoint hasn't been triangulated before, then triangulate it and push it to local map.

Clean up local map: Remove map points that are: (1) not in current view, (2) whose view_angle is larger than threshold, (3) rarely be matched as inlier point. (See Slambook Chapter 9.4.)

Graph/Connections between map points and frames:
Graphs are built at two stages of the algorithm:

  1. After PnP, based on the 3d-2d correspondances, I update the connectionts between map points and current keypoints.
  2. During triangulation, I also update the 2d-3d correspondance between current keypoints and triangulated mappoints, by either a direct link or going through previous keypoints that have been triangulated.

1.4. Bundle Adjustment

Since I've built the graph in previous step, I know what the 3d-2d point correspondances are in all frames.

Apply optimization to the previous N frames, where the cost function is the sum of reprojection error of each 3d-2d point pair. By computing the deriviate wrt (1) points 3d pos and (2) camera poses, we can solve the optimization problem using Gauss-Newton Method and its variants. These are done by g2o and its built-in datatypes of VertexSBAPointXYZ, VertexSE3Expmap, and EdgeProjectXYZ2UV. See Slambook Chapter 4 and Chapter 7.8.2 for more details.

1.5. Other details

Image features:
Extract ORB keypoints and features. Then, a simple grid sampling is applied to obtain keypoints uniformly distributed across image.

Feature matching:
Two methods are implemented, where good match is:
(1) Feature's distance is smaller than threshold, described in Slambook.
(2) Ratio of smallest and second smallest distance is smaller than threshold, proposed in Prof. Lowe's 2004 SIFT paper.
The first one is adopted, which is easier to tune the parameters to generate fewer error matches.

2. File Structure

2.1. Folders

  • include/: c++ header files.
  • src/: c++ definitions.
  • test/: Testing scripts for c++ functions.
  • data/: Store images.

Main scripts and classes for VO are in include/my_slam/vo/. I referenced this structure from the Slambook Chapter 9.

2.2. Functions

Functions are declared in include/. Some of its folders contain a README. See the tree structure for overview:

include/
└── my_slam
    ├── basics
    │   ├── basics.h
    │   ├── config.h
    │   ├── yaml.h
    │   ├── eigen_funcs.h
    │   ├── opencv_funcs.h
    │   └── README.md
    ├── common_include.h
    ├── display
    │   ├── pcl_display.h
    │   └── pcl_display_lib.h
    ├── geometry
    │   ├── camera.h
    │   ├── epipolar_geometry.h
    │   ├── feature_match.h
    │   └── motion_estimation.h
    ├── optimization
    │   └── g2o_ba.h
    └── vo
        ├── frame.h
        ├── map.h
        ├── mappoint.h
        ├── README.md
        ├── vo_commons.h
        ├── vo_io.h
        └── vo.h

3. Dependencies

Require: OpenCV, Eigen, Sophus, g2o.
See details below:

(1) OpenCV 4.0
Tutorial for install OpenCV 4.0: link.

You may need a version newer than 3.4.5, because I used this function:
filterHomographyDecompByVisibleRefpoints, which appears in OpenCV 3.4.5.

(2) Eigen 3
It's about matrix arithmetic. See its official page. Install by:

$ sudo apt-get install libeigen3-dev

(Note: Eigen only has header files. No ".so" or ".a" files.)

(3) Sophus

It's based on Eigen, and contains datatypes for Lie Group and Lie Algebra (SE3/SO3/se3/so3).

Download this lib here: https://github.com/strasdat/Sophus. Do cmake and make. Since I failed to make install it, I manually moved “/Sophus/sophus” to “/usr/include/sophus”, and moved “libSophus.so” to “usr/lib”. Then, in my CMakeLists.txt, I add this: set (THIRD_PARTY_LIBS libSophus.so ).

If there is an error of "unit_complex_.real() = 1.;" replace it and its following line with "unit_complex_ = std::complex(1,0);"

(4) g2o

First install either of the following two packages:

$ sudo apt-get install libsuitesparse $ sudo apt-get install libsuitesparse-dev

Download here: https://github.com/RainerKuemmerle/g2o.
Checkout to the last version in year 2017. Do cmake, make, make install.

4. How to Run

Compile:

mkdir -p build lib bin   
cd build && cmake .. && make -j4 && cd ..  

Download some data:

mkdir -p data
cd data
git clone https://github.com/felixchenfy/Monocular-Visual-Odometry-Data
mv Monocular-Visual-Odometry-Data/* ./
rm Monocular-Visual-Odometry-Data
ls
# dataset_images_matlab  README.md  result  test_data

Then, take a look at the configurations in config/config.yaml. The file paths have already been configured, so you don't need to change anything at this moment.

Finally, run:

bin/run_vo config/config.yaml

5. Results

I tested the current implementation on TUM fr1_desk and fr1_xyz dataset, but both performances are bad. I guess its due to too few detected keypoints, which causes too few keypoints matches. The solution I guess is to use the ORB-SLAM's method for extracting enough uniformly destributed keypoints across different scales, and doing guided matching based on the estimated camera motion.

Despite bad performance on fr1 dataset, my program does work well on this New Tsukuba Stereo Database, whose images and scenes are synthetic and have abundant high quality keypoints. The results are shown below.

I tested my VO with 3 different settings: (1) No optimization. (2) Optimize on map points and current camera pose. (3) Optimize on previous 5 camera poses. See videos below:

(1) No optimization:

(2) Optimize on points + current pose:

(2) Optimize on prev 5 poses:

The result shows: (1) Optimization improves accuracy. (2) The estiamted trajectory is close to the ground truth.

6. Reference

(1) Slambook:
I read this Dr. Xiang Gao's Slambook before writing code. The book provides both vSLAM theory as well as easy-to-read code examples in every chapter.

The framework of my program is based on Chapter 9 of Slambook, which is a RGB-D visual odometry project. Classes declared in include/vo/ are based on this Chapter.

These files are mainly copied or built on top of the Slambook's code:

I also borrowed other codes from the slambook. But since they are small pieces and lines, I didn't list them here.

In short, the Slambook provides huge help for me and my this project.

(2) Matlab VO tutorial:
This is a matlab tutorial of monocular visual odometry. Since Slambook doesn't write a lot about monocular VO, I resorted to this Matlab tutorial for solution. It helped me a lot for getting clear the whole workflow.

The dataset I used is also the same as this Matlab tutorial, which is the New Tsukuba Stereo Database.

(3) ORB-SLAM/ORB-SLAM2 papers

I borrowed its code of the criteria for choosing Essential or Homography (for decomposition to obtain relative camera pose.). The copied functions are checkEssentialScore and checkHomographyScore in motion_estimation.h.

7. To Do

Improvements

  • In bundle adjustment, I cannot optimize (1) multiple frames and (b) map points at the same time. It returns huge error. I haven't figure out why.

  • If certain region of the image has only few keypoints, then extract more.

  • Utilize epipolar constraint to do feature matching.

monocular-visual-odometry's People

Contributors

felixchenfy 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

monocular-visual-odometry's Issues

make error

When I Try to make I get the following error:

error: invalid use of template-name ‘Sophus::SE3’ without an argument list

Sophus Version: v1.0.0

Scanning dependencies of target basics
[  3%] Building CXX object src/CMakeFiles/basics.dir/basics/basics.cpp.o
[  7%] Building CXX object src/CMakeFiles/basics.dir/basics/config.cpp.o
[ 10%] Building CXX object src/CMakeFiles/basics.dir/basics/yaml.cpp.o
[ 14%] Building CXX object src/CMakeFiles/basics.dir/basics/eigen_funcs.cpp.o
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:0:
/home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:33:1: error: invalid use of template-name ‘Sophus::SE3’ without an argument list
 Sophus::SE3 transT_cv2sophus(const cv::Mat &T_cv);
 ^~~~~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:33:1: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:13:0,
                 from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:
/usr/local/include/sophus/se3.hpp:8:7: note: ‘template<class Scalar_, int Options> class Sophus::SE3’ declared here
 class SE3;
       ^~~
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:0:
/home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:34:32: error: invalid use of template-name ‘Sophus::SE3’ without an argument list
 cv::Mat transT_sophus2cv(const Sophus::SE3 &T_sophus);
                                ^~~~~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:34:32: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:13:0,
                 from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:
/usr/local/include/sophus/se3.hpp:8:7: note: ‘template<class Scalar_, int Options> class Sophus::SE3’ declared here
 class SE3;
       ^~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:36:1: error: invalid use of template-name ‘Sophus::SE3’ without an argument list
 Sophus::SE3 transT_cv2sophus(const cv::Mat &T_cv)
 ^~~~~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:36:1: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:13:0,
                 from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:
/usr/local/include/sophus/se3.hpp:8:7: note: ‘template<class Scalar_, int Options> class Sophus::SE3’ declared here
 class SE3;
       ^~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:45:32: error: invalid use of template-name ‘Sophus::SE3’ without an argument list
 cv::Mat transT_sophus2cv(const Sophus::SE3 &T_sophus)
                                ^~~~~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:45:32: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z
In file included from /home/***/gettingToKnow/Monocular-Visual-Odometry/include/my_slam/basics/eigen_funcs.h:13:0,
                 from /home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:1:
/usr/local/include/sophus/se3.hpp:8:7: note: ‘template<class Scalar_, int Options> class Sophus::SE3’ declared here
 class SE3;
       ^~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp: In function ‘cv::Mat my_slam::basics::transT_sophus2cv(const int&)’:
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:47:38: error: request for member ‘translation’ in ‘T_sophus’, which is of non-class type ‘const int’
     Eigen::Vector3d eigen_t(T_sophus.translation());
                                      ^~~~~~~~~~~
/home/***/gettingToKnow/Monocular-Visual-Odometry/src/basics/eigen_funcs.cpp:48:38: error: request for member ‘rotation_matrix’ in ‘T_sophus’, which is of non-class type ‘const int’
     Eigen::Matrix3d eigen_R(T_sophus.rotation_matrix());
                                      ^~~~~~~~~~~~~~~
src/CMakeFiles/basics.dir/build.make:134: recipe for target 'src/CMakeFiles/basics.dir/basics/eigen_funcs.cpp.o' failed
make[2]: *** [src/CMakeFiles/basics.dir/basics/eigen_funcs.cpp.o] Error 1
CMakeFiles/Makefile2:208: recipe for target 'src/CMakeFiles/basics.dir/all' failed
make[1]: *** [src/CMakeFiles/basics.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Bug in opencv_funcs

in getPixelAt() there's a loop over the image channels. the stopping condition should be "c < 3" not "c <= 3" (it should be line #24)

g2o segment fault

hi, thanks for your code, but when running your code, the error appears:
iteration= 0 chi2= 62.333310 time= 0.000123518 cumTime= 0.000123518 edges= 210 schur= 1 lambda= 370.857826 levenbergIter= 1
iteration= 1 chi2= 62.333013 time= 7.5541e-05 cumTime= 0.000199059 edges= 210 schur= 1 lambda= 247.238551 levenbergIter= 1
iteration= 2 chi2= 62.333009 time= 8.6913e-05 cumTime= 0.000285972 edges= 210 schur= 1 lambda= 164.825701 levenbergIter= 1
iteration= 3 chi2= 62.333009 time= 3.8402e-05 cumTime= 0.000324374 edges= 210 schur= 1 lambda= 109.883800 levenbergIter= 1
iteration= 4 chi2= 62.333009 time= 5.4153e-05 cumTime= 0.000378527 edges= 210 schur= 1 lambda= 73.255867 levenbergIter= 1
iteration= 5 chi2= 62.333009 time= 3.8211e-05 cumTime= 0.000416738 edges= 210 schur= 1 lambda= 48.837245 levenbergIter= 1
iteration= 6 chi2= 62.333009 time= 6.1446e-05 cumTime= 0.000478184 edges= 210 schur= 1 lambda= 32.558163 levenbergIter= 1
[1] 30569 segmentation fault (core dumped) ./run_vo ../config/config.yaml
so, which version g2o you are using?

Template placeholder type 'const SE3' must be followed by a simple declarator-id

Error occured while make.

Template placeholder type 'const SE3' must be followed by a simple declarator-id

The error seems to have been caused by the file 'eigen_funcs.h' which gets included in the file 'eigen_funcs.cpp'.

invalid use of template-name 'Sophus::SE3' without an argument list template<class Scalar_, int Options> class Sophus::SE3

What if we don't have the ground-truth to scale the translation vector ?

Hi @felixchenfy , this is such good work :-)

I have a doubt on

Change scale:
Scale the translation t to be the same length as the ground truth so that I can make a comparison with ground truth. Then, scale the map points correspondingly

What if we don't have the ground-truth to scale the translation vector.
I know that in such cases we can estimate the relative scale by using three-views, but I don't find a good resource on it.
Can you point me out to any code that implements the relative-scale estimation ?

Thanks

实时摄像头跑MVO

非常感谢您开源您写的MVO的代码,我从您代码中学到了很多。我目前尝试使用实时摄像头跑您的程序,可是遇到了一些障碍,您尝试过使用实时摄像头跑您的程序吗?

How to get the relative travel distance without distance information and Ground Truth

We know that due to the scale indefiniteness problem, we cannot estimate the distance traveled by the camera without distance information.
However, we would like to get the relative travel distance.
Can you determine the relative travel distance of the monocular camera under the following conditions?

・Input is video image (or acceleration and gyro sensor values)
・No ground-truth
・No distance information

Segmentation fault (core dumped)

I've followed the installation guide and been able to build and make.
But I'm not able to run!

g2o Version: 20170730

Build:

user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry$ mkdir build bin lib
user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry$ cd build
user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry/build$ cmake .. -Wno-dev
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found suitable version "3.4.10", minimum required is "3.4")
-- Found CSPARSE: /usr/include/suitesparse
-- Checking for module 'eigen3'
--   Found eigen3, version 3.3.4
-- Found eigen: /usr/include/eigen3
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found Boost: /usr/include (found suitable version "1.65.1", minimum required is "1.40.0") found components: system filesystem thread date_time iostreams serialization chrono atomic regex
-- Checking for module 'libopenni'
--   Found libopenni, version 1.5.4.0
-- Found openni: /usr/lib/libOpenNI.so
-- Checking for module 'libopenni2'
--   Found libopenni2, version 2.2.0.3
-- Found OpenNI2: /usr/lib/libOpenNI2.so
-- Could NOT find ensenso (missing: ENSENSO_LIBRARY ENSENSO_INCLUDE_DIR)
** WARNING ** io features related to ensenso will be disabled
-- Could NOT find DAVIDSDK (missing: DAVIDSDK_LIBRARY DAVIDSDK_INCLUDE_DIR)
** WARNING ** io features related to davidSDK will be disabled
-- Could NOT find DSSDK (missing: _DSSDK_LIBRARIES)
** WARNING ** io features related to dssdk will be disabled
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
-- The imported target "vtkRenderingPythonTkWidgets" references the file
   "/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"
but this file does not exist.  Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
   "/usr/lib/cmake/vtk-6.3/VTKTargets.cmake"
but not all the files it references.

-- The imported target "vtk" references the file
   "/usr/bin/vtk"
but this file does not exist.  Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
   "/usr/lib/cmake/vtk-6.3/VTKTargets.cmake"
but not all the files it references.

-- Found libusb-1.0: /usr/include
** WARNING ** io features related to libusb-1.0 will be disabled
-- Checking for module 'flann'
--   Found flann, version 1.9.1
-- Found Flann: /usr/lib/x86_64-linux-gnu/libflann_cpp_s.a
-- Could NOT find ensenso (missing: ENSENSO_LIBRARY ENSENSO_INCLUDE_DIR)
** WARNING ** visualization features related to ensenso will be disabled
-- Could NOT find DAVIDSDK (missing: DAVIDSDK_LIBRARY DAVIDSDK_INCLUDE_DIR)
** WARNING ** visualization features related to davidSDK will be disabled
-- Could NOT find DSSDK (missing: _DSSDK_LIBRARIES)
** WARNING ** visualization features related to dssdk will be disabled
-- Could NOT find RSSDK (missing: _RSSDK_LIBRARIES)
** WARNING ** visualization features related to rssdk will be disabled
-- Found qhull: /usr/lib/x86_64-linux-gnu/libqhull.so
-- looking for PCL_COMMON
-- Found PCL_COMMON: /usr/lib/x86_64-linux-gnu/libpcl_common.so
-- looking for PCL_OCTREE
-- Found PCL_OCTREE: /usr/lib/x86_64-linux-gnu/libpcl_octree.so
-- looking for PCL_IO
-- Found PCL_IO: /usr/lib/x86_64-linux-gnu/libpcl_io.so
-- looking for PCL_KDTREE
-- Found PCL_KDTREE: /usr/lib/x86_64-linux-gnu/libpcl_kdtree.so
-- looking for PCL_SEARCH
-- Found PCL_SEARCH: /usr/lib/x86_64-linux-gnu/libpcl_search.so
-- looking for PCL_SAMPLE_CONSENSUS
-- Found PCL_SAMPLE_CONSENSUS: /usr/lib/x86_64-linux-gnu/libpcl_sample_consensus.so
-- looking for PCL_FILTERS
-- Found PCL_FILTERS: /usr/lib/x86_64-linux-gnu/libpcl_filters.so
-- looking for PCL_2D
-- Found PCL_2D: /usr/include/pcl-1.8
-- looking for PCL_GEOMETRY
-- Found PCL_GEOMETRY: /usr/include/pcl-1.8
-- looking for PCL_FEATURES
-- Found PCL_FEATURES: /usr/lib/x86_64-linux-gnu/libpcl_features.so
-- looking for PCL_ML
-- Found PCL_ML: /usr/lib/x86_64-linux-gnu/libpcl_ml.so
-- looking for PCL_SEGMENTATION
-- Found PCL_SEGMENTATION: /usr/lib/x86_64-linux-gnu/libpcl_segmentation.so
-- looking for PCL_VISUALIZATION
-- Found PCL_VISUALIZATION: /usr/lib/x86_64-linux-gnu/libpcl_visualization.so
-- looking for PCL_SURFACE
-- Found PCL_SURFACE: /usr/lib/x86_64-linux-gnu/libpcl_surface.so
-- looking for PCL_REGISTRATION
-- Found PCL_REGISTRATION: /usr/lib/x86_64-linux-gnu/libpcl_registration.so
-- looking for PCL_KEYPOINTS
-- Found PCL_KEYPOINTS: /usr/lib/x86_64-linux-gnu/libpcl_keypoints.so
-- looking for PCL_TRACKING
-- Found PCL_TRACKING: /usr/lib/x86_64-linux-gnu/libpcl_tracking.so
-- looking for PCL_RECOGNITION
-- Found PCL_RECOGNITION: /usr/lib/x86_64-linux-gnu/libpcl_recognition.so
-- looking for PCL_STEREO
-- Found PCL_STEREO: /usr/lib/x86_64-linux-gnu/libpcl_stereo.so
-- looking for PCL_APPS
-- Found PCL_APPS: /usr/lib/x86_64-linux-gnu/libpcl_apps.so
-- looking for PCL_IN_HAND_SCANNER
-- Found PCL_IN_HAND_SCANNER: /usr/include/pcl-1.8
-- looking for PCL_MODELER
-- Found PCL_MODELER: /usr/include/pcl-1.8
-- looking for PCL_POINT_CLOUD_EDITOR
-- Found PCL_POINT_CLOUD_EDITOR: /usr/include/pcl-1.8
-- looking for PCL_OUTOFCORE
-- Found PCL_OUTOFCORE: /usr/lib/x86_64-linux-gnu/libpcl_outofcore.so
-- looking for PCL_PEOPLE
-- Found PCL_PEOPLE: /usr/lib/x86_64-linux-gnu/libpcl_people.so
-- Found PCL: /usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_thread.so;-lpthread;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_serialization.so;/usr/lib/x86_64-linux-gnu/libboost_chrono.so;/usr/lib/x86_64-linux-gnu/libboost_atomic.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_common.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_common.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_octree.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_octree.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkftgl;vtkDICOMParser;vtkDomainsChemistry;vtkIOXML;vtkIOGeometry;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkFiltersAMR;vtkParallelCore;vtkIOLegacy;vtkFiltersFlowPaths;vtkFiltersGeneric;vtkFiltersHybrid;vtkImagingSources;vtkFiltersHyperTree;vtkFiltersImaging;vtkImagingGeneral;vtkFiltersModeling;vtkFiltersParallel;vtkFiltersParallelFlowPaths;vtkParallelMPI;vtkFiltersParallelGeometry;vtkFiltersParallelImaging;vtkFiltersParallelMPI;vtkFiltersParallelStatistics;vtkFiltersProgrammable;vtkFiltersPython;/usr/lib/x86_64-linux-gnu/libpython2.7.so;vtkWrappingPythonCore;vtkWrappingTools;vtkFiltersReebGraph;vtkFiltersSMP;vtkFiltersSelection;vtkFiltersTexture;vtkFiltersVerdict;verdict;vtkGUISupportQt;vtkInteractionStyle;vtkRenderingOpenGL;vtkImagingHybrid;vtkIOImage;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkGUISupportQtOpenGL;vtkGUISupportQtSQL;vtkIOSQL;sqlite3;vtkGUISupportQtWebkit;vtkViewsQt;vtkViewsInfovis;vtkInfovisLayout;vtkInfovisBoostGraphAlgorithms;vtkRenderingLabel;vtkViewsCore;vtkInteractionWidgets;vtkRenderingAnnotation;vtkImagingColor;vtkRenderingVolume;vtkGeovisCore;/usr/lib/x86_64-linux-gnu/libproj.so;vtkIOAMR;/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so;/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so;vtkIOEnSight;vtkIOExodus;vtkexoIIc;/usr/lib/x86_64-linux-gnu/libnetcdf_c++.so;/usr/lib/x86_64-linux-gnu/libnetcdf.so;vtkIOExport;vtkRenderingGL2PS;vtkRenderingContextOpenGL;/usr/lib/x86_64-linux-gnu/libgl2ps.so;vtkIOFFMPEG;vtkIOMovie;/usr/lib/x86_64-linux-gnu/libtheoraenc.so;/usr/lib/x86_64-linux-gnu/libtheoradec.so;/usr/lib/x86_64-linux-gnu/libogg.so;vtkIOGDAL;vtkIOGeoJSON;vtkIOImport;vtkIOInfovis;/usr/lib/x86_64-linux-gnu/libxml2.so;vtkIOLSDyna;vtkIOMINC;vtkIOMPIImage;vtkIOMPIParallel;vtkIOParallel;vtkIONetCDF;/usr/lib/x86_64-linux-gnu/libjsoncpp.so;vtkIOMySQL;vtkIOODBC;vtkIOPLY;vtkIOParallelExodus;vtkIOParallelLSDyna;vtkIOParallelNetCDF;vtkIOParallelXML;vtkIOPostgreSQL;vtkIOVPIC;VPIC;vtkIOVideo;vtkIOXdmf2;vtkxdmf2;vtkImagingMath;vtkImagingMorphological;vtkImagingStatistics;vtkImagingStencil;vtkInteractionImage;vtkLocalExample;vtkParallelMPI4Py;vtkPythonInterpreter;vtkRenderingExternal;vtkRenderingFreeTypeFontConfig;vtkRenderingImage;vtkRenderingLIC;vtkRenderingLOD;vtkRenderingMatplotlib;vtkRenderingParallel;vtkRenderingParallelLIC;vtkRenderingQt;vtkRenderingVolumeAMR;vtkRenderingVolumeOpenGL;vtkTestingGenericBridge;vtkTestingIOSQL;vtkTestingRendering;vtkViewsContext2D;vtkViewsGeovis;vtkWrappingJava;optimized;/usr/lib/x86_64-linux-gnu/libpcl_io.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_io.so;optimized;/usr/lib/x86_64-linux-gnu/libflann_cpp_s.a;debug;/usr/lib/x86_64-linux-gnu/libflann_cpp_s.a;optimized;/usr/lib/x86_64-linux-gnu/libpcl_kdtree.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_kdtree.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_search.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_search.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_sample_consensus.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_sample_consensus.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_filters.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_filters.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_features.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_features.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_ml.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_ml.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_segmentation.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_segmentation.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_visualization.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_visualization.so;optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_surface.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_surface.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_registration.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_registration.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_keypoints.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_keypoints.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_tracking.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_tracking.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_recognition.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_recognition.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_stereo.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_stereo.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_apps.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_apps.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_outofcore.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_outofcore.so;optimized;/usr/lib/x86_64-linux-gnu/libpcl_people.so;debug;/usr/lib/x86_64-linux-gnu/libpcl_people.so;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_thread.so;-lpthread;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_serialization.so;/usr/lib/x86_64-linux-gnu/libboost_chrono.so;/usr/lib/x86_64-linux-gnu/libboost_atomic.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;optimized;/usr/lib/x86_64-linux-gnu/libflann_cpp_s.a;debug;/usr/lib/x86_64-linux-gnu/libflann_cpp_s.a;vtkChartsCore;vtkCommonColor;vtkCommonDataModel;vtkCommonMath;vtkCommonCore;vtksys;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkInfovisCore;vtkFiltersExtraction;vtkCommonExecutionModel;vtkFiltersCore;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkftgl;vtkDICOMParser;vtkDomainsChemistry;vtkIOXML;vtkIOGeometry;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkFiltersAMR;vtkParallelCore;vtkIOLegacy;vtkFiltersFlowPaths;vtkFiltersGeneric;vtkFiltersHybrid;vtkImagingSources;vtkFiltersHyperTree;vtkFiltersImaging;vtkImagingGeneral;vtkFiltersModeling;vtkFiltersParallel;vtkFiltersParallelFlowPaths;vtkParallelMPI;vtkFiltersParallelGeometry;vtkFiltersParallelImaging;vtkFiltersParallelMPI;vtkFiltersParallelStatistics;vtkFiltersProgrammable;vtkFiltersPython;/usr/lib/x86_64-linux-gnu/libpython2.7.so;vtkWrappingPythonCore;vtkWrappingTools;vtkFiltersReebGraph;vtkFiltersSMP;vtkFiltersSelection;vtkFiltersTexture;vtkFiltersVerdict;verdict;vtkGUISupportQt;vtkInteractionStyle;vtkRenderingOpenGL;vtkImagingHybrid;vtkIOImage;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkGUISupportQtOpenGL;vtkGUISupportQtSQL;vtkIOSQL;sqlite3;vtkGUISupportQtWebkit;vtkViewsQt;vtkViewsInfovis;vtkInfovisLayout;vtkInfovisBoostGraphAlgorithms;vtkRenderingLabel;vtkViewsCore;vtkInteractionWidgets;vtkRenderingAnnotation;vtkImagingColor;vtkRenderingVolume;vtkGeovisCore;/usr/lib/x86_64-linux-gnu/libproj.so;vtkIOAMR;/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so;/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so;vtkIOEnSight;vtkIOExodus;vtkexoIIc;/usr/lib/x86_64-linux-gnu/libnetcdf_c++.so;/usr/lib/x86_64-linux-gnu/libnetcdf.so;vtkIOExport;vtkRenderingGL2PS;vtkRenderingContextOpenGL;/usr/lib/x86_64-linux-gnu/libgl2ps.so;vtkIOFFMPEG;vtkIOMovie;/usr/lib/x86_64-linux-gnu/libtheoraenc.so;/usr/lib/x86_64-linux-gnu/libtheoradec.so;/usr/lib/x86_64-linux-gnu/libogg.so;vtkIOGDAL;vtkIOGeoJSON;vtkIOImport;vtkIOInfovis;/usr/lib/x86_64-linux-gnu/libxml2.so;vtkIOLSDyna;vtkIOMINC;vtkIOMPIImage;vtkIOMPIParallel;vtkIOParallel;vtkIONetCDF;/usr/lib/x86_64-linux-gnu/libjsoncpp.so;vtkIOMySQL;vtkIOODBC;vtkIOPLY;vtkIOParallelExodus;vtkIOParallelLSDyna;vtkIOParallelNetCDF;vtkIOParallelXML;vtkIOPostgreSQL;vtkIOVPIC;VPIC;vtkIOVideo;vtkIOXdmf2;vtkxdmf2;vtkImagingMath;vtkImagingMorphological;vtkImagingStatistics;vtkImagingStencil;vtkInteractionImage;vtkLocalExample;vtkParallelMPI4Py;vtkPythonInterpreter;vtkRenderingExternal;vtkRenderingFreeTypeFontConfig;vtkRenderingImage;vtkRenderingLIC;vtkRenderingLOD;vtkRenderingMatplotlib;vtkRenderingParallel;vtkRenderingParallelLIC;vtkRenderingQt;vtkRenderingVolumeAMR;vtkRenderingVolumeOpenGL;vtkTestingGenericBridge;vtkTestingIOSQL;vtkTestingRendering;vtkViewsContext2D;vtkViewsGeovis;vtkWrappingJava
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/research/gettingToKnow/Monocular-Visual-Odometry/build

Make:

user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry/build$ make -j4
Scanning dependencies of target basics
[ 14%] Building CXX object src/CMakeFiles/basics.dir/basics/config.cpp.o
[ 14%] Building CXX object src/CMakeFiles/basics.dir/basics/eigen_funcs.cpp.o
[ 14%] Building CXX object src/CMakeFiles/basics.dir/basics/yaml.cpp.o
[ 14%] Building CXX object src/CMakeFiles/basics.dir/basics/basics.cpp.o
[ 17%] Building CXX object src/CMakeFiles/basics.dir/basics/opencv_funcs.cpp.o
[ 21%] Linking CXX shared library ../../lib/libbasics.so
[ 21%] Built target basics
Scanning dependencies of target optimization
Scanning dependencies of target display
Scanning dependencies of target geometry
[ 25%] Building CXX object src/CMakeFiles/geometry.dir/geometry/camera.cpp.o
[ 28%] Building CXX object src/CMakeFiles/geometry.dir/geometry/feature_match.cpp.o
[ 32%] Building CXX object src/CMakeFiles/optimization.dir/optimization/g2o_ba.cpp.o
[ 35%] Building CXX object src/CMakeFiles/display.dir/display/pcl_display.cpp.o
[ 39%] Building CXX object src/CMakeFiles/geometry.dir/geometry/epipolar_geometry.cpp.o
[ 42%] Building CXX object src/CMakeFiles/display.dir/display/pcl_display_lib.cpp.o
[ 46%] Building CXX object src/CMakeFiles/geometry.dir/geometry/motion_estimation.cpp.o
[ 50%] Linking CXX shared library ../../lib/libgeometry.so
[ 50%] Built target geometry
Scanning dependencies of target test_epipolor_geometry
[ 53%] Building CXX object test/CMakeFiles/test_epipolor_geometry.dir/test_epipolor_geometry.cpp.o
[ 57%] Linking CXX executable ../../bin/test_epipolor_geometry
[ 57%] Built target test_epipolor_geometry
[ 60%] Linking CXX shared library ../../lib/libdisplay.so
[ 60%] Built target display
[ 64%] Linking CXX shared library ../../lib/liboptimization.so
[ 64%] Built target optimization
Scanning dependencies of target vo
[ 78%] Building CXX object src/CMakeFiles/vo.dir/vo/vo_io.cpp.o
[ 78%] Building CXX object src/CMakeFiles/vo.dir/vo/frame.cpp.o
[ 78%] Building CXX object src/CMakeFiles/vo.dir/vo/vo.cpp.o
[ 78%] Building CXX object src/CMakeFiles/vo.dir/vo/vo_addFrame.cpp.o
[ 82%] Building CXX object src/CMakeFiles/vo.dir/vo/map.cpp.o
[ 85%] Building CXX object src/CMakeFiles/vo.dir/vo/mappoint.cpp.o
[ 89%] Building CXX object src/CMakeFiles/vo.dir/vo/vo_commons.cpp.o
[ 92%] Linking CXX shared library ../../lib/libvo.so
[ 92%] Built target vo
Scanning dependencies of target run_vo
[ 96%] Building CXX object CMakeFiles/run_vo.dir/run_vo.cpp.o
[100%] Linking CXX executable ../bin/run_vo
[100%] Built target run_vo
user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry/build$ cd ..

Run (ERROR):

user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry$ bin/run_vo config/config.yaml
Segmentation fault (core dumped)
user@Ubuntu1804:~/research/gettingToKnow/Monocular-Visual-Odometry$

Debug:

(gdb) run
Starting program: /home/user/research/gettingToKnow/Monocular-Visual-Odometry/bin/run_vo 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
__GI___libc_free (mem=0x331) at malloc.c:3103
3103    malloc.c: No such file or directory.
(gdb) bt
#0  __GI___libc_free (mem=0x331) at malloc.c:3103
#1  0x00007fffe6c60f65 in g2o::Factory::registerType(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, g2o::AbstractHyperGraphElementCreator*) () from /usr/local/lib/libg2o_core.so
#2  0x00007fffe67acfb2 in _GLOBAL__sub_I_types_sba.cpp () from /usr/local/lib/libg2o_types_sba.so
#3  0x00007fffff410733 in call_init (env=0x7ffffffed988, argv=0x7ffffffed978, argc=1, l=<optimized out>) at dl-init.c:72
#4  _dl_init (main_map=0x7fffff629170, argc=1, argv=0x7ffffffed978, env=0x7ffffffed988) at dl-init.c:119
#5  0x00007fffff4010ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#6  0x0000000000000001 in ?? ()
#7  0x00007ffffffedc8f in ?? ()
#8  0x0000000000000000 in ?? ()

Bundle adjustment bug

Hey,

I think there's a bug in void VisualOdometry::callBundleAdjustment()

You're looping on the last 5 frames and there's a continue if the frame has less than 3 points in the map. Right below the continue are two push_back on v_pts_2d and v_pts_to_3d that are not done when continue happen, but the index is still ith_frame which may not exist in case continue was called before.

You may want to select the appropriate frames (the last 5 frames with enough points in the map) before calling the existing code, removing the continue.

doubt

In vo.cpp at line 302 at poseEstimationPnP function.. why do you use
curr_->T_w_c_ = transRt2T(R, t).inv();
instead of
curr_->T_w_c_ =ref_->T_w_c * transRt2T(R, t).inv();
?

OpenCV 4.x+ requires enabled C++11 support

When make, it shows error: #error "OpenCV 4.x+ requires enabled C++11 support", and it seems OpenCV version lower than 3.4.0 can work, but this project recommand OpenCV version higher than 3.4.5. I try to add -DCMAKE_CXX_FLAGS="-std=c++11" but failed. And how to solve the problem above?

ORB-SLAM's method use

Hi! In README you wrote, that perfomance on TUM's datasets is bad, but you suggested that ORB-SLAM method maybe helpfull in this case. Have you tried it yet?

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.