Skip to content

Commit 27dab69

Browse files
kaichieGuillaume Doisy
andauthored
Dynamic reconfigure CM pointcloud min_height and max_height (#5366)
* [DEX] make CM pointcloud min_height and max_height Signed-off-by: nelson <kaichie.lee@gmail.com> * [DEX] fix CM dynamicParametersCallback override Signed-off-by: nelson <kaichie.lee@gmail.com> * adapt param validating style Signed-off-by: nelson <kaichie.lee@gmail.com> --------- Signed-off-by: nelson <kaichie.lee@gmail.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com>
1 parent b66ef49 commit 27dab69

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

nav2_collision_monitor/include/nav2_collision_monitor/pointcloud.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,13 @@ class PointCloud : public Source
8888
*/
8989
void dataCallback(sensor_msgs::msg::PointCloud2::ConstSharedPtr msg);
9090

91+
/**
92+
* @brief Callback executed when a parameter change is detected
93+
* @param event ParameterEvent message
94+
*/
95+
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(
96+
std::vector<rclcpp::Parameter> parameters);
97+
9198
// ----- Variables -----
9299

93100
/// @brief PointCloud data subscriber

nav2_collision_monitor/src/pointcloud.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ void PointCloud::configure()
6464
source_topic,
6565
std::bind(&PointCloud::dataCallback, this, std::placeholders::_1),
6666
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));
6771
}
6872

6973
bool PointCloud::getData(
@@ -124,4 +128,32 @@ void PointCloud::dataCallback(sensor_msgs::msg::PointCloud2::ConstSharedPtr msg)
124128
data_ = msg;
125129
}
126130

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+
127159
} // namespace nav2_collision_monitor

0 commit comments

Comments
 (0)