15 #ifndef RCLCPP__NODE_INTERFACES__NODE_PARAMETERS_HPP_
16 #define RCLCPP__NODE_INTERFACES__NODE_PARAMETERS_HPP_
25 #include "rcutils/macros.h"
27 #include "rcl_interfaces/msg/list_parameters_result.hpp"
28 #include "rcl_interfaces/msg/parameter_descriptor.hpp"
29 #include "rcl_interfaces/msg/parameter_event.hpp"
30 #include "rcl_interfaces/msg/set_parameters_result.hpp"
32 #include "rclcpp/macros.hpp"
33 #include "rclcpp/node_interfaces/node_base_interface.hpp"
34 #include "rclcpp/node_interfaces/node_logging_interface.hpp"
35 #include "rclcpp/node_interfaces/node_parameters_interface.hpp"
36 #include "rclcpp/node_interfaces/node_services_interface.hpp"
37 #include "rclcpp/node_interfaces/node_topics_interface.hpp"
38 #include "rclcpp/parameter.hpp"
39 #include "rclcpp/parameter_service.hpp"
40 #include "rclcpp/publisher.hpp"
41 #include "rclcpp/visibility_control.hpp"
45 namespace node_interfaces
63 : allow_modification_(allow_mod)
65 if (!allow_modification_) {
67 "cannot set or declare a parameter, or change the callback from within set callback");
70 allow_modification_ =
false;
75 allow_modification_ =
true;
79 bool & allow_modification_;
100 const node_interfaces::NodeBaseInterface::SharedPtr node_base,
101 const node_interfaces::NodeLoggingInterface::SharedPtr node_logging,
102 const node_interfaces::NodeTopicsInterface::SharedPtr node_topics,
103 const node_interfaces::NodeServicesInterface::SharedPtr node_services,
104 const node_interfaces::NodeClockInterface::SharedPtr node_clock,
105 const std::vector<Parameter> & parameter_overrides,
106 bool start_parameter_services,
107 bool start_parameter_event_publisher,
110 bool allow_undeclared_parameters,
111 bool automatically_declare_parameters_from_overrides);
120 const std::string & name,
122 const rcl_interfaces::msg::ParameterDescriptor & parameter_descriptor =
123 rcl_interfaces::msg::ParameterDescriptor{},
124 bool ignore_override =
false)
override;
129 const std::string & name,
130 rclcpp::ParameterType type,
131 const rcl_interfaces::msg::ParameterDescriptor & parameter_descriptor =
132 rcl_interfaces::msg::ParameterDescriptor(),
133 bool ignore_override =
false)
override;
144 std::vector<rcl_interfaces::msg::SetParametersResult>
146 const std::vector<rclcpp::Parameter> & parameters)
override;
149 rcl_interfaces::msg::SetParametersResult
151 const std::vector<rclcpp::Parameter> & parameters)
override;
154 std::vector<rclcpp::Parameter>
155 get_parameters(
const std::vector<std::string> & names)
const override;
164 const std::string & name,
170 const std::string & prefix,
171 std::map<std::string, rclcpp::Parameter> & parameters)
const override;
174 std::vector<rcl_interfaces::msg::ParameterDescriptor>
175 describe_parameters(
const std::vector<std::string> & names)
const override;
179 get_parameter_types(
const std::vector<std::string> & names)
const override;
182 rcl_interfaces::msg::ListParametersResult
183 list_parameters(
const std::vector<std::string> & prefixes, uint64_t depth)
const override;
187 PreSetParametersCallbackHandle::SharedPtr
192 OnSetParametersCallbackHandle::SharedPtr
197 PostSetParametersCallbackHandle::SharedPtr
214 const std::map<std::string, rclcpp::ParameterValue> &
221 using PreSetCallbacksHandleContainer = std::list<PreSetParametersCallbackHandle::WeakPtr>;
222 using OnSetCallbacksHandleContainer = std::list<OnSetParametersCallbackHandle::WeakPtr>;
223 using PostSetCallbacksHandleContainer = std::list<PostSetParametersCallbackHandle::WeakPtr>;
224 using CallbacksContainerType [[deprecated(
"use OnSetCallbacksHandleContainer instead")]] =
225 OnSetCallbacksHandleContainer;
230 perform_automatically_declare_parameters_from_overrides();
235 mutable std::recursive_mutex mutex_;
240 bool parameter_modification_enabled_{
true};
242 PreSetCallbacksHandleContainer pre_set_parameters_callback_container_;
244 OnSetCallbacksHandleContainer on_set_parameters_callback_container_;
246 PostSetCallbacksHandleContainer post_set_parameters_callback_container_;
248 std::map<std::string, ParameterInfo> parameters_;
250 std::map<std::string, rclcpp::ParameterValue> parameter_overrides_;
252 bool allow_undeclared_ =
false;
256 std::shared_ptr<ParameterService> parameter_service_;
258 std::string combined_name_;
260 node_interfaces::NodeLoggingInterface::SharedPtr node_logging_;
261 node_interfaces::NodeClockInterface::SharedPtr node_clock_;
Store the type and value of a parameter.
Structure to store an arbitrary parameter with templated get/set methods.
A publisher publishes messages of any type to a topic.
Encapsulation of Quality of Service settings.
Thrown if parameter is modified while in a set callback.
Pure virtual interface class for the NodeParameters part of the Node API.
Implementation of the NodeParameters part of the Node API.
RCLCPP_PUBLIC RCUTILS_WARN_UNUSED PostSetParametersCallbackHandle::SharedPtr add_post_set_parameters_callback(PostSetParametersCallbackType callback) override
Add a callback that gets triggered after parameters are set successfully.
RCLCPP_PUBLIC const std::map< std::string, rclcpp::ParameterValue > & get_parameter_overrides() const override
Return the initial parameter values used by the NodeParameters to override default values.
RCLCPP_PUBLIC void remove_on_set_parameters_callback(const OnSetParametersCallbackHandle *const handler) override
Remove a callback registered with add_on_set_parameters_callback.
RCLCPP_PUBLIC NodeParameters(const node_interfaces::NodeBaseInterface::SharedPtr node_base, const node_interfaces::NodeLoggingInterface::SharedPtr node_logging, const node_interfaces::NodeTopicsInterface::SharedPtr node_topics, const node_interfaces::NodeServicesInterface::SharedPtr node_services, const node_interfaces::NodeClockInterface::SharedPtr node_clock, const std::vector< Parameter > ¶meter_overrides, bool start_parameter_services, bool start_parameter_event_publisher, const rclcpp::QoS ¶meter_event_qos, const rclcpp::PublisherOptionsBase ¶meter_event_publisher_options, bool allow_undeclared_parameters, bool automatically_declare_parameters_from_overrides)
Constructor.
RCLCPP_PUBLIC std::vector< rclcpp::Parameter > get_parameters(const std::vector< std::string > &names) const override
Get descriptions of parameters given their names.
RCLCPP_PUBLIC void undeclare_parameter(const std::string &name) override
Undeclare a parameter.
RCLCPP_PUBLIC const rclcpp::ParameterValue & declare_parameter(const std::string &name, const rclcpp::ParameterValue &default_value, const rcl_interfaces::msg::ParameterDescriptor ¶meter_descriptor=rcl_interfaces::msg::ParameterDescriptor{}, bool ignore_override=false) override
Declare and initialize a parameter.
RCLCPP_PUBLIC RCUTILS_WARN_UNUSED OnSetParametersCallbackHandle::SharedPtr add_on_set_parameters_callback(OnSetParametersCallbackType callback) override
Add a callback to validate parameters before they are set.
RCLCPP_PUBLIC bool get_parameters_by_prefix(const std::string &prefix, std::map< std::string, rclcpp::Parameter > ¶meters) const override
Get all parameters that have the specified prefix into the parameters map.
RCLCPP_PUBLIC std::vector< rcl_interfaces::msg::SetParametersResult > set_parameters(const std::vector< rclcpp::Parameter > ¶meters) override
Set one or more parameters, one at a time.
RCLCPP_PUBLIC void remove_pre_set_parameters_callback(const PreSetParametersCallbackHandle *const handler) override
Remove a callback registered with add_pre_set_parameters_callback.
RCLCPP_PUBLIC void enable_parameter_modification() override
Enable parameter modification recursively during parameter callbacks.
RCLCPP_PUBLIC rcl_interfaces::msg::SetParametersResult set_parameters_atomically(const std::vector< rclcpp::Parameter > ¶meters) override
Set one or more parameters, all at once.
RCLCPP_PUBLIC RCUTILS_WARN_UNUSED PreSetParametersCallbackHandle::SharedPtr add_pre_set_parameters_callback(PreSetParametersCallbackType callback) override
Add a callback that gets triggered before parameters are validated.
RCLCPP_PUBLIC rclcpp::Parameter get_parameter(const std::string &name) const override
Get the description of one parameter given a name.
RCLCPP_PUBLIC void remove_post_set_parameters_callback(const PostSetParametersCallbackHandle *const handler) override
Remove a callback registered with add_post_set_parameters_callback.
RCLCPP_PUBLIC bool has_parameter(const std::string &name) const override
Return true if the parameter has been declared, otherwise false.
Versions of rosidl_typesupport_cpp::get_message_type_support_handle that handle adapted types.
Non-templated part of PublisherOptionsWithAllocator<Allocator>.
rcl_interfaces::msg::ParameterDescriptor descriptor
A description of the parameter.
rclcpp::ParameterValue value
Current value of the parameter.