From a43e7415166b0d68299caf700b33f48646a2fd42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Sol=C3=A0?= <jsola@iri.upc.edu> Date: Sat, 13 Jun 2020 19:26:48 +0200 Subject: [PATCH] Fix PM::getState(structure) --- src/processor/processor_motion.cpp | 26 ++++++++++++++++++-------- test/gtest_processor_motion.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index ed53c1ade..0a7722451 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -491,11 +491,16 @@ VectorComposite ProcessorMotion::getState(const StateStructure& _structure) cons else { - // remove states not requested - for (const auto& pair_key_vec : state) + // remove states not requested by structure + auto pair_key_vec_it = state.begin(); + while (pair_key_vec_it != state.end()) { - if (_structure.find(pair_key_vec.first) == std::string::npos) - state.erase(pair_key_vec.first); + if (_structure.find(pair_key_vec_it->first) == std::string::npos) + pair_key_vec_it = state.erase(pair_key_vec_it); + + else + pair_key_vec_it ++; + } return state; } @@ -581,11 +586,16 @@ VectorComposite ProcessorMotion::getState(const TimeStamp& _ts, const StateStruc else { - // remove states not requested - for (const auto& pair_key_vec : state) + // remove states not requested by structure + auto pair_key_vec_it = state.begin(); + while (pair_key_vec_it != state.end()) { - if (_structure.find(pair_key_vec.first) == std::string::npos) - state.erase(pair_key_vec.first); + if (_structure.find(pair_key_vec_it->first) == std::string::npos) + pair_key_vec_it = state.erase(pair_key_vec_it); + + else + pair_key_vec_it ++; + } return state; } diff --git a/test/gtest_processor_motion.cpp b/test/gtest_processor_motion.cpp index bcf69745c..2bd4a5b85 100644 --- a/test/gtest_processor_motion.cpp +++ b/test/gtest_processor_motion.cpp @@ -101,6 +101,36 @@ TEST_F(ProcessorMotion_test, IntegrateStraightAutoPrior) ASSERT_MATRIX_APPROX(problem->getState().vector("PO"), (Vector3d()<<9,0,0).finished(), 1e-8); } +TEST_F(ProcessorMotion_test, getState_structure) +{ + // Prior + Vector3d x0; x0 << 0, 0, 0; + Matrix3d P0; P0.setIdentity(); + + data << 1, 0; // advance straight + data_cov.setIdentity(); + TimeStamp t(0.0); + + for (int i = 0; i<9; i++) + { + t += dt; + capture->setTimeStamp(t); + capture->setData(data); + capture->setDataCovariance(data_cov); + processor->captureCallback(capture); + WOLF_DEBUG("t: ", t, " x: ", problem->getState().vector("PO").transpose()); + } + + ASSERT_TRUE (processor->getState("P").count("P")); + ASSERT_FALSE(processor->getState("P").count("O")); + ASSERT_FALSE(processor->getState("O").count("P")); + ASSERT_TRUE (processor->getState("O").count("O")); + + WOLF_DEBUG("processor->getState(\"V\") = ", processor->getState("V")); + ASSERT_EQ (processor->getState("V").size(), 0); +} + + TEST_F(ProcessorMotion_test, IntegrateStraightFactorPrior) { -- GitLab