15 template <
typename MemT>
18 return register_param_impl<MemT>(name, param_var, std::nullopt, std::nullopt, update_cbk);
21 template <
typename MemT>
24 return register_param_impl<MemT>(name, param_var, default_value, std::nullopt, update_cbk);
27 template <
typename MemT>
31 return register_param_impl<MemT>(name, param_var, std::nullopt, valid_range, update_cbk);
34 template <
typename MemT>
38 return register_param_impl<MemT>(name, param_var, default_value, valid_range, update_cbk);
41 template <
typename MemT>
42 bool DynparamMgr::register_param_impl(
const std::string& name, MemT* param_var,
const std::optional<MemT>& default_value,
const std::optional<
range_t<MemT>>& valid_range,
const update_cbk_t<MemT>& update_cbk)
54 const bool get_success = m_pp.
getParam(resolved_name, current_value, opts);
57 m_load_successful =
false;
58 RCLCPP_ERROR_STREAM(m_node->get_logger(),
"[" << m_node->get_name() <<
"]: Could not register dynamic parameter '" << name <<
"'");
63 *param_var = current_value;
66 RCLCPP_INFO_STREAM(m_node->get_logger(),
"[" << m_node->get_name() <<
"]: Dynamic parameter '" << name <<
"':\t" << *param_var);
68 m_registered_params.emplace_back(
71 to_param_type<MemT>(),
85 template <
typename ... Types>
86 using variant_of_pointers_t = std::variant<std::add_pointer_t<Types>...>;
88 template <
typename Type>
91 template <
typename ... Types>
94 using type = variant_of_pointers_t<Types...>;
98 template <
typename Type>
99 using add_function_cref_t = std::function<void(
const Type&)>;
101 template <
typename ... Types>
102 using variant_of_functions_t = std::variant<add_function_cref_t<Types>...>;
104 template <
typename Type>
107 template <
typename ... Types>
110 using type = variant_of_functions_t<Types...>;
122 rclcpp::ParameterType type;
123 param_ptr_variant_t param_ptr;
124 update_cbk_variant_t update_cbk;
127 template <
typename T>
128 bool try_cast(T& out)
132 out = std::get<T>(param_ptr);
135 catch (
const std::bad_any_cast& e)
141 template <
typename NewValueT>
142 bool update_value(
const NewValueT& new_value)
145 std::visit([&new_value,
this](
auto arg)
147 using CbkT =
decltype(arg);
148 if constexpr (std::is_invocable_v<CbkT, NewValueT>)
156 RCLCPP_ERROR_STREAM_THROTTLE(node.get_logger(), *node.get_clock(), 1000,
"Cannot call update callback for parameter \"" << resolved_name.str <<
"\" - incompatible callback type!");
160 return std::visit([&new_value](
auto arg)
162 using ParamT = std::remove_pointer_t<
decltype(arg)>;
163 if constexpr (std::is_convertible_v<NewValueT, ParamT>)
165 *arg =
static_cast<ParamT
>(new_value);
173 rclcpp::ParameterValue to_param_val()
const;
std::function< void(const T &)> update_cbk_t
A convenience alias defining the update callback function type.
Definition dynparam_mgr.h:52
bool register_param(const std::string &name, MemT *param_var, const update_cbk_t< MemT > &update_cbk={})
Registers a ROS parameter and a corresponding variable.
Definition dynparam_mgr.hpp:16
resolved_name_t resolveName(const std::string ¶m_name) const
Returns the parameter name with prefixes and subnode namespaces.
Definition param_provider.cpp:148
bool getParam(const std::string ¶m_name, T &value_out) const
Gets the value of a parameter.
Definition param_provider.hpp:78
Convenience concept of a numeric value (i.e. either integral or floating point, and not bool).
Definition param_provider.h:58
Defines DynparamMgr - a convenience class for managing dynamic ROS parameters.
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition attitude_converter.h:24
Definition dynparam_mgr.hpp:105
Definition dynparam_mgr.hpp:89
Definition dynparam_mgr.hpp:82
Struct of options when getting a parameter from ROS.
Definition param_provider.h:118
declare_options_t< T > declare_options
Options when declaring a parameter to ROS (see the declare_options_t<T> documentation).
Definition param_provider.h:128
bool always_declare
Iff true, the parameter will be declared to ROS even if it's value was loaded from a YAML.
Definition param_provider.h:120
Helper struct for a numeric range with named members to make the code a bit more readable.
Definition param_provider.h:87
Definition param_provider.hpp:42