Nav2 Navigation Stack - lyrical  lyrical
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_waypoint_follower/parameter_handler.hpp"
23 
24 namespace nav2_waypoint_follower
25 {
26 
27 using nav2::declare_parameter_if_not_declared;
28 using rcl_interfaces::msg::ParameterType;
29 
31  const nav2::LifecycleNode::SharedPtr & node,
32  const rclcpp::Logger & logger)
33 : nav2_util::ParameterHandler<Parameters>(node, logger)
34 {
35  params_.stop_on_failure = node->declare_or_get_parameter("stop_on_failure", true);
36  params_.loop_rate = node->declare_or_get_parameter("loop_rate", 20);
37  params_.waypoint_task_executor_id =
38  node->declare_or_get_parameter("waypoint_task_executor_plugin",
39  std::string("wait_at_waypoint"));
40  params_.global_frame_id = node->declare_or_get_parameter("global_frame_id", std::string("map"));
41  nav2::declare_parameter_if_not_declared(
42  node, std::string("wait_at_waypoint.plugin"),
43  rclcpp::ParameterValue(std::string("nav2_waypoint_follower::WaitAtWaypoint")));
44  params_.waypoint_task_executor_type = nav2::get_plugin_type_param(
45  node,
46  params_.waypoint_task_executor_id);
47 }
48 
49 rcl_interfaces::msg::SetParametersResult ParameterHandler::validateParameterUpdatesCallback(
50  const std::vector<rclcpp::Parameter> & parameters)
51 {
52  rcl_interfaces::msg::SetParametersResult result;
53  result.successful = true;
54  for (const auto & parameter : parameters) {
55  const auto & param_type = parameter.get_type();
56  const auto & param_name = parameter.get_name();
57  // If we are trying to change the parameter of a plugin we can just skip it at this point
58  // as they handle parameter changes themselves and don't need to lock the mutex
59  if (param_name.find('.') != std::string::npos) {
60  continue;
61  }
62  if (param_type == ParameterType::PARAMETER_INTEGER) {
63  if (parameter.as_int() <= 0) {
64  RCLCPP_WARN(
65  logger_, "The value of parameter '%s' is incorrectly set to %ld, "
66  "it should be >0. Ignoring parameter update.",
67  param_name.c_str(), parameter.as_int());
68  result.successful = false;
69  }
70  }
71  }
72  return result;
73 }
74 
75 void
77  const std::vector<rclcpp::Parameter> & parameters)
78 {
79  for (const auto & parameter : parameters) {
80  const auto & param_type = parameter.get_type();
81  const auto & param_name = parameter.get_name();
82  if (param_name.find('.') != std::string::npos) {
83  continue;
84  }
85 
86  if (param_type == ParameterType::PARAMETER_INTEGER) {
87  if (param_name == "loop_rate") {
88  params_.loop_rate = parameter.as_int();
89  }
90  } else if (param_type == ParameterType::PARAMETER_BOOL) {
91  if (param_name == "stop_on_failure") {
92  params_.stop_on_failure = parameter.as_bool();
93  }
94  }
95  }
96 }
97 
98 } // namespace nav2_waypoint_follower
Handles parameters and dynamic parameters for Planner Server.
void updateParametersCallback(const std::vector< rclcpp::Parameter > &parameters) override
Apply parameter updates after validation This callback is executed when parameters have been successf...
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...
ParameterHandler(const nav2::LifecycleNode::SharedPtr &node, const rclcpp::Logger &logger)
Constructor for nav2_waypoint_follower::ParameterHandler.