From 954432241d31b8d2a2412be1187f568efe10bebd Mon Sep 17 00:00:00 2001 From: joanvallve <jvallve@iri.upc.edu> Date: Tue, 21 Jan 2025 17:25:42 +0100 Subject: [PATCH] [skip ci] wip --- include/core/processor/motion_provider.h | 25 +++++++++++++----------- src/problem/problem.cpp | 18 ++++++++++++----- src/processor/motion_provider.cpp | 4 ++-- src/processor/processor_base.cpp | 5 +++++ test/gtest_motion_provider.cpp | 6 +++--- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/include/core/processor/motion_provider.h b/include/core/processor/motion_provider.h index 4b2ddb5f2..3a2eb71de 100644 --- a/include/core/processor/motion_provider.h +++ b/include/core/processor/motion_provider.h @@ -45,7 +45,7 @@ class MotionProvider VectorComposite getOdometry() const; void setOdometry(const VectorComposite&); - bool isStateGetter() const; + bool isStateProvider() const; int getOrder() const; void setOrder(int); @@ -66,7 +66,8 @@ class MotionProvider protected: TypeComposite state_types_; - YAML::Node params_motion_provider_; + bool is_state_provider_; + double state_provider_order_; private: VectorComposite odometry_; @@ -74,7 +75,9 @@ class MotionProvider }; inline MotionProvider::MotionProvider(const TypeComposite& _state_types, const YAML::Node& _params) - : state_types_(_state_types), params_motion_provider_(Clone(_params)) + : state_types_(_state_types), + is_state_provider_(_params["state_provider"].as<bool>()), + state_provider_order_(_params["state_provider_order"].as<double>()) { checkTypeComposite(_state_types); } @@ -86,23 +89,23 @@ namespace wolf { inline MotionProvider::~MotionProvider() {} -inline bool MotionProvider::isStateGetter() const +inline bool MotionProvider::isStateProvider() const { - return params_motion_provider_["state_provider"].as<bool>(); + return is_state_provider_; } inline int MotionProvider::getOrder() const { - if (not isStateGetter()) - throw std::runtime_error("MotionProvider::getOrder: motion provider not state getter, doesn't have order"); - return params_motion_provider_["state_provider_order"].as<int>(); + if (not isStateProvider()) + throw std::runtime_error("MotionProvider::getOrder: not a motion provider, doesn't have order"); + return state_provider_order_; } inline void MotionProvider::setOrder(int _order) { - if (not isStateGetter()) - throw std::runtime_error("MotionProvider::getOrder: motion provider not state getter, cannot have order"); - params_motion_provider_["state_provider_order"] = _order; + if (not isStateProvider()) + throw std::runtime_error("MotionProvider::getOrder: not a motion provider, cannot have order"); + state_provider_order_ = _order; } } /* namespace wolf */ diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 6d4bbe712..6dd69ff8e 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -163,17 +163,18 @@ ProblemPtr Problem::autoSetup(YAML::Node _param_node, } // SENSORS =============================================================================== - // load plugin if sensor is not registered WOLF_DEBUG("Installing sensors..."); for (auto sensor_n : _param_node["sensors"]) problem->installSensor(sensor_n); // PROCESSORS =============================================================================== - // load plugin if processor is not registered WOLF_DEBUG("Installing processors..."); - for (auto processor_n : _param_node["processors"]) problem->installProcessor(processor_n); + for (auto processor_n : _param_node["processors"]) + { + WOLF_DEBUG("Installing processor with the following YAML::Node:\n", processor_n); + problem->installProcessor(processor_n); + } // MAP (optional) =============================================================================== - // Default MapBase WOLF_DEBUG("Creating map..."); // load plugin if map is not registered if (not FactoryMapNode::isCreatorRegistered(_param_node["map"]["type"].as<std::string>())) @@ -313,16 +314,21 @@ ProcessorBasePtr Problem::installProcessor(const YAML::Node& _processor_node, st } // Create processor (with derived class validation) ProcessorBasePtr prc_ptr = FactoryProcessorNode::create(processor_type, _processor_node, _schema_folders); + WOLF_DEBUG("Processor created: ", prc_ptr->getName()); if (not prc_ptr) throw std::runtime_error("Processor could not be created."); // Dimension check + WOLF_DEBUG("Checking dimension compatible: ", prc_ptr->getName()); if (prc_ptr->getDimCompatible() != 0 and prc_ptr->getDimCompatible() != this->getDim()) throw std::runtime_error("Processor not compatible with the Problem dimension."); // Link + WOLF_DEBUG("Configuring: ", prc_ptr->getName()); prc_ptr->configure(sen_ptr); + WOLF_DEBUG("linking: ", prc_ptr->getName(), " with ", sen_ptr->getName()); prc_ptr->link(sen_ptr); + WOLF_DEBUG("Processor installed correctly - ", prc_ptr->getName()); return prc_ptr; } @@ -374,6 +380,7 @@ ProcessorBasePtr Problem::installProcessor(SensorBasePtr _sensor_corr prc_ptr->configure(_sensor_corresponding); prc_ptr->link(_sensor_corresponding); + WOLF_DEBUG("Processor installed: ", prc_ptr->getName()); return prc_ptr; } @@ -771,8 +778,9 @@ void Problem::setTreeManager(TreeManagerBasePtr _gm) void Problem::addMotionProvider(MotionProviderPtr _motion_provider_ptr) { + WOLF_DEBUG("Adding MotionProvider processor with priority = ", _motion_provider_ptr->getOrder()); // Check if is state getter - if (not _motion_provider_ptr->isStateGetter()) + if (not _motion_provider_ptr->isStateProvider()) { WOLF_WARN("adding a MotionProvider processor with state_provider=false. Not adding this processor"); return; diff --git a/src/processor/motion_provider.cpp b/src/processor/motion_provider.cpp index c943858c9..4a11336ee 100644 --- a/src/processor/motion_provider.cpp +++ b/src/processor/motion_provider.cpp @@ -25,9 +25,9 @@ using namespace wolf; void MotionProvider::addToProblem(ProblemPtr _prb_ptr, MotionProviderPtr _motion_ptr) { - WOLF_DEBUG_COND(not isStateGetter(), + WOLF_DEBUG_COND(not isStateProvider(), "MotionProvider processor with 'state_provider'=false. Not adding this processor"); - if (isStateGetter()) + if (isStateProvider()) { _prb_ptr->addMotionProvider(_motion_ptr); } diff --git a/src/processor/processor_base.cpp b/src/processor/processor_base.cpp index 10b3e1a58..b519c7f61 100644 --- a/src/processor/processor_base.cpp +++ b/src/processor/processor_base.cpp @@ -146,14 +146,19 @@ void ProcessorBase::link(SensorBasePtr _sen_ptr) if (_sen_ptr) { + WOLF_DEBUG("adding processor to sensor"); _sen_ptr->addProcessor(shared_from_this()); + WOLF_DEBUG("set sensor to processor"); this->setSensor(_sen_ptr); + WOLF_DEBUG("set problem to processor"); this->setProblem(_sen_ptr->getProblem()); + WOLF_DEBUG("done!"); } else { WOLF_WARN("Linking Processor ", id(), " to a nullptr"); } + WOLF_DEBUG("done!!"); } void ProcessorBase::setProblem(ProblemPtr _problem) diff --git a/test/gtest_motion_provider.cpp b/test/gtest_motion_provider.cpp index cc6aa5361..abf74cb9f 100644 --- a/test/gtest_motion_provider.cpp +++ b/test/gtest_motion_provider.cpp @@ -93,9 +93,9 @@ TEST_F(MotionProviderTest, install) ASSERT_TRUE(mp3 != nullptr); // well configured - ASSERT_FALSE(mp1->isStateGetter()); - ASSERT_TRUE(mp2->isStateGetter()); - ASSERT_TRUE(mp3->isStateGetter()); + ASSERT_FALSE(mp1->isStateProvider()); + ASSERT_TRUE(mp2->isStateProvider()); + ASSERT_TRUE(mp3->isStateProvider()); ASSERT_EQ(mp2->getOrder(), 1); ASSERT_EQ(mp3->getOrder(), 2); // If duplicated priority, 2nd is changed to +1 priority. A WARN should be raised. ASSERT_TRUE(mp1->getStateTypes().has('P')); -- GitLab