@@ -64,6 +64,10 @@ void PointCloud::configure()
64
64
source_topic,
65
65
std::bind (&PointCloud::dataCallback, this , std::placeholders::_1),
66
66
nav2::qos::SensorDataQoS ());
67
+
68
+ // Add callback for dynamic parameters
69
+ dyn_params_handler_ = node->add_on_set_parameters_callback (
70
+ std::bind (&PointCloud::dynamicParametersCallback, this , std::placeholders::_1));
67
71
}
68
72
69
73
bool PointCloud::getData (
@@ -124,4 +128,32 @@ void PointCloud::dataCallback(sensor_msgs::msg::PointCloud2::ConstSharedPtr msg)
124
128
data_ = msg;
125
129
}
126
130
131
+ rcl_interfaces::msg::SetParametersResult
132
+ PointCloud::dynamicParametersCallback (
133
+ std::vector<rclcpp::Parameter> parameters)
134
+ {
135
+ rcl_interfaces::msg::SetParametersResult result;
136
+
137
+ for (auto parameter : parameters) {
138
+ const auto & param_type = parameter.get_type ();
139
+ const auto & param_name = parameter.get_name ();
140
+ if (param_name.find (source_name_ + " ." ) != 0 ) {
141
+ continue ;
142
+ }
143
+ if (param_type == rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE) {
144
+ if (param_name == source_name_ + " ." + " min_height" ) {
145
+ min_height_ = parameter.as_double ();
146
+ } else if (param_name == source_name_ + " ." + " max_height" ) {
147
+ max_height_ = parameter.as_double ();
148
+ }
149
+ } else if (param_type == rcl_interfaces::msg::ParameterType::PARAMETER_BOOL) {
150
+ if (param_name == source_name_ + " ." + " enabled" ) {
151
+ enabled_ = parameter.as_bool ();
152
+ }
153
+ }
154
+ }
155
+ result.successful = true ;
156
+ return result;
157
+ }
158
+
127
159
} // namespace nav2_collision_monitor
0 commit comments