diff --git a/examples/SolverComparer.cpp b/examples/SolverComparer.cpp index 91c55bafc..b328ef66c 100644 --- a/examples/SolverComparer.cpp +++ b/examples/SolverComparer.cpp @@ -166,10 +166,15 @@ int main(int argc, char *argv[]) { if(!datasetName.empty()) { cout << "Loading dataset " << datasetName << endl; - string datasetFile = findExampleDataFile(datasetName); - std::pair data = - load2D(datasetFile); - datasetMeasurements = *data.first; + try { + string datasetFile = findExampleDataFile(datasetName); + std::pair data = + load2D(datasetFile); + datasetMeasurements = *data.first; + } catch(std::exception& e) { + cout << e.what() << endl; + exit(1); + } } @@ -189,7 +194,6 @@ int main(int argc, char *argv[]) { /* ************************************************************************* */ void runIncremental() { -#if 0 ISAM2 isam2; // Look for the first measurement to use @@ -264,21 +268,23 @@ void runIncremental() // Initialize the new variable if(measurement->key1() > measurement->key2()) { - if(step == 1) - newVariables.insert(measurement->key1(), measurement->measured().inverse()); - else { - Pose prevPose = isam2.calculateEstimate(measurement->key2()); - newVariables.insert(measurement->key1(), prevPose * measurement->measured().inverse()); + if(!newVariables.exists(measurement->key1())) { // Only need to check newVariables since loop closures come after odometry + if(step == 1) + newVariables.insert(measurement->key1(), measurement->measured().inverse()); + else { + Pose prevPose = isam2.calculateEstimate(measurement->key2()); + newVariables.insert(measurement->key1(), prevPose * measurement->measured().inverse()); + } } - // cout << "Initializing " << step << endl; } else { - if(step == 1) - newVariables.insert(measurement->key2(), measurement->measured()); - else { - Pose prevPose = isam2.calculateEstimate(measurement->key1()); - newVariables.insert(measurement->key2(), prevPose * measurement->measured()); + if(!newVariables.exists(measurement->key1())) { // Only need to check newVariables since loop closures come after odometry + if(step == 1) + newVariables.insert(measurement->key2(), measurement->measured()); + else { + Pose prevPose = isam2.calculateEstimate(measurement->key1()); + newVariables.insert(measurement->key2(), prevPose * measurement->measured()); + } } - // cout << "Initializing " << step << endl; } } else if(BearingRangeFactor::shared_ptr measurement = @@ -350,6 +356,8 @@ void runIncremental() } } + tictoc_print_(); + // Compute marginals //try { // Marginals marginals(graph, values); @@ -386,7 +394,6 @@ void runIncremental() // cout << e.what() << endl; //} //tictoc_print_(); -#endif } /* ************************************************************************* */