Skip to content

Commit 01405e3

Browse files
authored
Change dynamic parameters method (#2585)
* dyn param method * dont add to reset for checkers * fix test
1 parent 0e52d90 commit 01405e3

File tree

14 files changed

+195
-246
lines changed

14 files changed

+195
-246
lines changed

‎nav2_controller/include/nav2_controller/plugins/simple_goal_checker.hpp‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@
3737

3838
#include <memory>
3939
#include <string>
40+
#include <vector>
4041

4142
#include "rclcpp/rclcpp.hpp"
4243
#include "rclcpp_lifecycle/lifecycle_node.hpp"
4344
#include "nav2_core/goal_checker.hpp"
45+
#include "rcl_interfaces/msg/set_parameters_result.hpp"
4446

4547
namespace nav2_controller
4648
{
@@ -73,16 +75,16 @@ class SimpleGoalChecker : public nav2_core::GoalChecker
7375
bool stateful_, check_xy_;
7476
// Cached squared xy_goal_tolerance_
7577
double xy_goal_tolerance_sq_;
76-
// Subscription for parameter change
77-
rclcpp::AsyncParametersClient::SharedPtr parameters_client_;
78-
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_event_sub_;
78+
// Dynamic parameters handler
79+
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
7980
std::string plugin_name_;
8081

8182
/**
8283
* @brief Callback executed when a paramter change is detected
83-
* @param event ParameterEvent message
84+
* @param parameters list of changed parameters
8485
*/
85-
void on_parameter_event_callback(const rcl_interfaces::msg::ParameterEvent::SharedPtr event);
86+
rcl_interfaces::msg::SetParametersResult
87+
dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters);
8688
};
8789

8890
} // namespace nav2_controller

‎nav2_controller/include/nav2_controller/plugins/simple_progress_checker.hpp‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#define NAV2_CONTROLLER__PLUGINS__SIMPLE_PROGRESS_CHECKER_HPP_
1717

1818
#include <string>
19+
#include <vector>
1920
#include "rclcpp/rclcpp.hpp"
2021
#include "rclcpp_lifecycle/lifecycle_node.hpp"
2122
#include "nav2_core/progress_checker.hpp"
@@ -61,16 +62,16 @@ class SimpleProgressChecker : public nav2_core::ProgressChecker
6162
rclcpp::Time baseline_time_;
6263

6364
bool baseline_pose_set_{false};
64-
// Subscription for parameter change
65-
rclcpp::AsyncParametersClient::SharedPtr parameters_client_;
66-
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_event_sub_;
65+
// Dynamic parameters handler
66+
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
6767
std::string plugin_name_;
6868

6969
/**
7070
* @brief Callback executed when a paramter change is detected
71-
* @param event ParameterEvent message
71+
* @param parameters list of changed parameters
7272
*/
73-
void on_parameter_event_callback(const rcl_interfaces::msg::ParameterEvent::SharedPtr event);
73+
rcl_interfaces::msg::SetParametersResult
74+
dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters);
7475
};
7576
} // namespace nav2_controller
7677

‎nav2_controller/include/nav2_controller/plugins/stopped_goal_checker.hpp‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
#include <memory>
3939
#include <string>
40+
#include <vector>
4041

4142
#include "rclcpp/rclcpp.hpp"
4243
#include "rclcpp_lifecycle/lifecycle_node.hpp"
@@ -66,16 +67,16 @@ class StoppedGoalChecker : public SimpleGoalChecker
6667

6768
protected:
6869
double rot_stopped_velocity_, trans_stopped_velocity_;
69-
// Subscription for parameter change
70-
rclcpp::AsyncParametersClient::SharedPtr parameters_client_;
71-
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_event_sub_;
70+
// Dynamic parameters handler
71+
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
7272
std::string plugin_name_;
7373

7474
/**
7575
* @brief Callback executed when a paramter change is detected
76-
* @param event ParameterEvent message
76+
* @param parameters list of changed parameters
7777
*/
78-
void on_parameter_event_callback(const rcl_interfaces::msg::ParameterEvent::SharedPtr event);
78+
rcl_interfaces::msg::SetParametersResult
79+
dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters);
7980
};
8081

8182
} // namespace nav2_controller

