@@ -22,6 +22,11 @@ class laserSegmentationFixture : public laserSegmentation
22
22
laserSegmentationFixture ()
23
23
: laserSegmentation() {}
24
24
25
+ std::vector<slg::Segment2D> filter_segments (const std::vector<slg::Segment2D> & segments)
26
+ {
27
+ return laserSegmentation::filter_segments (segments);
28
+ }
29
+
25
30
visualization_msgs::msg::MarkerArray create_segment_viz_points (
26
31
std_msgs::msg::Header header, std::vector<slg::Segment2D> segment_list)
27
32
{
@@ -192,6 +197,103 @@ TEST(LaserSegmentationTest, createVizPoints) {
192
197
EXPECT_EQ (marker_array.markers [3 ].text , " 0" );
193
198
}
194
199
200
+ TEST (LaserSegmentationTest, filterSegments) {
201
+ // Create the node
202
+ auto node = std::make_shared<laserSegmentationFixture>();
203
+
204
+ // Set the parameters
205
+ nav2_util::declare_parameter_if_not_declared (
206
+ node, " min_points_segment" , rclcpp::ParameterValue (1 ));
207
+ nav2_util::declare_parameter_if_not_declared (
208
+ node, " max_points_segment" , rclcpp::ParameterValue (2 ));
209
+ nav2_util::declare_parameter_if_not_declared (
210
+ node, " min_avg_distance_from_sensor" , rclcpp::ParameterValue (0.1 ));
211
+ nav2_util::declare_parameter_if_not_declared (
212
+ node, " max_avg_distance_from_sensor" , rclcpp::ParameterValue (10.0 ));
213
+ nav2_util::declare_parameter_if_not_declared (
214
+ node, " min_segment_width" , rclcpp::ParameterValue (0.1 ));
215
+ nav2_util::declare_parameter_if_not_declared (
216
+ node, " max_segment_width" , rclcpp::ParameterValue (10.0 ));
217
+ nav2_util::declare_parameter_if_not_declared (
218
+ node, " distance_threshold" , rclcpp::ParameterValue (0.1 ));
219
+ nav2_util::declare_parameter_if_not_declared (
220
+ node, " noise_reduction" , rclcpp::ParameterValue (0.1 ));
221
+ node->configure ();
222
+
223
+ // Set a segment list with 0 segments
224
+ std::vector<slg::Segment2D> segment_list;
225
+ auto filtered_segments = node->filter_segments (segment_list);
226
+ // Check the filtered segments
227
+ EXPECT_EQ (filtered_segments.size (), 0 );
228
+
229
+ // Set a segment list with 3 segments of 1 point
230
+ segment_list.clear ();
231
+ slg::Segment2D segment;
232
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
233
+ segment_list.push_back (segment);
234
+ segment_list.push_back (segment);
235
+ segment_list.push_back (segment);
236
+ // Filter the segments
237
+ filtered_segments = node->filter_segments (segment_list);
238
+ // Check the filtered segments
239
+ EXPECT_EQ (filtered_segments.size (), 0 );
240
+
241
+ // Set a segment list with 1 segment with centroid below the minimum distance
242
+ segment_list.clear ();
243
+ segment.clear ();
244
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
245
+ segment_list.push_back (segment);
246
+ // Filter the segments
247
+ filtered_segments = node->filter_segments (segment_list);
248
+ // Check the filtered segments
249
+ EXPECT_EQ (filtered_segments.size (), 0 );
250
+
251
+ // Set a segment list with 1 segment with centroid above the maximum distance
252
+ segment_list.clear ();
253
+ segment.clear ();
254
+ segment.add_point (slg::Point2D (11.0 , 11.0 , slg::BACKGROUND));
255
+ segment_list.push_back (segment);
256
+ // Filter the segments
257
+ filtered_segments = node->filter_segments (segment_list);
258
+ // Check the filtered segments
259
+ EXPECT_EQ (filtered_segments.size (), 0 );
260
+
261
+ // Set a segment list with 1 segment with width below the minimum width
262
+ segment_list.clear ();
263
+ segment.clear ();
264
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
265
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
266
+ segment_list.push_back (segment);
267
+ // Filter the segments
268
+ filtered_segments = node->filter_segments (segment_list);
269
+ // Check the filtered segments
270
+ EXPECT_EQ (filtered_segments.size (), 0 );
271
+
272
+ // Set a segment list with 1 segment with width above the maximum width
273
+ segment_list.clear ();
274
+ segment.clear ();
275
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
276
+ segment.add_point (slg::Point2D (10.0 , 10.0 , slg::BACKGROUND));
277
+ segment_list.push_back (segment);
278
+ // Filter the segments
279
+ filtered_segments = node->filter_segments (segment_list);
280
+ // Check the filtered segments
281
+ EXPECT_EQ (filtered_segments.size (), 0 );
282
+
283
+ // Set a segment list with 1 segment with 2 points
284
+ segment_list.clear ();
285
+ segment.clear ();
286
+ segment.add_point (slg::Point2D (0.0 , 0.0 , slg::BACKGROUND));
287
+ segment.add_point (slg::Point2D (1.0 , 1.0 , slg::BACKGROUND));
288
+ segment_list.push_back (segment);
289
+ // Filter the segments
290
+ filtered_segments = node->filter_segments (segment_list);
291
+ // Check the filtered segments
292
+ EXPECT_EQ (filtered_segments.size (), 1 );
293
+ EXPECT_EQ (filtered_segments[0 ].centroid ().x , 0.5 );
294
+ EXPECT_EQ (filtered_segments[0 ].centroid ().y , 0.5 );
295
+ }
296
+
195
297
int main (int argc, char ** argv)
196
298
{
197
299
testing::InitGoogleTest (&argc, argv);
0 commit comments