22 #include "nav2_graceful_controller/parameter_handler.hpp"
24 namespace nav2_graceful_controller
27 using nav2_util::declare_parameter_if_not_declared;
28 using rcl_interfaces::msg::ParameterType;
31 rclcpp_lifecycle::LifecycleNode::SharedPtr node, std::string & plugin_name,
32 rclcpp::Logger & logger,
const double costmap_size_x)
34 plugin_name_ = plugin_name;
37 declare_parameter_if_not_declared(
38 node, plugin_name_ +
".transform_tolerance", rclcpp::ParameterValue(0.1));
39 declare_parameter_if_not_declared(
40 node, plugin_name_ +
".motion_target_dist", rclcpp::ParameterValue(0.6));
41 declare_parameter_if_not_declared(
42 node, plugin_name_ +
".max_robot_pose_search_dist",
43 rclcpp::ParameterValue(costmap_size_x / 2.0));
44 declare_parameter_if_not_declared(node, plugin_name_ +
".k_phi", rclcpp::ParameterValue(3.0));
45 declare_parameter_if_not_declared(node, plugin_name_ +
".k_delta", rclcpp::ParameterValue(2.0));
46 declare_parameter_if_not_declared(node, plugin_name_ +
".beta", rclcpp::ParameterValue(0.2));
47 declare_parameter_if_not_declared(node, plugin_name_ +
".lambda", rclcpp::ParameterValue(2.0));
48 declare_parameter_if_not_declared(
49 node, plugin_name_ +
".v_linear_min", rclcpp::ParameterValue(0.1));
50 declare_parameter_if_not_declared(
51 node, plugin_name_ +
".v_linear_max", rclcpp::ParameterValue(0.5));
52 declare_parameter_if_not_declared(
53 node, plugin_name_ +
".v_angular_max", rclcpp::ParameterValue(1.0));
54 declare_parameter_if_not_declared(
55 node, plugin_name_ +
".slowdown_radius", rclcpp::ParameterValue(1.5));
56 declare_parameter_if_not_declared(
57 node, plugin_name_ +
".initial_rotation", rclcpp::ParameterValue(
true));
58 declare_parameter_if_not_declared(
59 node, plugin_name_ +
".initial_rotation_min_angle", rclcpp::ParameterValue(0.75));
60 declare_parameter_if_not_declared(
61 node, plugin_name_ +
".final_rotation", rclcpp::ParameterValue(
true));
62 declare_parameter_if_not_declared(
63 node, plugin_name_ +
".rotation_scaling_factor", rclcpp::ParameterValue(0.5));
64 declare_parameter_if_not_declared(
65 node, plugin_name_ +
".allow_backward", rclcpp::ParameterValue(
false));
67 node->get_parameter(plugin_name_ +
".transform_tolerance", params_.transform_tolerance);
68 node->get_parameter(plugin_name_ +
".motion_target_dist", params_.motion_target_dist);
70 plugin_name_ +
".max_robot_pose_search_dist", params_.max_robot_pose_search_dist);
71 if (params_.max_robot_pose_search_dist < 0.0) {
73 logger_,
"Max robot search distance is negative, setting to max to search"
74 " every point on path for the closest value.");
75 params_.max_robot_pose_search_dist = std::numeric_limits<double>::max();
78 node->get_parameter(plugin_name_ +
".k_phi", params_.k_phi);
79 node->get_parameter(plugin_name_ +
".k_delta", params_.k_delta);
80 node->get_parameter(plugin_name_ +
".beta", params_.beta);
81 node->get_parameter(plugin_name_ +
".lambda", params_.lambda);
82 node->get_parameter(plugin_name_ +
".v_linear_min", params_.v_linear_min);
83 node->get_parameter(plugin_name_ +
".v_linear_max", params_.v_linear_max);
84 params_.v_linear_max_initial = params_.v_linear_max;
85 node->get_parameter(plugin_name_ +
".v_angular_max", params_.v_angular_max);
86 params_.v_angular_max_initial = params_.v_angular_max;
87 node->get_parameter(plugin_name_ +
".slowdown_radius", params_.slowdown_radius);
88 node->get_parameter(plugin_name_ +
".initial_rotation", params_.initial_rotation);
90 plugin_name_ +
".initial_rotation_min_angle", params_.initial_rotation_min_angle);
91 node->get_parameter(plugin_name_ +
".final_rotation", params_.final_rotation);
92 node->get_parameter(plugin_name_ +
".rotation_scaling_factor", params_.rotation_scaling_factor);
93 node->get_parameter(plugin_name_ +
".allow_backward", params_.allow_backward);
95 if (params_.initial_rotation && params_.allow_backward) {
97 logger_,
"Initial rotation and allow backward parameters are both true, "
98 "setting allow backward to false.");
99 params_.allow_backward =
false;
102 dyn_params_handler_ = node->add_on_set_parameters_callback(
106 rcl_interfaces::msg::SetParametersResult
109 rcl_interfaces::msg::SetParametersResult result;
110 std::lock_guard<std::mutex> lock_reinit(mutex_);
112 for (
auto parameter : parameters) {
113 const auto & type = parameter.get_type();
114 const auto & name = parameter.get_name();
116 if (type == ParameterType::PARAMETER_DOUBLE) {
117 if (name == plugin_name_ +
".transform_tolerance") {
118 params_.transform_tolerance = parameter.as_double();
119 }
else if (name == plugin_name_ +
".motion_target_dist") {
120 params_.motion_target_dist = parameter.as_double();
121 }
else if (name == plugin_name_ +
".k_phi") {
122 params_.k_phi = parameter.as_double();
123 }
else if (name == plugin_name_ +
".k_delta") {
124 params_.k_delta = parameter.as_double();
125 }
else if (name == plugin_name_ +
".beta") {
126 params_.beta = parameter.as_double();
127 }
else if (name == plugin_name_ +
".lambda") {
128 params_.lambda = parameter.as_double();
129 }
else if (name == plugin_name_ +
".v_linear_min") {
130 params_.v_linear_min = parameter.as_double();
131 }
else if (name == plugin_name_ +
".v_linear_max") {
132 params_.v_linear_max = parameter.as_double();
133 params_.v_linear_max_initial = params_.v_linear_max;
134 }
else if (name == plugin_name_ +
".v_angular_max") {
135 params_.v_angular_max = parameter.as_double();
136 params_.v_angular_max_initial = params_.v_angular_max;
137 }
else if (name == plugin_name_ +
".slowdown_radius") {
138 params_.slowdown_radius = parameter.as_double();
139 }
else if (name == plugin_name_ +
".initial_rotation_min_angle") {
140 params_.initial_rotation_min_angle = parameter.as_double();
141 }
else if (name == plugin_name_ +
".rotation_scaling_factor") {
142 params_.rotation_scaling_factor = parameter.as_double();
144 }
else if (type == ParameterType::PARAMETER_BOOL) {
145 if (name == plugin_name_ +
".initial_rotation") {
146 if (parameter.as_bool() && params_.allow_backward) {
148 logger_,
"Initial rotation and allow backward parameters are both true, "
149 "rejecting parameter change.");
152 params_.initial_rotation = parameter.as_bool();
153 }
else if (name == plugin_name_ +
".final_rotation") {
154 params_.final_rotation = parameter.as_bool();
155 }
else if (name == plugin_name_ +
".allow_backward") {
156 if (params_.initial_rotation && parameter.as_bool()) {
158 logger_,
"Initial rotation and allow backward parameters are both true, "
159 "rejecting parameter change.");
162 params_.allow_backward = parameter.as_bool();
167 result.successful =
true;
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(std::vector< rclcpp::Parameter > parameters)
Callback executed when a parameter change is detected.
ParameterHandler(rclcpp_lifecycle::LifecycleNode::SharedPtr node, std::string &plugin_name, rclcpp::Logger &logger, const double costmap_size_x)
Constructor for nav2_graceful_controller::ParameterHandler.