‎nav2_controller/plugins/simple_goal_checker.cpp‎

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <memory>
3636
#include <string>
3737
#include <limits>
38+
#include <vector>
3839
#include "nav2_controller/plugins/simple_goal_checker.hpp"
3940
#include "pluginlib/class_list_macros.hpp"
4041
#include "angles/angles.h"
@@ -83,15 +84,9 @@ void SimpleGoalChecker::initialize(
8384

8485
xy_goal_tolerance_sq_ = xy_goal_tolerance_ * xy_goal_tolerance_;
8586

86-
// Setup callback for changes to parameters.
87-
parameters_client_ = std::make_shared<rclcpp::AsyncParametersClient>(
88-
node->get_node_base_interface(),
89-
node->get_node_topics_interface(),
90-
node->get_node_graph_interface(),
91-
node->get_node_services_interface());
92-
93-
parameter_event_sub_ = parameters_client_->on_parameter_event(
94-
std::bind(&SimpleGoalChecker::on_parameter_event_callback, this, _1));
87+
// Add callback for dynamic parameters
88+
dyn_params_handler = node->add_on_set_parameters_callback(
89+
std::bind(&SimpleGoalChecker::dynamicParametersCallback, this, _1));
9590
}
9691

9792
void SimpleGoalChecker::reset()
@@ -144,28 +139,29 @@ bool SimpleGoalChecker::getTolerances(
144139
return true;
145140
}
146141

147-
void
148-
SimpleGoalChecker::on_parameter_event_callback(
149-
const rcl_interfaces::msg::ParameterEvent::SharedPtr event)
142+
rcl_interfaces::msg::SetParametersResult
143+
SimpleGoalChecker::dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters)
150144
{
151-
for (auto & changed_parameter : event->changed_parameters) {
152-
const auto & type = changed_parameter.value.type;
153-
const auto & name = changed_parameter.name;
154-
const auto & value = changed_parameter.value;
145+
rcl_interfaces::msg::SetParametersResult result;
146+
for (auto & parameter : parameters) {
147+
const auto & type = parameter.get_type();
148+
const auto & name = parameter.get_name();
155149

156150
if (type == ParameterType::PARAMETER_DOUBLE) {
157151
if (name == plugin_name_ + ".xy_goal_tolerance") {
158-
xy_goal_tolerance_ = value.double_value;
152+
xy_goal_tolerance_ = parameter.as_double();
159153
xy_goal_tolerance_sq_ = xy_goal_tolerance_ * xy_goal_tolerance_;
160154
} else if (name == plugin_name_ + ".yaw_goal_tolerance") {
161-
yaw_goal_tolerance_ = value.double_value;
155+
yaw_goal_tolerance_ = parameter.as_double();
162156
}
163157
} else if (type == ParameterType::PARAMETER_BOOL) {
164158
if (name == plugin_name_ + ".stateful") {
165-
stateful_ = value.bool_value;
159+
stateful_ = parameter.as_bool();
166160
}
167161
}
168162
}
163+
result.successful = true;
164+
return result;
169165
}
170166

171167
} // namespace nav2_controller

‎nav2_controller/plugins/simple_progress_checker.cpp‎

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <cmath>
1717
#include <string>
1818
#include <memory>
19+
#include <vector>
1920
#include "nav2_core/exceptions.hpp"
2021
#include "nav_2d_utils/conversions.hpp"
2122
#include "geometry_msgs/msg/pose_stamped.hpp"
@@ -49,15 +50,9 @@ void SimpleProgressChecker::initialize(
4950
node->get_parameter_or(plugin_name + ".movement_time_allowance", time_allowance_param, 10.0);
5051
time_allowance_ = rclcpp::Duration::from_seconds(time_allowance_param);
5152

52-
// Setup callback for changes to parameters.
53-
parameters_client_ = std::make_shared<rclcpp::AsyncParametersClient>(
54-
node->get_node_base_interface(),
55-
node->get_node_topics_interface(),
56-
node->get_node_graph_interface(),
57-
node->get_node_services_interface());
58-
59-
parameter_event_sub_ = parameters_client_->on_parameter_event(
60-
std::bind(&SimpleProgressChecker::on_parameter_event_callback, this, _1));
53+
// Add callback for dynamic parameters
54+
dyn_params_handler = node->add_on_set_parameters_callback(
55+
std::bind(&SimpleProgressChecker::dynamicParametersCallback, this, _1));
6156
}
6257

6358
bool SimpleProgressChecker::check(geometry_msgs::msg::PoseStamped & current_pose)
@@ -101,23 +96,24 @@ static double pose_distance(
10196
return std::hypot(dx, dy);
10297
}
10398

