diff --git a/examples/SolverComparer.cpp b/examples/SolverComparer.cpp index ec980b960..2f0c71a40 100644 --- a/examples/SolverComparer.cpp +++ b/examples/SolverComparer.cpp @@ -95,6 +95,7 @@ int lastStep; int nThreads; int relinSkip; bool incremental; +bool dogleg; bool batch; bool compare; bool perturb; @@ -126,6 +127,7 @@ int main(int argc, char *argv[]) { ("threads", po::value(&nThreads)->default_value(-1), "Number of threads, or -1 to use all processors") ("relinSkip", po::value(&relinSkip)->default_value(10), "Fluid relinearization check every arg steps") ("incremental", "Run in incremental mode using ISAM2 (default)") + ("dogleg", "When in incremental mode, solve with Dogleg instead of Gauss-Newton in iSAM2") ("batch", "Run in batch mode, requires an initialization from --read-solution") ("compare", po::value >()->multitoken(), "Compare two solution files") ("perturb", po::value(&perturbationNoise), "Perturb a solution file with the specified noise") @@ -141,6 +143,7 @@ int main(int argc, char *argv[]) { stats = (vm.count("stats") > 0); const int modesSpecified = int(batch) + int(compare) + int(perturb) + int(stats); incremental = (vm.count("incremental") > 0 || modesSpecified == 0); + dogleg = (vm.count("dogleg") > 0); if(compare) { const vector& compareFiles = vm["compare"].as >(); if(compareFiles.size() != 2) { @@ -233,6 +236,8 @@ int main(int argc, char *argv[]) { void runIncremental() { ISAM2Params params; + if(dogleg) + params.optimizationParams = ISAM2DoglegParams(); params.relinearizeSkip = relinSkip; params.enablePartialRelinearizationCheck = true; ISAM2 isam2(params);