15 #ifndef NAV2_UTIL__NODE_UTILS_HPP_
16 #define NAV2_UTIL__NODE_UTILS_HPP_
20 #include "rclcpp/rclcpp.hpp"
21 #include "rcl_interfaces/srv/list_parameters.hpp"
36 std::string sanitize_node_name(
const std::string & potential_node_name);
44 std::string add_namespaces(
const std::string & top_ns,
const std::string & sub_ns =
"");
57 std::string generate_internal_node_name(
const std::string & prefix =
"");
69 rclcpp::Node::SharedPtr generate_internal_node(
const std::string & prefix =
"");
80 std::string time_to_string(
size_t len);
91 template<
typename NodeT>
92 void declare_parameter_if_not_declared(
94 const std::string & param_name,
95 const rclcpp::ParameterValue & default_value,
96 const rcl_interfaces::msg::ParameterDescriptor & parameter_descriptor =
97 rcl_interfaces::msg::ParameterDescriptor())
99 if (!node->has_parameter(param_name)) {
100 node->declare_parameter(param_name, default_value, parameter_descriptor);
112 template<
typename NodeT>
113 void declare_parameter_if_not_declared(
115 const std::string & param_name,
116 const rclcpp::ParameterType & param_type,
117 const rcl_interfaces::msg::ParameterDescriptor & parameter_descriptor =
118 rcl_interfaces::msg::ParameterDescriptor())
120 if (!node->has_parameter(param_name)) {
121 node->declare_parameter(param_name, param_type, parameter_descriptor);
134 template<
typename NodeT>
135 std::string get_plugin_type_param(
137 const std::string & plugin_name)
139 declare_parameter_if_not_declared(node, plugin_name +
".plugin", rclcpp::PARAMETER_STRING);
140 std::string plugin_type;
142 if (!node->get_parameter(plugin_name +
".plugin", plugin_type)) {
144 node->get_logger(),
"Can not get 'plugin' param value for %s", plugin_name.c_str());
147 }
catch (rclcpp::exceptions::ParameterUninitializedException & ex) {
148 RCLCPP_FATAL(node->get_logger(),
"'plugin' param not defined for %s", plugin_name.c_str());
161 template<
typename NodeT1,
typename NodeT2>
162 void copy_all_parameters(
const NodeT1 & parent,
const NodeT2 & child)
164 using Parameters = std::vector<rclcpp::Parameter>;
165 std::vector<std::string> param_names = parent->list_parameters({}, 0).names;
166 Parameters params = parent->get_parameters(param_names);
167 for (Parameters::const_iterator iter = params.begin(); iter != params.end(); ++iter) {
168 if (!child->has_parameter(iter->get_name())) {
169 child->declare_parameter(iter->get_name(), iter->get_parameter_value());