22 #include "nav2_navfn_planner/parameter_handler.hpp"
23 #include "nav2_core/controller_exceptions.hpp"
25 namespace nav2_navfn_planner
28 using nav2::declare_parameter_if_not_declared;
29 using rcl_interfaces::msg::ParameterType;
32 const nav2::LifecycleNode::SharedPtr & node,
33 std::string & plugin_name, rclcpp::Logger & logger)
36 plugin_name_ = plugin_name;
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_.max_cycles_factor =
41 node->declare_or_get_parameter(plugin_name +
".max_cycles_factor", 4);
42 params_.allow_unknown = node->declare_or_get_parameter(plugin_name +
".allow_unknown",
true);
43 params_.use_final_approach_orientation = node->declare_or_get_parameter(plugin_name +
44 ".use_final_approach_orientation",
false);
48 const std::vector<rclcpp::Parameter> & parameters)
50 rcl_interfaces::msg::SetParametersResult result;
51 result.successful =
true;
52 for (
const auto & parameter : parameters) {
53 const auto & param_type = parameter.get_type();
54 const auto & param_name = parameter.get_name();
55 if (param_name.find(plugin_name_ +
".") != 0) {
58 if (param_type == ParameterType::PARAMETER_DOUBLE) {
59 if (parameter.as_double() <= 0.0) {
61 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
62 "it should be >0. Ignoring parameter update.",
63 param_name.c_str(), parameter.as_double());
64 result.successful =
false;
66 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
67 if (param_name == plugin_name_ +
".max_cycles_factor" && parameter.as_int() <= 0) {
69 logger_,
"The value of parameter '%s' is incorrectly set to %ld, "
70 "it should be >0. Ignoring parameter update.",
71 param_name.c_str(), parameter.as_int());
72 result.successful =
false;
81 const std::vector<rclcpp::Parameter> & parameters)
83 std::lock_guard<std::mutex> lock_reinit(mutex_);
85 for (
const auto & parameter : parameters) {
86 const auto & param_type = parameter.get_type();
87 const auto & param_name = parameter.get_name();
88 if (param_name.find(plugin_name_ +
".") != 0) {
91 if (param_type == ParameterType::PARAMETER_DOUBLE) {
92 if (param_name == plugin_name_ +
".tolerance") {
93 params_.tolerance = parameter.as_double();
95 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
96 if (param_name == plugin_name_ +
".max_cycles_factor") {
97 params_.max_cycles_factor = parameter.as_int();
99 }
else if (param_type == ParameterType::PARAMETER_BOOL) {
100 if (param_name == plugin_name_ +
".use_astar") {
101 params_.use_astar = parameter.as_bool();
102 }
else if (param_name == plugin_name_ +
".allow_unknown") {
103 params_.allow_unknown = parameter.as_bool();
104 }
else if (param_name == plugin_name_ +
".use_final_approach_orientation") {
105 params_.use_final_approach_orientation = parameter.as_bool();
Handles parameters and dynamic parameters for Navfn.
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...
void updateParametersCallback(const std::vector< rclcpp::Parameter > ¶meters) 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.