Robust Noise Models

M-Estimators

Comparing kernel width

For all comparisons provided yesterday, the kernel width for all m-estimators was fixed at 10. To see how the kernel width affects both the final solution accuracy and convergence time, a comparison was conducted where the only varied parameter was the Cauchy kernel width.



The number of iterations required before L.M. reached a stop criterion and final graph error is shown in the table below.

Kernel Width Num. Iterations $\mathcal{X}^2$
K = 1 149 1677.9
K = 5 460 2608.1
K = 10 136 3664.5
K = 15 1462 5081.5


So, it’s obvious that the kernel width can dramatically affect both the solution accuracy and convergence time. At some point in the future I will run a similar study with all m-estimators.



Robust Graphical Methods

Now, I’m going to move from testing traditional m-estimator weighting schemes to more recent weight schemes developed specifically for navigation applications. These methods include switchable constraints, max-mixture, and Realizing, Reversing, Recovering.



Running g2o with external library

g2o_viewer provides a flag, typeslib, to allow for the easy integration of external libraries.

Example — max-mixtues


$ ~/g2o_viewer -typeslib path-to-max-mixture/lib/libg2o_max_mix_core.so dataset.g2o



Switchable Constraints

Getting switchable contraints to run on Ubuntu 16.04


$ cd ~/git
$ git clone https://github.com/christiankerl/vertigo.git
$ cd vertigo
$ mkdir build; cd build;
$ export G2O_INCLUDE_DIR='~/Documents/git/g2o/g2o/core'
$ export G2O_LIBRARIES='~/Documents/git/g2o/lib'
$
$ EDITOR ~/g2o/g2o/config.h

paste the following lines in config.h 

    #ifndef G2O_CONFIG_H
    #define G2O_CONFIG_H

    #ifdef __cplusplus
        #include <g2o/core/eigen_types.h>
    #endif

    #endif


$ EDITOR max_mixture/CMakeLists.txt

    copy the following line into CMakeLists.txt so that gcc knows to 
    compile the library with c++11. 


    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

$ cmake ../; make 

Switchable Constraints Test 1

To test switchable constraints, 100 false loop-closure constraints were added to the Manhattan 3500 data-set. The video below shows both the switchable constraints and traditional $L^2$ optimization ( switch constraints is shown on left ) attempting to minimize the graphs total error when the false loop-closures are present.



Max-Mixtues

Getting max-mixtures to run on Ubuntu 16.04


$ cd ~/git
$ git clone https://github.com/agpratik/max-mixture.git
$ cd max-mixture
$ mkdir build; cd build;
$ export G2O_ROOT='~/Documents/git/g2o'
$ EDITOR max_mixture/CMakeLists.txt

copy the following line into CMakeLists.txt so that gcc knows to 
compile the library with c++11. 


set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

$ cmake ../; make

Max-Mixture Test 1

To test Max-Mixture, 100 false loop-closure constraints were added to the Manhattan 3500 data-set. The video below shows both the max-mix and traditional $L^2$ optimization ( max-mix is shown on left ) attempting to minimize the graphs total error when the false loop-closures are present.



Max-Mixture Vs. Switchable Constraints

A side by side comparision of max-mix and switch constrats was conducted. For this comparision, 1000 false loop-closure constraints were added to the Manhattan 3500 data-set. The video below shows the side by side optimization.

Next Steps

Test RRR algorithm using g2o and manhattan dataset