22 #include "nav2_planner/parameter_handler.hpp"
24 namespace nav2_planner
27 using nav2::declare_parameter_if_not_declared;
28 using rcl_interfaces::msg::ParameterType;
31 const nav2::LifecycleNode::SharedPtr & node,
32 const rclcpp::Logger & logger)
35 params_.planner_ids = node->declare_or_get_parameter(
"planner_plugins", default_ids_);
36 double expected_planner_frequency = node->declare_or_get_parameter(
37 "expected_planner_frequency", 1.0);
38 if (expected_planner_frequency > 0) {
39 params_.max_planner_duration = 1 / expected_planner_frequency;
43 "The expected planner frequency parameter is %.4f Hz. The value should to be greater"
44 " than 0.0 to turn on duration overrun warning messages", expected_planner_frequency);
45 params_.max_planner_duration = 0.0;
47 double costmap_update_timeout_dbl = node->declare_or_get_parameter(
48 "costmap_update_timeout", 1.0);
49 params_.costmap_update_timeout = rclcpp::Duration::from_seconds(costmap_update_timeout_dbl);
50 params_.partial_plan_allowed = node->declare_or_get_parameter(
"allow_partial_planning",
false);
52 if (params_.planner_ids == default_ids_) {
53 for (
size_t i = 0; i < default_ids_.size(); ++i) {
54 nav2::declare_parameter_if_not_declared(
55 node, default_ids_[i] +
".plugin", rclcpp::ParameterValue(default_types_[i]));
59 params_.planner_types.resize(params_.planner_ids.size());
61 for (
size_t i = 0; i != params_.planner_ids.size(); i++) {
63 params_.planner_types[i] = nav2::get_plugin_type_param(
64 node, params_.planner_ids[i]);
65 }
catch (
const std::exception & ex) {
66 throw std::runtime_error(
67 "Failed to get plugin type for planner " + params_.planner_ids[i] +
". Exception: " +
74 const std::vector<rclcpp::Parameter> & parameters)
76 rcl_interfaces::msg::SetParametersResult result;
77 result.successful =
true;
78 for (
const auto & parameter : parameters) {
79 const auto & param_type = parameter.get_type();
80 const auto & param_name = parameter.get_name();
83 if (param_name.find(
'.') != std::string::npos) {
86 if (param_type == ParameterType::PARAMETER_DOUBLE) {
87 if (parameter.as_double() <= 0.0) {
89 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
90 "it should be >0. Ignoring parameter update.",
91 param_name.c_str(), parameter.as_double());
92 result.successful =
false;
101 const std::vector<rclcpp::Parameter> & parameters)
103 std::lock_guard<std::mutex> lock_reinit(mutex_);
105 for (
const auto & parameter : parameters) {
106 const auto & param_type = parameter.get_type();
107 const auto & param_name = parameter.get_name();
108 if (param_name.find(
'.') != std::string::npos) {
112 if (param_type == ParameterType::PARAMETER_DOUBLE) {
113 if (param_name ==
"expected_planner_frequency") {
114 if (parameter.as_double() > 0) {
115 params_.max_planner_duration = 1 / parameter.as_double();
118 }
else if (param_type == ParameterType::PARAMETER_BOOL) {
119 if (param_name ==
"allow_partial_planning") {
120 params_.partial_plan_allowed = parameter.as_bool();
Handles parameters and dynamic parameters for Planner Server.
rcl_interfaces::msg::SetParametersResult validateParameterUpdatesCallback(const std::vector< rclcpp::Parameter > ¶meters) 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_planner::ParameterHandler.
void updateParametersCallback(const std::vector< rclcpp::Parameter > ¶meters) override
Apply parameter updates after validation This callback is executed when parameters have been successf...