104-
void
105-
SimpleProgressChecker::on_parameter_event_callback(
106-
const rcl_interfaces::msg::ParameterEvent::SharedPtr event)
99+
rcl_interfaces::msg::SetParametersResult
100+
SimpleProgressChecker::dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters)
107101
{
108-
for (auto & changed_parameter : event->changed_parameters) {
109-
const auto & type = changed_parameter.value.type;
110-
const auto & name = changed_parameter.name;
111-
const auto & value = changed_parameter.value;
102+
rcl_interfaces::msg::SetParametersResult result;
103+
for (auto parameter : parameters) {
104+
const auto & type = parameter.get_type();
105+
const auto & name = parameter.get_name();
112106

113107
if (type == ParameterType::PARAMETER_DOUBLE) {
114108
if (name == plugin_name_ + ".required_movement_radius") {
115-
radius_ = value.double_value;
109+
radius_ = parameter.as_double();
116110
} else if (name == plugin_name_ + ".movement_time_allowance") {
117-
time_allowance_ = rclcpp::Duration::from_seconds(value.double_value);
111+
time_allowance_ = rclcpp::Duration::from_seconds(parameter.as_double());
118112
}
119113
}
120114
}
115+
result.successful = true;
116+
return result;
121117
}
122118

123119
} // namespace nav2_controller

‎nav2_controller/plugins/stopped_goal_checker.cpp‎

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <string>
3737
#include <memory>
3838
#include <limits>
39+
#include <vector>
3940
#include "nav2_controller/plugins/stopped_goal_checker.hpp"
4041
#include "pluginlib/class_list_macros.hpp"
4142
#include "nav2_util/node_utils.hpp"
@@ -73,15 +74,9 @@ void StoppedGoalChecker::initialize(
7374
node->get_parameter(plugin_name + ".rot_stopped_velocity", rot_stopped_velocity_);
7475
node->get_parameter(plugin_name + ".trans_stopped_velocity", trans_stopped_velocity_);
7576

76-
// Setup callback for changes to parameters.
77-
parameters_client_ = std::make_shared<rclcpp::AsyncParametersClient>(
78-
node->get_node_base_interface(),
79-
node->get_node_topics_interface(),
80-
node->get_node_graph_interface(),
81-
node->get_node_services_interface());
82-
83-
parameter_event_sub_ = parameters_client_->on_parameter_event(
84-
std::bind(&StoppedGoalChecker::on_parameter_event_callback, this, _1));
77+
// Add callback for dynamic parameters
78+
dyn_params_handler = node->add_on_set_parameters_callback(
79+
std::bind(&StoppedGoalChecker::dynamicParametersCallback, this, _1));
8580
}
8681

8782
bool StoppedGoalChecker::isGoalReached(
@@ -118,23 +113,24 @@ bool StoppedGoalChecker::getTolerances(
118113
return true && rtn;
119114
}
120115

121-
void
122-
StoppedGoalChecker::on_parameter_event_callback(
123-
const rcl_interfaces::msg::ParameterEvent::SharedPtr event)
116+
rcl_interfaces::msg::SetParametersResult
117+
StoppedGoalChecker::dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters)
124118
{
125-
for (auto & changed_parameter : event->changed_parameters) {
126-
const auto & type = changed_parameter.value.type;
127-
const auto & name = changed_parameter.name;
128-
const auto & value = changed_parameter.value;
119+
rcl_interfaces::msg::SetParametersResult result;
120+
for (auto parameter : parameters) {
121+
const auto & type = parameter.get_type();
122+
const auto & name = parameter.get_name();
129123

130124
if (type == ParameterType::PARAMETER_DOUBLE) {
131125
if (name == plugin_name_ + ".rot_stopped_velocity") {
132-
rot_stopped_velocity_ = value.double_value;
126+
rot_stopped_velocity_ = parameter.as_double();
133127
} else if (name == plugin_name_ + ".trans_stopped_velocity") {
134-
trans_stopped_velocity_ = value.double_value;
128+
trans_stopped_velocity_ = parameter.as_double();
135129
}
136130
}
137131
}
132+
result.successful = true;
133+
return result;
138134
}
139135

140136
} // namespace nav2_controller

‎nav2_dwb_controller/dwb_plugins/include/dwb_plugins/kinematic_parameters.hpp‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
#include <memory>
3939
#include <string>
40+
#include <vector>
4041

4142
#include "rclcpp/rclcpp.hpp"
4243
#include "nav2_util/lifecycle_node.hpp"
@@ -120,10 +121,14 @@ class KinematicsHandler
120121
protected:
121122
std::atomic<KinematicParameters *> kinematics_;
122123

123-
// Subscription for parameter change
124-
rclcpp::AsyncParametersClient::SharedPtr parameters_client_;
125-
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_event_sub_;
126-
void on_parameter_event_callback(const rcl_interfaces::msg::ParameterEvent::SharedPtr event);
124+
// Dynamic parameters handler
125+
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
126+
/**
127+
* @brief Callback executed when a paramter change is detected
128+
* @param parameters list of changed parameters
129+
*/
130+
rcl_interfaces::msg::SetParametersResult
131+
dynamicParametersCallback(std::vector<rclcpp::Parameter> parameters);
127132
void update_kinematics(KinematicParameters kinematics);
128133
std::string plugin_name_;
129134
};

0 commit comments

Comments
 (0)