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 params_.w_traversal_cost = node->declare_or_get_parameter(
49 plugin_name_ +
".w_traversal_cost", 2.0);
50 params_.w_heuristic_cost = params_.w_euc_cost < 1.0 ? params_.w_euc_cost : 1.0;
51 params_.terminal_checking_interval = node->declare_or_get_parameter(
52 plugin_name_ +
".terminal_checking_interval", 5000);
53 params_.use_final_approach_orientation = node->declare_or_get_parameter(
54 plugin_name_ +
".use_final_approach_orientation",
false);
58 const std::vector<rclcpp::Parameter> & parameters)
60 rcl_interfaces::msg::SetParametersResult result;
61 result.successful =
true;
62 for (
const auto & parameter : parameters) {
63 const auto & param_type = parameter.get_type();
64 const auto & param_name = parameter.get_name();
65 if (param_name.find(plugin_name_ +
".") != 0) {
68 if (param_type == ParameterType::PARAMETER_DOUBLE) {
69 if (parameter.as_double() <= 0.0) {
71 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
72 "it should be >0. Ignoring parameter update.",
73 param_name.c_str(), parameter.as_double());
74 result.successful =
false;
76 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
77 if (param_name == plugin_name_ +
".how_many_corners" &&
78 parameter.as_int() != 4 && parameter.as_int() != 8)
81 logger_,
"The value of parameter '%s' is incorrectly set to %ld, "
82 "it should be either 4 or 8. Ignoring parameter update.",
83 param_name.c_str(), parameter.as_int());
84 result.successful =
false;
93 const std::vector<rclcpp::Parameter> & parameters)
95 std::lock_guard<std::mutex> lock_reinit(mutex_);
97 for (
const auto & parameter : parameters) {
98 const auto & param_type = parameter.get_type();
99 const auto & param_name = parameter.get_name();
100 if (param_name.find(plugin_name_ +
".") != 0) {
103 if (param_type == ParameterType::PARAMETER_INTEGER) {
104 if (param_name == plugin_name_ +
".how_many_corners") {
105 params_.how_many_corners = parameter.as_int();
106 }
else if (param_name == plugin_name_ +
".terminal_checking_interval") {
107 params_.terminal_checking_interval = parameter.as_int();
109 }
else if (param_type == ParameterType::PARAMETER_DOUBLE) {
110 if (param_name == plugin_name_ +
".w_euc_cost") {
111 params_.w_euc_cost = parameter.as_double();
112 }
else if (param_name == plugin_name_ +
".w_traversal_cost") {
113 params_.w_traversal_cost = parameter.as_double();
115 }
else if (param_type == ParameterType::PARAMETER_BOOL) {
116 if (param_name == plugin_name_ +
".use_final_approach_orientation") {
117 params_.use_final_approach_orientation = parameter.as_bool();
118 }
else if (param_name == plugin_name_ +
".allow_unknown") {
119 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.