Skip to content

Commit 7c5817b

Browse files
author
svn
committed
Added setting for max noise cluster distance. All clusters further away are not considered to be noise clusters.
1 parent f19f1c3 commit 7c5817b

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

launch/cob4_test_launch_node.launch

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
use_inf: true
2727

2828
use_outlier_filter: true
29+
max_noise_cluster_distance: 2.5
2930
cluster_break_distance: 0.3
30-
max_noise_cluster_size: 5
31+
max_noise_cluster_size: 10
3132

3233
# Concurrency level, affects number of pointclouds queued for processing and number of threads used
3334
# 0 : Detect number of cores
@@ -58,8 +59,9 @@
5859
use_inf: true
5960

6061
use_outlier_filter: true
62+
max_noise_cluster_distance: 2.5
6163
cluster_break_distance: 0.3
62-
max_noise_cluster_size: 5
64+
max_noise_cluster_size: 10
6365

6466
# Concurrency level, affects number of pointclouds queued for processing and number of threads used
6567
# 0 : Detect number of cores

launch/cob4_test_launch_nodelet.launch

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@
3232
use_inf: true
3333

3434
use_outlier_filter: true
35+
max_noise_cluster_distance: 2.5
3536
cluster_break_distance: 0.3
36-
max_noise_cluster_size: 5
37+
max_noise_cluster_size: 10
3738

3839
# Concurrency level, affects number of pointclouds queued for processing and number of threads used
3940
# 0 : Detect number of cores

src/ipa_pointcloud_to_laserscan_nodelet.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
namespace pointcloud_to_laserscan
5353
{
54-
void scan_outlier_removal_filter(sensor_msgs::LaserScan &scan, double cluster_break_distance, int max_noise_cluster_size);
54+
void scan_outlier_removal_filter(sensor_msgs::LaserScan &scan, double cluster_break_distance, int max_noise_cluster_size, double max_noise_cluster_distance);
5555

5656
IpaPointCloudToLaserScanNodelet::IpaPointCloudToLaserScanNodelet() {}
5757

@@ -146,9 +146,11 @@ namespace pointcloud_to_laserscan
146146
{
147147
// Get filter related parameters
148148
bool use_outlier_filter;
149+
double max_noise_cluster_distance;
149150
double cluster_break_distance;
150151
int max_noise_cluster_size;
151152
private_nh_.param<bool>("use_outlier_filter", use_outlier_filter, false);
153+
private_nh_.param<double>("max_noise_cluster_distance", max_noise_cluster_distance, 2.0);
152154
private_nh_.param<double>("cluster_break_distance", cluster_break_distance, 0.3);
153155
private_nh_.param<int>("max_noise_cluster_size", max_noise_cluster_size, 5);
154156

@@ -307,7 +309,7 @@ namespace pointcloud_to_laserscan
307309

308310
if(use_outlier_filter)
309311
{
310-
scan_outlier_removal_filter(output, cluster_break_distance, max_noise_cluster_size);
312+
scan_outlier_removal_filter(output, cluster_break_distance, max_noise_cluster_size, max_noise_cluster_distance);
311313
}
312314

313315
pub_.publish(output);
@@ -326,7 +328,7 @@ namespace pointcloud_to_laserscan
326328
* @param cluster_break_distance The range jump to cause a cluster separation
327329
* @param max_noise_cluster_size The maximum number of points a cluster can contain in order to be seen as noise and thereby removed
328330
*/
329-
void scan_outlier_removal_filter(sensor_msgs::LaserScan &scan, double cluster_break_distance, int max_noise_cluster_size)
331+
void scan_outlier_removal_filter(sensor_msgs::LaserScan &scan, double cluster_break_distance, int max_noise_cluster_size, double max_noise_cluster_distance)
330332
{
331333
// help function initialization
332334
int ranges_size = scan.ranges.size();
@@ -356,9 +358,25 @@ namespace pointcloud_to_laserscan
356358
// Only remove cluster if it is closer than surrounding clusters
357359
if ((i_current_cluster < max_noise_cluster_size) && (new_cluster_further_away != cluster_further_away))
358360
{
361+
// check if all cluster points are closer than the max noise distance
362+
bool is_noise_cluster = true;
359363
for (int k = 0; k < i_current_cluster; k++)
360364
{
361-
scan.ranges[cluster_indecies[k]] = scan.range_max;
365+
if (scan.ranges[cluster_indecies[k]] > max_noise_cluster_distance)
366+
{
367+
is_noise_cluster = false;
368+
break;
369+
}
370+
}
371+
372+
// Only remove cluster points if all points are closer than the max noise distance
373+
if(is_noise_cluster)
374+
{
375+
for (int k = 0; k < i_current_cluster; k++)
376+
{
377+
if (scan.ranges[cluster_indecies[k]] < max_noise_cluster_distance)
378+
scan.ranges[cluster_indecies[k]] = scan.range_max;
379+
}
362380
}
363381
}
364382

0 commit comments

Comments
 (0)