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_.dock_prestaging_tolerance = node->declare_or_get_parameter(
"dock_prestaging_tolerance",
49 params_.rotation_angular_tolerance = node->declare_or_get_parameter(
"rotation_angular_tolerance",
52 RCLCPP_INFO(logger_,
"Controller frequency set to %.4fHz", params_.controller_frequency);
56 params_.dock_backwards = node->declare_or_get_parameter<
bool>(
"dock_backwards");
58 logger_,
"Parameter dock_backwards is deprecated. "
59 "Please use the dock_direction parameter in your dock plugin instead.");
62 params_.odom_topic = node->declare_or_get_parameter(
"odom_topic", std::string(
"odom"));
63 params_.odom_duration = node->declare_or_get_parameter(
"odom_duration", 0.3);
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();
76 if (param_name.find(
'.') != std::string::npos) {
79 if (param_type == ParameterType::PARAMETER_DOUBLE) {
80 if (param_name ==
"controller_frequency" && parameter.as_double() <= 0.0) {
82 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
83 "it should be >0. Ignoring parameter update.",
84 param_name.c_str(), parameter.as_double());
85 result.successful =
false;
86 }
else if (parameter.as_double() < 0.0) {
88 logger_,
"The value of parameter '%s' is incorrectly set to %f, "
89 "it should be >=0. Ignoring parameter update.",
90 param_name.c_str(), parameter.as_double());
91 result.successful =
false;
100 const std::vector<rclcpp::Parameter> & parameters)
102 std::lock_guard<std::mutex> lock_reinit(mutex_);
103 for (
const auto & parameter : parameters) {
104 const auto & param_type = parameter.get_type();
105 const auto & param_name = parameter.get_name();
106 if (param_name.find(
'.') != std::string::npos) {
110 if (param_type == ParameterType::PARAMETER_DOUBLE) {
111 if (param_name ==
"controller_frequency") {
112 params_.controller_frequency = parameter.as_double();
113 }
else if (param_name ==
"initial_perception_timeout") {
114 params_.initial_perception_timeout = parameter.as_double();
115 }
else if (param_name ==
"wait_charge_timeout") {
116 params_.wait_charge_timeout = parameter.as_double();
117 }
else if (param_name ==
"undock_linear_tolerance") {
118 params_.undock_linear_tolerance = parameter.as_double();
119 }
else if (param_name ==
"undock_angular_tolerance") {
120 params_.undock_angular_tolerance = parameter.as_double();
121 }
else if (param_name ==
"rotation_angular_tolerance") {
122 params_.rotation_angular_tolerance = parameter.as_double();
124 }
else if (param_type == ParameterType::PARAMETER_STRING) {
125 if (param_name ==
"base_frame") {
126 params_.base_frame = parameter.as_string();
127 }
else if (param_name ==
"fixed_frame") {
128 params_.fixed_frame = parameter.as_string();
130 }
else if (param_type == ParameterType::PARAMETER_INTEGER) {
131 if (param_name ==
"max_retries") {
132 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...