Available on GitHub.
Robust SLAM has seen quite some attention since 2013, with several implementations of robust edge types (e.g. MaxMixture and Switchable Constraints) available as open source. As usual with research-level code, it does not get maintained so well to match new versions of dependencies, namely G2O in this case.
So, in order to facilitate replication experiments and aid in general ease-of-use for these libraries, I have forked them and published my patches to them under their original license with copyright notices and links to the original libraries. Today, these should compile and work fine with the master branch of G2O.
Apart from the patched maintenance forks of MaxMixture and Switchable Constraints, I have also included two original libraries:
The new MaxMixture implementation allows for two improvements:
These differences should make the use of MaxMixture edges in experiments much easier.
The second library implements a generic edge type that allows specification of the m-estimator (“robust kernel” in G2O) and its parameter in the G2O text file format. This is quite powerful if not all edges or all non-sequential edges should be treated with the same m-estimator. For example, it allows to only add an m-estimator for loop edges that were found by relaxing a threshold below the conservative level for appearance based methods such as FABMAP. New types are easily added thanks to C++ templates.
The generic form is:
EDGE_*_ROBUST <vertices> <kernel name> <kernel delta> <base edge info>
For example:
EDGE_SE2_ROBUST 0 1 Cauchy 1.0 1 0 0 10 0 0 10 0 10
----edge tag--- -vertices- -m-est name- -param- | ---base edge info---
The information in base edge info
is the same as in the inherited edge type, EDGE_SE2
in this case.