david-m-rosen / SE-Sync

An implementation of the SE-Sync algorithm for synchronization over the special Euclidean group.
GNU Lesser General Public License v3.0
375 stars 80 forks source link

can se-sync work with factor graph generated with GSAM ? #28

Closed an99990 closed 1 year ago

an99990 commented 2 years ago

Hello, Thank you for your great paper ! Few more questions about how to start.

do you have any advice on how or which library is usually used to construct pose graph ?

Is Se-Sync able to optimize ongoing pose-graph or does it need the whole graph ? I am asking because i wonder if this can be used online while constructing the pose-graph (SLAM front-end).

can se-sync work with factor graph generated with GSAM ?

Thank you

david-m-rosen commented 1 year ago

Hi @an99990,

Thanks for your interest in the project! (And apologies for the long delay in getting back to you ... )

do you have any advice on how or which library is usually used to construct pose graph ?

There is a huge literature on how to construct the graphical representation of a SLAM problem from raw sensor data, much more than I could do justice in a brief Github comment (although the keywords "SLAM" and "front-end" are indeed the ones you should reference to learn more!) There are also many different kinds of algorithms used to do this, depending upon the kind(s) of data being processed (e.g. laser, monocular- and/or stereo-vision, etc.). Most off-the-shelf SLAM systems (e.g. ORB-SLAM) come with specific choices of all of these (numerous) methods tightly integrated into a single product that is designed for a specific use case (e.g. visual-inertial SLAM with monocular or stereocameras).

If you'd like to try building your own system instead (possibly using SE-Sync as the back-end PGO optimizer), you might consider checking out my colleague @jlblancoc's MRPT project. As I understand it, the goal of this work is to provide a set of interoperable building blocks that make it easy to assemble SLAM systems using common choices for each algorithmic component; you might find these useful if your goal is to construct pose-graph models from raw sensory inputs that can then be handed off to SE-Sync.

Is Se-Sync able to optimize ongoing pose-graph or does it need the whole graph ? I am asking because i wonder if this can be used online while constructing the pose-graph (SLAM front-end).

This specific implementation of SE-Sync is set up for batch processing, although it's fast enough (especially when initialized with a good estimate) that it could easily be used in a real-time system for global PGO, provided that local tracking (e.g. visual-inertial odometry) is performed in parallel in a separate tracking thread -- this is a pretty common setup in many visual navigation systems.

I've also co-developed a variation of SE-Sync called Distributed Certifiably Correct Pose-Graph Optimization (DC2-PGO) that is based upon the same convex (semidefinite) relaxation strategy, but that uses a different (first-order) optimization approach that is more amenable to distributed and incremental implementation (indeed, this was the back-end optimization method used in Team CoSTAR's entry to the DARPA Subterranean Challenge 😃). If you'd like to give this a try, check out this repository.

can se-sync work with factor graph generated with GSAM ?

This specific implementation is not integrated / tightly coupled with GTSAM, although it's not difficult to implement a version of SE-Sync using the GTSAM library. (In fact, Frank Dellaert and I have a recent paper in which we explicitly show how to adapt the local optimizations performed in SE-Sync to run using the Gauss-Newton framework that GTSAM is based upon.)

However, I should mention that the version of SE-Sync based on GTSAM is actually significantly slower than the version implemented in this repository, because our implementation takes advantage of some nice properties of the exact PGO Hessian to do some fancypants linear-algebraic caching and accelerations (you can check out our paper for the details ;-P).