32#include <rclcpp/rclcpp.hpp>
44void get_ros_parameter(std::shared_ptr<rclcpp::Node>& node,
const std::string& parameter_name, T& t)
46 if(!node->has_parameter(parameter_name))
47 node->declare_parameter<T>(parameter_name);
49 if(!node->get_parameter(parameter_name,t))
51 throw std::runtime_error(
"::Error loading " + parameter_name);
63void get_ros_optional_parameter(std::shared_ptr<rclcpp::Node>& node,
const std::string& parameter_name, T& t,
const T& default_value)
65 if(!node->has_parameter(parameter_name))
66 node->declare_parameter<T>(parameter_name, default_value);
67 node->get_parameter(parameter_name,t);
76std::string get_type_name(
const std::vector<T>&)
78 if constexpr(std::is_same_v<T,std::string>)
80 return "std::vector<std::string>";
82 if constexpr(std::is_same_v<T,int64_t>)
84 return "std::vector<int64_t>";
86 if constexpr(std::is_same_v<T,double>)
88 return "std::vector<double>";
90 if constexpr(std::is_same_v<T,bool>)
92 return "std::vector<bool>";
111void get_ros_parameter(std::shared_ptr<rclcpp::Node>& node,
const std::string& parameter_name, std::vector<T>& v)
113 if(!node->has_parameter(parameter_name))
117 node->declare_parameter<std::vector<T>>(parameter_name);
119 catch (
const rclcpp::exceptions::InvalidParameterTypeException& e)
123 "sas::get_ros_parameter: List "
125 <<
" does not have expected type, a.k.a "
127 <<
", in the parameter server, checking for empty list...");
128 node->declare_parameter<std::vector<std::string>>(parameter_name);
132 if(node->get_parameter(parameter_name).get_type() == rclcpp::PARAMETER_STRING_ARRAY)
134 auto v_checker = node->get_parameter(parameter_name).as_string_array();
135 if(v_checker.size() == 1 && v_checker.at(0) ==
"EMPTY_LIST")
139 "sas::get_ros_parameter: List "
141 <<
" was loaded as an EMPTY list of type "
144 v = std::vector<T>();
149 if constexpr (not std::is_same_v<T,std::string>)
151 throw std::runtime_error(
"::Was this list, "
153 +
", supposed to be empty? \n "
154 "It should be a list such as list:[\"EMPTY_LIST\"].");
158 if(!node->get_parameter(parameter_name,v))
160 throw std::runtime_error(
"::Unable to get parameter " + parameter_name);