|
88 | 88 | apply_qos_override( |
89 | 89 | rclcpp::QosPolicyKind policy, rclcpp::ParameterValue value, rclcpp::QoS & qos); |
90 | 90 |
|
| 91 | +inline |
| 92 | +rclcpp::ParameterValue |
| 93 | +declare_parameter_or_get( |
| 94 | + rclcpp::node_interfaces::NodeParametersInterface & parameters_interface, |
| 95 | + const std::string & param_name, |
| 96 | + rclcpp::ParameterValue param_value, |
| 97 | + rcl_interfaces::msg::ParameterDescriptor descriptor) |
| 98 | +{ |
| 99 | + try { |
| 100 | + return parameters_interface.declare_parameter( |
| 101 | + param_name, param_value, descriptor); |
| 102 | + } catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) { |
| 103 | + return parameters_interface.get_parameter(param_name).get_parameter_value(); |
| 104 | + } |
| 105 | +} |
| 106 | + |
91 | 107 | /// \internal Declare QoS parameters for the given entity. |
92 | 108 | /** |
93 | 109 | * \tparam NodeT Node pointer or reference type. |
@@ -146,8 +162,9 @@ declare_qos_parameters( |
146 | 162 | rcl_interfaces::msg::ParameterDescriptor descriptor{}; |
147 | 163 | descriptor.description = param_desciption.str(); |
148 | 164 | descriptor.read_only = true; |
149 | | - auto value = parameters_interface.declare_parameter( |
150 | | - param_name.str(), get_default_qos_param_value(policy, qos), descriptor); |
| 165 | + auto value = declare_parameter_or_get( |
| 166 | + parameters_interface, param_name.str(), |
| 167 | + get_default_qos_param_value(policy, qos), descriptor); |
151 | 168 | ::rclcpp::detail::apply_qos_override(policy, value, qos); |
152 | 169 | } |
153 | 170 | } |
|
0 commit comments