22 #include "nav2_theta_star_planner/parameter_handler.hpp"
23 #include "nav2_core/controller_exceptions.hpp"
25 namespace nav2_theta_star_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,
const rclcpp::Logger & logger)
36 plugin_name_ = plugin_name;
38 params_.how_many_corners = node->declare_or_get_parameter(
39 plugin_name_ +
".how_many_corners", 8);
40 if (params_.how_many_corners != 8 && params_.how_many_corners != 4) {
41 params_.how_many_corners = 8;
42 RCLCPP_WARN(logger_,
"Your value for - .how_many_corners was overridden, and is now set to 8");
44 params_.allow_unknown = node->declare_or_get_parameter(
45 plugin_name_ +
".allow_unknown",
true);
46 params_.w_euc_cost = node->declare_or_get_parameter(
47 plugin_name_ +
".w_euc_cost", 1.0);
48 if (params_.w_euc_cost <= 0.0) {
49 params_.w_euc_cost = 1.0;
50 RCLCPP_WARN(logger_,
"Your value for - .w_euc_cost was overridden, and is now set to 1.0");
52 params_.w_traversal_cost = node->declare_or_get_parameter(
53 plugin_name_ +
".w_traversal_cost", 2.0);
54 if (params_.w_traversal_cost <= 0.0) {
55 params_.w_traversal_cost = 2.0;
57 logger_,
"Your value for - .w_traversal_cost was overridden, and is now set to 2.0");
59 params_.w_heuristic_cost = params_.w_euc_cost < 1.0 ? params_.w_euc_cost : 1.0;
60 params_.terminal_checking_interval = node->declare_or_get_parameter(
61 plugin_name_ +
".terminal_checking_interval", 5000);
62 params_.use_final_approach_orientation = node->declare_or_get_parameter(
63 plugin_name_ +
".use_final_approach_orientation",
false);
67 const std::vector<rclcpp::Parameter> & parameters)
69 rcl_interfaces::msg::SetParametersResult result;
70 result.successful =
true;
71 for (
const auto & parameter : parameters) {
72 const auto & param_type = parameter.get_type();
73 const auto & param_name = parameter.get_name();
74 if (param_name.find(plugin_name_ +
".") != 0) {
77 if (param_type == ParameterType::PARAMETER_DOUBLE) {
78 if (parameter.as_double() <= 0.0) {
80 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
81 "it should be >0. Ignoring parameter update.",
82 param_name.c_str(), parameter.as_double());
83 result.successful =
false;
85 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
86 if (param_name == plugin_name_ +
".how_many_corners" &&
87 parameter.as_int() != 4 && parameter.as_int() != 8)
90 logger_,
"The value of parameter '%s' is incorrectly set to %ld, "
91 "it should be either 4 or 8. Ignoring parameter update.",
92 param_name.c_str(), parameter.as_int());
93 result.successful =
false;
102 const std::vector<rclcpp::Parameter> & parameters)
104 std::lock_guard<std::mutex> lock_reinit(mutex_);
106 for (
const auto & parameter : parameters) {
107 const auto & param_type = parameter.get_type();
108 const auto & param_name = parameter.get_name();
109 if (param_name.find(plugin_name_ +
".") != 0) {
112 if (param_type == ParameterType::PARAMETER_INTEGER) {
113 if (param_name == plugin_name_ +
".how_many_corners") {
114 params_.how_many_corners = parameter.as_int();
115 }
else if (param_name == plugin_name_ +
".terminal_checking_interval") {
116 params_.terminal_checking_interval = parameter.as_int();
118 }
else if (param_type == ParameterType::PARAMETER_DOUBLE) {
119 if (param_name == plugin_name_ +
".w_euc_cost") {
120 params_.w_euc_cost = parameter.as_double();
121 params_.w_heuristic_cost = params_.w_euc_cost < 1.0 ? params_.w_euc_cost : 1.0;
122 }
else if (param_name == plugin_name_ +
".w_traversal_cost") {
123 params_.w_traversal_cost = parameter.as_double();
125 }
else if (param_type == ParameterType::PARAMETER_BOOL) {
126 if (param_name == plugin_name_ +
".use_final_approach_orientation") {
127 params_.use_final_approach_orientation = parameter.as_bool();
128 }
else if (param_name == plugin_name_ +
".allow_unknown") {
129 params_.allow_unknown = parameter.as_bool();
Handles parameters and dynamic parameters for Theta Star.
void updateParametersCallback(const std::vector< rclcpp::Parameter > ¶meters) 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 > ¶meters) override
Validate incoming parameter updates before applying them. This callback is triggered when one or more...
ParameterHandler(const nav2::LifecycleNode::SharedPtr &node, std::string &plugin_name, const rclcpp::Logger &logger)
Constructor for nav2_theta_star_planner::ParameterHandler.