Testing Robust Noise Models --- Continued
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