Skip to content

Commit 40ab92d

Browse files
Nils-ChristianIsekeSakshayMahna
authored andcommitted
Dynamic param patterns (ros-navigation#4971)
* redesign dynamic param patterns Signed-off-by: Nils-ChristianIseke <nilsmailiseke@gmail.com> * change cache version Signed-off-by: Nils-ChristianIseke <nilsmailiseke@gmail.com> * check that parameter of type double are >=0.0 Signed-off-by: Nils-ChristianIseke <nilsmailiseke@gmail.com> --------- Signed-off-by: Nils-ChristianIseke <nilsmailiseke@gmail.com> Signed-off-by: Sakshay Mahna <sakshum19@gmail.com>
1 parent cbe0647 commit 40ab92d

File tree

3 files changed

+64
-30
lines changed

3 files changed

+64
-30
lines changed

.circleci/config.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ _commands:
3333
- restore_cache:
3434
name: Restore Cache << parameters.key >>
3535
keys:
36-
- "<< parameters.key >>-v32\
36+
- "<< parameters.key >>-v33\
3737
-{{ arch }}\
3838
-{{ .Branch }}\
3939
-{{ .Environment.CIRCLE_PR_NUMBER }}\
4040
-{{ checksum \"<< parameters.workspace >>/lockfile.txt\" }}"
41-
- "<< parameters.key >>-v32\
41+
- "<< parameters.key >>-v33\
4242
-{{ arch }}\
4343
-main\
4444
-<no value>\
@@ -58,7 +58,7 @@ _commands:
5858
steps:
5959
- save_cache:
6060
name: Save Cache << parameters.key >>
61-
key: "<< parameters.key >>-v32\
61+
key: "<< parameters.key >>-v33\
6262
-{{ arch }}\
6363
-{{ .Branch }}\
6464
-{{ .Environment.CIRCLE_PR_NUMBER }}\

nav2_regulated_pure_pursuit_controller/include/nav2_regulated_pure_pursuit_controller/parameter_handler.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,14 @@ class ParameterHandler
9393
* @brief Callback executed when a parameter change is detected
9494
* @param event ParameterEvent message
9595
*/
96+
void
97+
updateParametersCallback(std::vector<rclcpp::Parameter> parameters);
9698
rcl_interfaces::msg::SetParametersResult
97-
dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters);
98-
99+
validateParameterUpdatesCallback(std::vector<rclcpp::Parameter> parameters);
99100
// Dynamic parameters handler
100101
std::mutex mutex_;
101-
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler_;
102+
rclcpp::node_interfaces::PostSetParametersCallbackHandle::SharedPtr post_set_params_handler_;
103+
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr on_set_params_handler_;
102104
Parameters params_;
103105
std::string plugin_name_;
104106
rclcpp::Logger logger_ {rclcpp::get_logger("RegulatedPurePursuitController")};

nav2_regulated_pure_pursuit_controller/src/parameter_handler.cpp

Lines changed: 56 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -189,40 +189,75 @@ ParameterHandler::ParameterHandler(
189189
params_.use_cost_regulated_linear_velocity_scaling = false;
190190
}
191191

192-
dyn_params_handler_ = node->add_on_set_parameters_callback(
192+
post_set_params_handler_ = node->add_post_set_parameters_callback(
193193
std::bind(
194-
&ParameterHandler::dynamicParametersCallback,
194+
&ParameterHandler::updateParametersCallback,
195+
this, std::placeholders::_1));
196+
on_set_params_handler_ = node->add_on_set_parameters_callback(
197+
std::bind(
198+
&ParameterHandler::validateParameterUpdatesCallback,
195199
this, std::placeholders::_1));
196200
}
197201

198202
ParameterHandler::~ParameterHandler()
199203
{
200204
auto node = node_.lock();
201-
if (dyn_params_handler_ && node) {
202-
node->remove_on_set_parameters_callback(dyn_params_handler_.get());
205+
if (post_set_params_handler_ && node) {
206+
node->remove_post_set_parameters_callback(post_set_params_handler_.get());
207+
}
208+
post_set_params_handler_.reset();
209+
if (on_set_params_handler_ && node) {
210+
node->remove_on_set_parameters_callback(on_set_params_handler_.get());
203211
}
204-
dyn_params_handler_.reset();
212+
on_set_params_handler_.reset();
205213
}
206-
207-
rcl_interfaces::msg::SetParametersResult
208-
ParameterHandler::dynamicParametersCallback(
214+
rcl_interfaces::msg::SetParametersResult ParameterHandler::validateParameterUpdatesCallback(
209215
std::vector<rclcpp::Parameter> parameters)
210216
{
211217
rcl_interfaces::msg::SetParametersResult result;
212-
std::lock_guard<std::mutex> lock_reinit(mutex_);
213-
218+
result.successful = true;
214219
for (auto parameter : parameters) {
215220
const auto & type = parameter.get_type();
216221
const auto & name = parameter.get_name();
217222

218223
if (type == ParameterType::PARAMETER_DOUBLE) {
219-
if (name == plugin_name_ + ".inflation_cost_scaling_factor") {
220-
if (parameter.as_double() <= 0.0) {
224+
if (name == plugin_name_ + ".inflation_cost_scaling_factor" && parameter.as_double() <= 0.0) {
225+
RCLCPP_WARN(
226+
logger_, "The value inflation_cost_scaling_factor is incorrectly set, "
227+
"it should be >0. Ignoring parameter update.");
228+
result.successful = false;
229+
} else if (parameter.as_double() < 0.0) {
230+
RCLCPP_WARN(
231+
logger_, "The value of parameter '%s' is incorrectly set to %f, "
232+
"it should be >=0. Ignoring parameter update.",
233+
name.c_str(), parameter.as_double());
234+
result.successful = false;
235+
}
236+
} else if (type == ParameterType::PARAMETER_BOOL) {
237+
if (name == plugin_name_ + ".allow_reversing") {
238+
if (params_.use_rotate_to_heading && parameter.as_bool()) {
221239
RCLCPP_WARN(
222-
logger_, "The value inflation_cost_scaling_factor is incorrectly set, "
223-
"it should be >0. Ignoring parameter update.");
224-
continue;
240+
logger_, "Both use_rotate_to_heading and allow_reversing "
241+
"parameter cannot be set to true. Rejecting parameter update.");
242+
result.successful = false;
225243
}
244+
}
245+
}
246+
}
247+
return result;
248+
}
249+
void
250+
ParameterHandler::updateParametersCallback(
251+
std::vector<rclcpp::Parameter> parameters)
252+
{
253+
std::lock_guard<std::mutex> lock_reinit(mutex_);
254+
255+
for (const auto & parameter : parameters) {
256+
const auto & type = parameter.get_type();
257+
const auto & name = parameter.get_name();
258+
259+
if (type == ParameterType::PARAMETER_DOUBLE) {
260+
if (name == plugin_name_ + ".inflation_cost_scaling_factor") {
226261
params_.inflation_cost_scaling_factor = parameter.as_double();
227262
} else if (name == plugin_name_ + ".desired_linear_vel") {
228263
params_.desired_linear_vel = parameter.as_double();
@@ -257,6 +292,10 @@ ParameterHandler::dynamicParametersCallback(
257292
params_.cancel_deceleration = parameter.as_double();
258293
} else if (name == plugin_name_ + ".rotate_to_heading_min_angle") {
259294
params_.rotate_to_heading_min_angle = parameter.as_double();
295+
} else if (name == plugin_name_ + ".transform_tolerance") {
296+
params_.transform_tolerance = parameter.as_double();
297+
} else if (name == plugin_name_ + ".max_robot_pose_search_dist") {
298+
params_.max_robot_pose_search_dist = parameter.as_double();
260299
}
261300
} else if (type == ParameterType::PARAMETER_BOOL) {
262301
if (name == plugin_name_ + ".use_velocity_scaled_lookahead_dist") {
@@ -274,19 +313,12 @@ ParameterHandler::dynamicParametersCallback(
274313
} else if (name == plugin_name_ + ".use_cancel_deceleration") {
275314
params_.use_cancel_deceleration = parameter.as_bool();
276315
} else if (name == plugin_name_ + ".allow_reversing") {
277-
if (params_.use_rotate_to_heading && parameter.as_bool()) {
278-
RCLCPP_WARN(
279-
logger_, "Both use_rotate_to_heading and allow_reversing "
280-
"parameter cannot be set to true. Rejecting parameter update.");
281-
continue;
282-
}
283316
params_.allow_reversing = parameter.as_bool();
317+
} else if (name == plugin_name_ + ".interpolate_curvature_after_goal") {
318+
params_.interpolate_curvature_after_goal = parameter.as_bool();
284319
}
285320
}
286321
}
287-
288-
result.successful = true;
289-
return result;
290322
}
291323

292324
} // namespace nav2_regulated_pure_pursuit_controller

0 commit comments

Comments
 (0)