From 5a565a9a05a6f63a825314790c616ed9ec069d3f Mon Sep 17 00:00:00 2001 From: CursedRock17 Date: Mon, 15 Jan 2024 20:28:28 -0500 Subject: [PATCH 1/5] Initial Start Signed-off-by: CursedRock17 --- rclcpp/include/rclcpp/node.hpp | 8 ++++++++ .../include/rclcpp/node_interfaces/node_parameters.hpp | 4 ++++ .../rclcpp/node_interfaces/node_parameters_interface.hpp | 9 +++++++++ rclcpp/src/rclcpp/node.cpp | 6 ++++++ rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp | 8 ++++++++ 5 files changed, 35 insertions(+) diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index 50b96bbeaf..85eaa6c419 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -586,6 +586,14 @@ class Node : public std::enable_shared_from_this void undeclare_parameter(const std::string & name); + /// Load a list of parameters from a yaml parameter file.. + /** + * \param[in] yaml_name The name of the yaml file that needs to be loaded. + */ + RCLCPP_PUBLIC + void + load_parameters(const std::string & yaml_filepath); + /// Return true if a given parameter is declared. /** * \param[in] name The name of the parameter to check for being declared. diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp index ffbb400c11..2cd0049af5 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp @@ -136,6 +136,10 @@ class NodeParameters : public NodeParametersInterface void undeclare_parameter(const std::string & name) override; + RCLCPP_PUBLIC + void + load_parameters(const std::string & yaml_filepath) override; + RCLCPP_PUBLIC bool has_parameter(const std::string & name) const override; diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp index 301c1e3214..b7b70a6f66 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp @@ -115,6 +115,15 @@ class NodeParametersInterface void undeclare_parameter(const std::string & name) = 0; + /// Load a list parameters from a yaml parameter file + /** + * \sa rclcpp::Node::load_parameters + */ + RCLCPP_PUBLIC + virtual + void + load_parameters(const std::string & yaml_filepath) = 0; + /// Return true if the parameter has been declared, otherwise false. /** * \sa rclcpp::Node::has_parameter diff --git a/rclcpp/src/rclcpp/node.cpp b/rclcpp/src/rclcpp/node.cpp index c31903f2fe..5c61f7fd97 100644 --- a/rclcpp/src/rclcpp/node.cpp +++ b/rclcpp/src/rclcpp/node.cpp @@ -373,6 +373,12 @@ Node::undeclare_parameter(const std::string & name) this->node_parameters_->undeclare_parameter(name); } +void +Node::load_parameters(const std::string & yaml_filepath) +{ + this->node_parameters_->load_parameters(yaml_filepath); +} + bool Node::has_parameter(const std::string & name) const { diff --git a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp index 922ce9e4d1..57d4cce097 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp @@ -657,6 +657,14 @@ NodeParameters::undeclare_parameter(const std::string & name) parameters_.erase(parameter_info); } +void +NodeParameters::load_parameters(const std::string & yaml_filepath) +{ + auto parameters_client = std::make_shared(node_, "package_name"); + parameters_client->load_parameters(yaml_filepath); + +} + bool NodeParameters::has_parameter(const std::string & name) const { From 9fb115e4425278a1841599cc531840e84b41acf1 Mon Sep 17 00:00:00 2001 From: CursedRock17 Date: Tue, 16 Jan 2024 22:41:53 -0500 Subject: [PATCH 2/5] Add test suite Signed-off-by: CursedRock17 --- rclcpp/include/rclcpp/node.hpp | 4 ++-- .../rclcpp/node_interfaces/node_parameters.hpp | 5 +++-- .../node_parameters_interface.hpp | 5 +++-- rclcpp/src/rclcpp/node.cpp | 6 +++--- .../rclcpp/node_interfaces/node_parameters.cpp | 17 +++++++++++++---- .../node_interfaces/test_node_parameters.cpp | 14 ++++++++++++++ 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index 85eaa6c419..821d3f23ee 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -591,8 +591,8 @@ class Node : public std::enable_shared_from_this * \param[in] yaml_name The name of the yaml file that needs to be loaded. */ RCLCPP_PUBLIC - void - load_parameters(const std::string & yaml_filepath); + std::vector + load_parameters(const std::string & yaml_filepath, const std::string & node_name_); /// Return true if a given parameter is declared. /** diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp index 2cd0049af5..c03af3cd81 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp @@ -137,8 +137,9 @@ class NodeParameters : public NodeParametersInterface undeclare_parameter(const std::string & name) override; RCLCPP_PUBLIC - void - load_parameters(const std::string & yaml_filepath) override; + std::vector + load_parameters( + const std::string & yaml_filepath, const std::string & node_name_) override; RCLCPP_PUBLIC bool diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp index b7b70a6f66..4f85696ad2 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp @@ -121,8 +121,9 @@ class NodeParametersInterface */ RCLCPP_PUBLIC virtual - void - load_parameters(const std::string & yaml_filepath) = 0; + std::vector + load_parameters( + const std::string & yaml_filepath, const std::string & node_name_) = 0; /// Return true if the parameter has been declared, otherwise false. /** diff --git a/rclcpp/src/rclcpp/node.cpp b/rclcpp/src/rclcpp/node.cpp index 5c61f7fd97..0d922da0e3 100644 --- a/rclcpp/src/rclcpp/node.cpp +++ b/rclcpp/src/rclcpp/node.cpp @@ -373,10 +373,10 @@ Node::undeclare_parameter(const std::string & name) this->node_parameters_->undeclare_parameter(name); } -void -Node::load_parameters(const std::string & yaml_filepath) +std::vector +Node::load_parameters(const std::string & yaml_filepath, const std::string & node_name_) { - this->node_parameters_->load_parameters(yaml_filepath); + return this->node_parameters_->load_parameters(yaml_filepath, node_name_); } bool diff --git a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp index 57d4cce097..420ffab4fe 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp @@ -14,6 +14,7 @@ #include "rclcpp/node_interfaces/node_parameters.hpp" +#include #include #include @@ -657,12 +658,20 @@ NodeParameters::undeclare_parameter(const std::string & name) parameters_.erase(parameter_info); } -void -NodeParameters::load_parameters(const std::string & yaml_filepath) +std::vector +NodeParameters::load_parameters( +const std::string & yaml_filepath, const std::string & node_name_) { - auto parameters_client = std::make_shared(node_, "package_name"); - parameters_client->load_parameters(yaml_filepath); + rclcpp::ParameterMap parameter_map = + rclcpp::parameter_map_from_yaml_file(yaml_filepath, node_name_.c_str()); + + auto iter = parameter_map.find(node_name_); + if (iter == parameter_map.end() || iter->second.size() == 0) { + throw rclcpp::exceptions::InvalidParametersException("No valid parameter"); + } + auto params_result = set_parameters(iter->second); + return params_result; } bool diff --git a/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp b/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp index d262c67a9a..22434f8444 100644 --- a/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp +++ b/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp @@ -125,6 +125,20 @@ TEST_F(TestNodeParameters, list_parameters) list_result5.names.end()); } +TEST_F(TestNodeParameters, load_parameters) { + const uint64_t expected_param_count = 4; + auto load_node = std::make_shared( + "load_node", + "namespace", + rclcpp::NodeOptions().allow_undeclared_parameters(true)); + // load parameters + rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY}; + const std::string parameters_filepath = ( + test_resources_path / "test_node" / "load_parameters.yaml").string(); + auto load_vector = node_parameters->load_parameters(parameters_filepath, "/namespace/load_node"); + ASSERT_EQ(load_vector.size(), expected_param_count); +} + TEST_F(TestNodeParameters, parameter_overrides) { rclcpp::NodeOptions node_options; From 6fa6bcacd8b20c09bcfd2d33a93f66f973faa5bf Mon Sep 17 00:00:00 2001 From: CursedRock17 Date: Tue, 16 Jan 2024 22:50:12 -0500 Subject: [PATCH 3/5] Removing useless header Signed-off-by: CursedRock17 --- rclcpp/include/rclcpp/node.hpp | 2 +- .../rclcpp/node_interfaces/node_parameters_interface.hpp | 2 +- rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index 821d3f23ee..0999d9a69b 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -586,7 +586,7 @@ class Node : public std::enable_shared_from_this void undeclare_parameter(const std::string & name); - /// Load a list of parameters from a yaml parameter file.. + /// Load a list of parameters from a yaml parameter file. /** * \param[in] yaml_name The name of the yaml file that needs to be loaded. */ diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp index 4f85696ad2..dbc4ebcf7b 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp @@ -115,7 +115,7 @@ class NodeParametersInterface void undeclare_parameter(const std::string & name) = 0; - /// Load a list parameters from a yaml parameter file + /// Load a list parameters from a yaml parameter file. /** * \sa rclcpp::Node::load_parameters */ diff --git a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp index 420ffab4fe..91f2eff8ac 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp @@ -14,7 +14,6 @@ #include "rclcpp/node_interfaces/node_parameters.hpp" -#include #include #include From 37c14cb9cf4b79a669f28303ab4be15900d796a8 Mon Sep 17 00:00:00 2001 From: CursedRock17 Date: Sat, 3 Feb 2024 01:15:32 -0500 Subject: [PATCH 4/5] free function Signed-off-by: CursedRock17 --- .../rclcpp/copy_all_parameter_values.hpp | 26 +++++++++++++++++++ rclcpp/include/rclcpp/node.hpp | 8 ------ .../node_interfaces/node_parameters.hpp | 5 ---- .../node_parameters_interface.hpp | 10 ------- rclcpp/src/rclcpp/node.cpp | 6 ----- .../node_interfaces/node_parameters.cpp | 16 ------------ .../node_interfaces/test_node_parameters.cpp | 14 ---------- .../rclcpp/test_copy_all_parameter_values.cpp | 16 ++++++++++++ 8 files changed, 42 insertions(+), 59 deletions(-) diff --git a/rclcpp/include/rclcpp/copy_all_parameter_values.hpp b/rclcpp/include/rclcpp/copy_all_parameter_values.hpp index cc61b621e1..9a2dc21baf 100644 --- a/rclcpp/include/rclcpp/copy_all_parameter_values.hpp +++ b/rclcpp/include/rclcpp/copy_all_parameter_values.hpp @@ -15,6 +15,8 @@ #ifndef RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ #define RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ +#include + #include #include @@ -22,7 +24,9 @@ #include "rcl_interfaces/msg/parameter_descriptor.hpp" #include "rcl_interfaces/msg/set_parameters_result.hpp" +#include "rclcpp/node_interfaces/node_interfaces.hpp" #include "rclcpp/parameter.hpp" +#include "rclcpp/parameter_map.hpp" #include "rclcpp/logger.hpp" #include "rclcpp/logging.hpp" @@ -77,6 +81,28 @@ copy_all_parameter_values( } } +/// Load a list of parameters from a yaml parameter file. +/** + * \param[in] yaml_name The name of the yaml file that needs to be loaded. + * \param[in] node_interfaces The list of variadic NodeInterfaces taken as a template to set parameters for + */ +template +std::vector +load_parameters( + const std::string & yaml_filepath, NodeT node_interface) +{ + rclcpp::ParameterMap parameter_map = + rclcpp::parameter_map_from_yaml_file(yaml_filepath, node_interface->get_name()); + + auto iter = parameter_map.find(node_interface->get_name()); + if (iter == parameter_map.end() || iter->second.size() == 0) { + throw rclcpp::exceptions::InvalidParametersException("No valid parameter"); + } + auto params_result = node_interface->set_parameters(iter->second); + + return params_result; +} + } // namespace rclcpp #endif // RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index 0999d9a69b..50b96bbeaf 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -586,14 +586,6 @@ class Node : public std::enable_shared_from_this void undeclare_parameter(const std::string & name); - /// Load a list of parameters from a yaml parameter file. - /** - * \param[in] yaml_name The name of the yaml file that needs to be loaded. - */ - RCLCPP_PUBLIC - std::vector - load_parameters(const std::string & yaml_filepath, const std::string & node_name_); - /// Return true if a given parameter is declared. /** * \param[in] name The name of the parameter to check for being declared. diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp index c03af3cd81..ffbb400c11 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters.hpp @@ -136,11 +136,6 @@ class NodeParameters : public NodeParametersInterface void undeclare_parameter(const std::string & name) override; - RCLCPP_PUBLIC - std::vector - load_parameters( - const std::string & yaml_filepath, const std::string & node_name_) override; - RCLCPP_PUBLIC bool has_parameter(const std::string & name) const override; diff --git a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp index dbc4ebcf7b..301c1e3214 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_parameters_interface.hpp @@ -115,16 +115,6 @@ class NodeParametersInterface void undeclare_parameter(const std::string & name) = 0; - /// Load a list parameters from a yaml parameter file. - /** - * \sa rclcpp::Node::load_parameters - */ - RCLCPP_PUBLIC - virtual - std::vector - load_parameters( - const std::string & yaml_filepath, const std::string & node_name_) = 0; - /// Return true if the parameter has been declared, otherwise false. /** * \sa rclcpp::Node::has_parameter diff --git a/rclcpp/src/rclcpp/node.cpp b/rclcpp/src/rclcpp/node.cpp index 0d922da0e3..c31903f2fe 100644 --- a/rclcpp/src/rclcpp/node.cpp +++ b/rclcpp/src/rclcpp/node.cpp @@ -373,12 +373,6 @@ Node::undeclare_parameter(const std::string & name) this->node_parameters_->undeclare_parameter(name); } -std::vector -Node::load_parameters(const std::string & yaml_filepath, const std::string & node_name_) -{ - return this->node_parameters_->load_parameters(yaml_filepath, node_name_); -} - bool Node::has_parameter(const std::string & name) const { diff --git a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp index 91f2eff8ac..922ce9e4d1 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp @@ -657,22 +657,6 @@ NodeParameters::undeclare_parameter(const std::string & name) parameters_.erase(parameter_info); } -std::vector -NodeParameters::load_parameters( -const std::string & yaml_filepath, const std::string & node_name_) -{ - rclcpp::ParameterMap parameter_map = - rclcpp::parameter_map_from_yaml_file(yaml_filepath, node_name_.c_str()); - - auto iter = parameter_map.find(node_name_); - if (iter == parameter_map.end() || iter->second.size() == 0) { - throw rclcpp::exceptions::InvalidParametersException("No valid parameter"); - } - auto params_result = set_parameters(iter->second); - - return params_result; -} - bool NodeParameters::has_parameter(const std::string & name) const { diff --git a/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp b/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp index 22434f8444..d262c67a9a 100644 --- a/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp +++ b/rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp @@ -125,20 +125,6 @@ TEST_F(TestNodeParameters, list_parameters) list_result5.names.end()); } -TEST_F(TestNodeParameters, load_parameters) { - const uint64_t expected_param_count = 4; - auto load_node = std::make_shared( - "load_node", - "namespace", - rclcpp::NodeOptions().allow_undeclared_parameters(true)); - // load parameters - rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY}; - const std::string parameters_filepath = ( - test_resources_path / "test_node" / "load_parameters.yaml").string(); - auto load_vector = node_parameters->load_parameters(parameters_filepath, "/namespace/load_node"); - ASSERT_EQ(load_vector.size(), expected_param_count); -} - TEST_F(TestNodeParameters, parameter_overrides) { rclcpp::NodeOptions node_options; diff --git a/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp b/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp index e3020efd1e..c7fa1ec609 100644 --- a/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp +++ b/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp @@ -86,3 +86,19 @@ TEST_F(TestNode, TestParamCopyingExceptions) node2->declare_parameter("Foo1", rclcpp::ParameterValue(0.123)); EXPECT_NO_THROW(rclcpp::copy_all_parameter_values(node1, node2, override)); } + +TEST_F(TestNode, TestFileImport) +{ + const uint64_t expected_param_count = 4; + auto load_node = std::make_shared( + "load_node", + "namespace", + rclcpp::NodeOptions().allow_undeclared_parameters(true)); + + // load parameters + rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY}; + const std::string parameters_filepath = ( + test_resources_path / "test_node" / "load_parameters.yaml").string(); + auto load_vector = rclcpp::load_parameters(parameters_filepath, load_node); + ASSERT_EQ(load_vector.size(), expected_param_count); +} From 93869d7d8f74f5a0127ed7563d2d0d56ccb5b4f7 Mon Sep 17 00:00:00 2001 From: CursedRock17 Date: Mon, 5 Feb 2024 23:16:49 -0500 Subject: [PATCH 5/5] Renaming files Signed-off-by: CursedRock17 --- ...er_values.hpp => parameter_interfaces.hpp} | 32 ++++++++++++------- rclcpp/include/rclcpp/rclcpp.hpp | 2 +- rclcpp/test/rclcpp/CMakeLists.txt | 6 ++-- ...lues.cpp => test_parameter_interfaces.cpp} | 7 ++-- 4 files changed, 30 insertions(+), 17 deletions(-) rename rclcpp/include/rclcpp/{copy_all_parameter_values.hpp => parameter_interfaces.hpp} (73%) rename rclcpp/test/rclcpp/{test_copy_all_parameter_values.cpp => test_parameter_interfaces.cpp} (95%) diff --git a/rclcpp/include/rclcpp/copy_all_parameter_values.hpp b/rclcpp/include/rclcpp/parameter_interfaces.hpp similarity index 73% rename from rclcpp/include/rclcpp/copy_all_parameter_values.hpp rename to rclcpp/include/rclcpp/parameter_interfaces.hpp index 9a2dc21baf..56ad1a2c8e 100644 --- a/rclcpp/include/rclcpp/copy_all_parameter_values.hpp +++ b/rclcpp/include/rclcpp/parameter_interfaces.hpp @@ -12,19 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ -#define RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ - -#include +#ifndef RCLCPP__PARAMETER_INTERFACES_HPP_ +#define RCLCPP__PARAMETER_INTERFACES_HPP_ #include #include +#include "node_interfaces/node_base_interface.hpp" +#include "node_interfaces/node_parameters_interface.hpp" #include "rcl_interfaces/srv/list_parameters.hpp" #include "rcl_interfaces/msg/parameter_descriptor.hpp" #include "rcl_interfaces/msg/set_parameters_result.hpp" #include "rclcpp/node_interfaces/node_interfaces.hpp" +#include "rclcpp/node_interfaces/node_base_interface.hpp" +#include "rclcpp/node_interfaces/node_parameters_interface.hpp" #include "rclcpp/parameter.hpp" #include "rclcpp/parameter_map.hpp" #include "rclcpp/logger.hpp" @@ -84,25 +86,33 @@ copy_all_parameter_values( /// Load a list of parameters from a yaml parameter file. /** * \param[in] yaml_name The name of the yaml file that needs to be loaded. - * \param[in] node_interfaces The list of variadic NodeInterfaces taken as a template to set parameters for + * \param[in] node_interface The list of variadic NodeInterfaces taken as a template to set parameters for. + * \returns an instance of a parameter map. + * \throws InvalidParametersException if no valid parameters found. */ -template std::vector load_parameters( - const std::string & yaml_filepath, NodeT node_interface) + const std::string & yaml_filepath, rclcpp::node_interfaces::NodeInterfaces< + rclcpp::node_interfaces::NodeBaseInterface, + rclcpp::node_interfaces::NodeParametersInterface> node_interface) { + auto base_node = node_interface.get(); + base_node = node_interface.get_node_base_interface(); + auto parameter_node = node_interface.get(); + parameter_node = node_interface.get_node_parameters_interface(); + rclcpp::ParameterMap parameter_map = - rclcpp::parameter_map_from_yaml_file(yaml_filepath, node_interface->get_name()); + rclcpp::parameter_map_from_yaml_file(yaml_filepath, base_node->get_fully_qualified_name()); - auto iter = parameter_map.find(node_interface->get_name()); + auto iter = parameter_map.find(base_node->get_fully_qualified_name()); if (iter == parameter_map.end() || iter->second.size() == 0) { throw rclcpp::exceptions::InvalidParametersException("No valid parameter"); } - auto params_result = node_interface->set_parameters(iter->second); + auto params_result = parameter_node->set_parameters(iter->second); return params_result; } } // namespace rclcpp -#endif // RCLCPP__COPY_ALL_PARAMETER_VALUES_HPP_ +#endif // RCLCPP__PARAMETER_INTERFACES_HPP_ diff --git a/rclcpp/include/rclcpp/rclcpp.hpp b/rclcpp/include/rclcpp/rclcpp.hpp index 50af3f1a89..1a3c0d38a8 100644 --- a/rclcpp/include/rclcpp/rclcpp.hpp +++ b/rclcpp/include/rclcpp/rclcpp.hpp @@ -168,7 +168,7 @@ #include #include -#include "rclcpp/copy_all_parameter_values.hpp" +#include "rclcpp/parameter_interfaces.hpp" #include "rclcpp/executors.hpp" #include "rclcpp/guard_condition.hpp" #include "rclcpp/logging.hpp" diff --git a/rclcpp/test/rclcpp/CMakeLists.txt b/rclcpp/test/rclcpp/CMakeLists.txt index ca6c8f2adf..5e5cae395a 100644 --- a/rclcpp/test/rclcpp/CMakeLists.txt +++ b/rclcpp/test/rclcpp/CMakeLists.txt @@ -54,9 +54,9 @@ ament_add_gtest(test_client test_client.cpp) if(TARGET test_client) target_link_libraries(test_client ${PROJECT_NAME} mimick ${rcl_interfaces_TARGETS} ${test_msgs_TARGETS}) endif() -ament_add_gtest(test_copy_all_parameter_values test_copy_all_parameter_values.cpp) -if(TARGET test_copy_all_parameter_values) - target_link_libraries(test_copy_all_parameter_values ${PROJECT_NAME}) +ament_add_gtest(test_parameter_interfaces test_parameter_interfaces.cpp) +if(TARGET test_parameter_interfaces) + target_link_libraries(test_parameter_interfaces ${PROJECT_NAME}) endif() ament_add_gtest(test_create_timer test_create_timer.cpp) if(TARGET test_create_timer) diff --git a/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp b/rclcpp/test/rclcpp/test_parameter_interfaces.cpp similarity index 95% rename from rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp rename to rclcpp/test/rclcpp/test_parameter_interfaces.cpp index c7fa1ec609..339c139216 100644 --- a/rclcpp/test/rclcpp/test_copy_all_parameter_values.cpp +++ b/rclcpp/test/rclcpp/test_parameter_interfaces.cpp @@ -13,7 +13,7 @@ // limitations under the License. #include -#include "rclcpp/copy_all_parameter_values.hpp" +#include "rclcpp/parameter_interfaces.hpp" #include "rclcpp/rclcpp.hpp" class TestNode : public ::testing::Test @@ -89,6 +89,9 @@ TEST_F(TestNode, TestParamCopyingExceptions) TEST_F(TestNode, TestFileImport) { + using rclcpp::node_interfaces::NodeBaseInterface; + using rclcpp::node_interfaces::NodeParametersInterface; + const uint64_t expected_param_count = 4; auto load_node = std::make_shared( "load_node", @@ -99,6 +102,6 @@ TEST_F(TestNode, TestFileImport) rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY}; const std::string parameters_filepath = ( test_resources_path / "test_node" / "load_parameters.yaml").string(); - auto load_vector = rclcpp::load_parameters(parameters_filepath, load_node); + auto load_vector = rclcpp::load_parameters(parameters_filepath, *load_node); ASSERT_EQ(load_vector.size(), expected_param_count); }