22 #include "opennav_docking/parameter_handler.hpp"
24 namespace opennav_docking
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_.controller_frequency = node->declare_or_get_parameter(
"controller_frequency", 50.0);
36 params_.initial_perception_timeout = node->declare_or_get_parameter(
"initial_perception_timeout",
38 params_.wait_charge_timeout = node->declare_or_get_parameter(
"wait_charge_timeout", 5.0);
39 params_.dock_approach_timeout = node->declare_or_get_parameter(
"dock_approach_timeout", 30.0);
40 params_.rotate_to_dock_timeout = node->declare_or_get_parameter(
"rotate_to_dock_timeout", 10.0);
41 params_.undock_linear_tolerance = node->declare_or_get_parameter(
"undock_linear_tolerance", 0.05);
42 params_.undock_angular_tolerance = node->declare_or_get_parameter(
"undock_angular_tolerance",
44 params_.max_retries = node->declare_or_get_parameter(
"max_retries", 3);
45 params_.base_frame = node->declare_or_get_parameter(
"base_frame", std::string(
"base_link"));
46 params_.fixed_frame = node->declare_or_get_parameter(
"fixed_frame", std::string(
"odom"));
47 params_.transform_staleness_threshold =
48 node->declare_or_get_parameter(
"transform_staleness_threshold", 0.0);
49 params_.dock_prestaging_tolerance = node->declare_or_get_parameter(
"dock_prestaging_tolerance",
51 params_.rotation_angular_tolerance = node->declare_or_get_parameter(
"rotation_angular_tolerance",
54 RCLCPP_INFO(logger_,
"Controller frequency set to %.4fHz", params_.controller_frequency);
58 params_.dock_backwards = node->declare_or_get_parameter<
bool>(
"dock_backwards");
60 logger_,
"Parameter dock_backwards is deprecated. "
61 "Please use the dock_direction parameter in your dock plugin instead.");
64 params_.odom_topic = node->declare_or_get_parameter(
"odom_topic", std::string(
"odom"));
65 params_.odom_duration = node->declare_or_get_parameter(
"odom_duration", 0.3);
69 const std::vector<rclcpp::Parameter> & parameters)
71 rcl_interfaces::msg::SetParametersResult result;
72 result.successful =
true;
73 for (
const auto & parameter : parameters) {
74 const auto & param_type = parameter.get_type();
75 const auto & param_name = parameter.get_name();
78 if (param_name.find(
'.') != std::string::npos) {
81 if (param_type == ParameterType::PARAMETER_DOUBLE) {
82 if (param_name ==
"controller_frequency" && parameter.as_double() <= 0.0) {
84 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
85 "it should be >0. Ignoring parameter update.",
86 param_name.c_str(), parameter.as_double());
87 result.successful =
false;
88 }
else if (parameter.as_double() < 0.0) {
90 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
91 "it should be >=0. Ignoring parameter update.",
92 param_name.c_str(), parameter.as_double());
93 result.successful =
false;
102 const std::vector<rclcpp::Parameter> & parameters)
104 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 ==
"controller_frequency") {
114 params_.controller_frequency = parameter.as_double();
115 }
else if (param_name ==
"initial_perception_timeout") {
116 params_.initial_perception_timeout = parameter.as_double();
117 }
else if (param_name ==
"wait_charge_timeout") {
118 params_.wait_charge_timeout = parameter.as_double();
119 }
else if (param_name ==
"undock_linear_tolerance") {
120 params_.undock_linear_tolerance = parameter.as_double();
121 }
else if (param_name ==
"undock_angular_tolerance") {
122 params_.undock_angular_tolerance = parameter.as_double();
123 }
else if (param_name ==
"rotation_angular_tolerance") {
124 params_.rotation_angular_tolerance = parameter.as_double();
125 }
else if (param_name ==
"transform_staleness_threshold") {
126 params_.transform_staleness_threshold = parameter.as_double();
128 }
else if (param_type == ParameterType::PARAMETER_STRING) {
129 if (param_name ==
"base_frame") {
130 params_.base_frame = parameter.as_string();
131 }
else if (param_name ==
"fixed_frame") {
132 params_.fixed_frame = parameter.as_string();
134 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
135 if (param_name ==
"max_retries") {
136 params_.max_retries = parameter.as_int();
Handles parameters and dynamic parameters for Controller Server.
ParameterHandler(const nav2::LifecycleNode::SharedPtr &node, const rclcpp::Logger &logger)
Constructor for opennav_docking::ParameterHandler.
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...