Giter VIP home page Giter VIP logo

maks's Introduction

MAKS - Motion Averaging

MAKS contains routines for pose graph optimization and rotation averaging.

Dependencies

  • Eigen : Header-only library used for matrix operations and linear algebra solvers.
  • Intel® oneAPI MKL : Free proprietary math library.

Compiling (C++)

The first thing you need to know is that the MATLAB code is independent from C++. So no need to compile anything!

The C++ code depends on the Eigen library for matrix operations and Intel® oneApi MKL for the PARDISO sparse solvers and BLAS.

We provide a (hopefully) fast way of compiling everything. Just run.
source install.sh

This script will try to locate everything needed and compile the code with either icc or g++.
If you run into trouble, edit the paths for Eigen and for your installation of oneAPI MKL in the shell script.

The executable has the name ravess_example.

To run:
./ravess_example ../data/sphere_SO3.g2o

References

[1] Gabriel Moreira, Manuel Marques and João Paulo Costeira. Rotation Averaging in a Split Second: A Primal-Dual Method and a Closed-Form for Cycle Graphs. Internacional Conference on Computer Vision (ICCV), 2021. [PDF] [Video]
[2] Gabriel Moreira, Manuel Marques and João Paulo Costeira. Fast Pose Graph Optimization via Krylov-Schur and Cholesky Factorization. IEEE/CVF Winter Conference on Applications of Computer Vision (WACV), 2021. [Video #1] [Video #2] [Video #3]

Datasets

The datasets are provided as .g2o files. You will find certain datasets with a naming convention like "_SO3.g2o". These were the ones used in our ICCV paper [1]. The difference between e.g., sphere.g2o and sphere_SO3.g2o is that the latter was cleaned of repeated edges and has no vertex/node information, only edge measurements.

Some of the original datasets can be found here:

[3] L. Carlone, R. Tron, K. Daniilidis, and F. Dellaert. Initialization Techniques for 3D SLAM: a Survey on Rotation Estimation and its Use in Pose Graph Optimization. In IEEE Intl. Conf. on Robotics and Automation (ICRA), pages 4597-4604, 2015.
[4] L. Carlone, D. M. Rosen, G. C. Calafiore, J. J. Leonard, and F. Dellaert. Lagrangian Duality in 3D SLAM: Verification Techniques and Optimal Solutions. In IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS), 2015.

Gabriel Moreira July 2022

maks's People

Contributors

gabmoreira avatar rjanvier 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

Watchers

 avatar  avatar  avatar  avatar

maks's Issues

PardisoSimplicialLDLT vs Eigen::SimplicialLDLT

Hello,
thank you for making your code public it's indeed the fastest rotation averaging method I know.
I have a small question regarding the use of MKL solver vs. Eigen solver.
I have adapted your code by replacing PardisoLDLT solver by what I think is an Eigen equivalent (Eigen::SimplicalLDLT). Eigen solver is ok on small size datasets. But apart for the speed difference (MKL solver if of course faster) I notice your code with Eigen solver plugin in produce wrong results on some medium to big datasets (lot of rotations putted at identity). So my questions are : have you already tested your code with Eigen solvers ? Have you choosen Pardiso only for speed or are there some accuracy difference ? is there anything that need to be tuned to make it work with Eigen ?
thank in advance !

IRLS-MAKS

Hi. Nice work!

Could you tell me which part in the code you implemented IRLS you described in the paper?

I was looking for it, but couldn't find it.

Insights into the methodology

Hi,
First of all thanks for the code, I've tested it out, it seems to work well. I've used it to estimate global rotation and translation (which would map a 3d coordinate from world to cam) from relative rotation/translation(which would map a point from image 1 to image2) of image pairs (estimated from epipolar geometry) I've had to invert the relative Rigid body transformation before converting it into the g2ofile and passing it as an input to maks to get global transformations which seem to be very reasonable.

I was wondering if you could share the paper as and when it becomes available, or any other resource which would help me better understand how the pose-graph optimization is being done.

Thanks again.

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.