Nav2 Navigation Stack - rolling  main
ROS 2 Navigation Stack
parameter_handler.cpp
1 // Copyright (c) 2022 Samsung Research America
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include <algorithm>
16 #include <string>
17 #include <limits>
18 #include <memory>
19 #include <vector>
20 #include <utility>
21 
22 #include "nav2_navfn_planner/parameter_handler.hpp"
23 #include "nav2_core/controller_exceptions.hpp"
24 
25 namespace nav2_navfn_planner
26 {
27 
28 using nav2::declare_parameter_if_not_declared;
29 using rcl_interfaces::msg::ParameterType;
30 
32  const nav2::LifecycleNode::SharedPtr & node,
33  std::string & plugin_name, rclcpp::Logger & logger)
34 : nav2_util::ParameterHandler<Parameters>(node, logger)
35 {
36  plugin_name_ = plugin_name;
37 
38  params_.tolerance = node->declare_or_get_parameter(plugin_name + ".tolerance", 0.5);
39  params_.use_astar = node->declare_or_get_parameter(plugin_name + ".use_astar", false);
40  params_.allow_unknown = node->declare_or_get_parameter(plugin_name + ".allow_unknown", true);
41  params_.use_final_approach_orientation = node->declare_or_get_parameter(plugin_name +
42  ".use_final_approach_orientation", false);
43 }
44 
45 rcl_interfaces::msg::SetParametersResult ParameterHandler::validateParameterUpdatesCallback(
46  const std::vector<rclcpp::Parameter> & parameters)
47 {
48  rcl_interfaces::msg::SetParametersResult result;
49  result.successful = true;
50  for (const auto & parameter : parameters) {
51  const auto & param_type = parameter.get_type();
52  const auto & param_name = parameter.get_name();
53  if (param_name.find(plugin_name_ + ".") != 0) {
54  continue;
55  }
56  if (param_type == ParameterType::PARAMETER_DOUBLE) {
57  if (parameter.as_double() <= 0.0) {
58  RCLCPP_WARN(
59  logger_, "The value of parameter '%s' is incorrectly set to %f, "
60  "it should be >0. Ignoring parameter update.",
61  param_name.c_str(), parameter.as_double());
62  result.successful = false;
63  }
64  }
65  }
66  return result;
67 }
68 
69 void
71  const std::vector<rclcpp::Parameter> & parameters)
72 {
73  std::lock_guard<std::mutex> lock_reinit(mutex_);
74 
75  for (const auto & parameter : parameters) {
76  const auto & param_type = parameter.get_type();
77  const auto & param_name = parameter.get_name();
78  if (param_name.find(plugin_name_ + ".") != 0) {
79  continue;
80  }
81  if (param_type == ParameterType::PARAMETER_DOUBLE) {
82  if (param_name == plugin_name_ + ".tolerance") {
83  params_.tolerance = parameter.as_double();
84  }
85  } else if (param_type == ParameterType::PARAMETER_BOOL) {
86  if (param_name == plugin_name_ + ".use_astar") {
87  params_.use_astar = parameter.as_bool();
88  } else if (param_name == plugin_name_ + ".allow_unknown") {
89  params_.allow_unknown = parameter.as_bool();
90  } else if (param_name == plugin_name_ + ".use_final_approach_orientation") {
91  params_.use_final_approach_orientation = parameter.as_bool();
92  }
93  }
94  }
95 }
96 
97 } // namespace nav2_navfn_planner
Handles parameters and dynamic parameters for Navfn.
rcl_interfaces::msg::SetParametersResult validateParameterUpdatesCallback(const std::vector< rclcpp::Parameter > &parameters) override
Validate incoming parameter updates before applying them. This callback is triggered when one or more...
void updateParametersCallback(const std::vector< rclcpp::Parameter > &parameters) override
Apply parameter updates after validation This callback is executed when parameters have been successf...
ParameterHandler(const nav2::LifecycleNode::SharedPtr &node, std::string &plugin_name, rclcpp::Logger &logger)
Constructor for nav2_navfn_planner::ParameterHandler.