@@ -192,75 +192,40 @@ ParameterHandler::ParameterHandler(
192192    params_.use_cost_regulated_linear_velocity_scaling  = false ;
193193  }
194194
195-   post_set_params_handler_  = node->add_post_set_parameters_callback (
195+   dyn_params_handler_  = node->add_on_set_parameters_callback (
196196    std::bind (
197-       &ParameterHandler::updateParametersCallback,
198-       this , std::placeholders::_1));
199-   on_set_params_handler_ = node->add_on_set_parameters_callback (
200-     std::bind (
201-       &ParameterHandler::validateParameterUpdatesCallback,
197+       &ParameterHandler::dynamicParametersCallback,
202198      this , std::placeholders::_1));
203199}
204200
205201ParameterHandler::~ParameterHandler ()
206202{
207203  auto  node = node_.lock ();
208-   if  (post_set_params_handler_ && node) {
209-     node->remove_post_set_parameters_callback (post_set_params_handler_.get ());
210-   }
211-   post_set_params_handler_.reset ();
212-   if  (on_set_params_handler_ && node) {
213-     node->remove_on_set_parameters_callback (on_set_params_handler_.get ());
204+   if  (dyn_params_handler_ && node) {
205+     node->remove_on_set_parameters_callback (dyn_params_handler_.get ());
214206  }
215-   on_set_params_handler_ .reset ();
207+   dyn_params_handler_ .reset ();
216208}
217- rcl_interfaces::msg::SetParametersResult ParameterHandler::validateParameterUpdatesCallback (
218-   std::vector<rclcpp::Parameter> parameters)
219- {
220-   rcl_interfaces::msg::SetParametersResult result;
221-   result.successful  = true ;
222-   for  (auto  parameter : parameters) {
223-     const  auto  & type = parameter.get_type ();
224-     const  auto  & name = parameter.get_name ();
225209
226-     if  (type == ParameterType::PARAMETER_DOUBLE) {
227-       if  (name == plugin_name_ + " .inflation_cost_scaling_factor" as_double () <= 0.0 ) {
228-         RCLCPP_WARN (
229-         logger_, " The value inflation_cost_scaling_factor is incorrectly set, " 
230-         " it should be >0. Ignoring parameter update." 
231-         result.successful  = false ;
232-       } else  if  (parameter.as_double () < 0.0 ) {
233-         RCLCPP_WARN (
234-         logger_, " The value of parameter '%s' is incorrectly set to %f, " 
235-         " it should be >=0. Ignoring parameter update." 
236-         name.c_str (), parameter.as_double ());
237-         result.successful  = false ;
238-       }
239-     } else  if  (type == ParameterType::PARAMETER_BOOL) {
240-       if  (name == plugin_name_ + " .allow_reversing" 
241-         if  (params_.use_rotate_to_heading  && parameter.as_bool ()) {
242-           RCLCPP_WARN (
243-             logger_, " Both use_rotate_to_heading and allow_reversing " 
244-             " parameter cannot be set to true. Rejecting parameter update." 
245-           result.successful  = false ;
246-         }
247-       }
248-     }
249-   }
250-   return  result;
251- }
252- void 
253- ParameterHandler::updateParametersCallback (
210+ rcl_interfaces::msg::SetParametersResult
211+ ParameterHandler::dynamicParametersCallback (
254212  std::vector<rclcpp::Parameter> parameters)
255213{
214+   rcl_interfaces::msg::SetParametersResult result;
256215  std::lock_guard<std::mutex> lock_reinit (mutex_);
257216
258-   for  (const   auto  &  parameter : parameters) {
217+   for  (auto  parameter : parameters) {
259218    const  auto  & type = parameter.get_type ();
260219    const  auto  & name = parameter.get_name ();
261220
262221    if  (type == ParameterType::PARAMETER_DOUBLE) {
263222      if  (name == plugin_name_ + " .inflation_cost_scaling_factor" 
223+         if  (parameter.as_double () <= 0.0 ) {
224+           RCLCPP_WARN (
225+             logger_, " The value inflation_cost_scaling_factor is incorrectly set, " 
226+             " it should be >0. Ignoring parameter update." 
227+           continue ;
228+         }
264229        params_.inflation_cost_scaling_factor  = parameter.as_double ();
265230      } else  if  (name == plugin_name_ + " .desired_linear_vel" 
266231        params_.desired_linear_vel  = parameter.as_double ();
@@ -318,12 +283,21 @@ ParameterHandler::updateParametersCallback(
318283      } else  if  (name == plugin_name_ + " .use_cancel_deceleration" 
319284        params_.use_cancel_deceleration  = parameter.as_bool ();
320285      } else  if  (name == plugin_name_ + " .allow_reversing" 
286+         if  (params_.use_rotate_to_heading  && parameter.as_bool ()) {
287+           RCLCPP_WARN (
288+             logger_, " Both use_rotate_to_heading and allow_reversing " 
289+             " parameter cannot be set to true. Rejecting parameter update." 
290+           continue ;
291+         }
321292        params_.allow_reversing  = parameter.as_bool ();
322293      } else  if  (name == plugin_name_ + " .interpolate_curvature_after_goal" 
323294        params_.interpolate_curvature_after_goal  = parameter.as_bool ();
324295      }
325296    }
326297  }
298+ 
299+   result.successful  = true ;
300+   return  result;
327301}
328302
329303}  //  namespace nav2_regulated_pure_pursuit_controller
0 commit comments