Skip to content

Commit f7384d7

Browse files
Add voxel_min_points param for voxel filter (#160)
* Add voxel_min_points param for voxel filter * Update params in example * Use static_cast for type-casting & update default value in README
1 parent 8e9bbab commit f7384d7

File tree

8 files changed

+16
-3
lines changed

8 files changed

+16
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ rgbd_obstacle_layer:
116116
inf_is_valid: false #default false, for laser scans
117117
clear_after_reading: true #default false, clear the buffer after the layer gets readings from it
118118
voxel_filter: true #default off, apply voxel filter to sensor, recommend on
119+
voxel_min_points: 0 #default 0, minimum points per voxel for voxel filter
119120
rgbd1_clear:
120121
enabled: true #default true, can be toggled on/off with associated service call
121122
data_type: PointCloud2

example/constrained_indoor_environment_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ rgbd_obstacle_layer:
2727
observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
2828
inf_is_valid: false # default false, for laser scans
2929
voxel_filter: false # default off, apply voxel filter to sensor, recommend on
30+
voxel_min_points: 0 # default 0, minimum points per voxel for voxel filter
3031
clear_after_reading: true # default false, clear the buffer after the layer gets readings from it
3132
rgbd1_clear:
3233
data_type: PointCloud2

example/outdoor_environment_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ rgbd_obstacle_layer:
2727
observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
2828
inf_is_valid: false # default false, for laser scans
2929
voxel_filter: false # default off, apply voxel filter to sensor, recommend on
30+
voxel_min_points: 0 # default 0, minimum points per voxel for voxel filter
3031
clear_after_reading: true # default false, clear the buffer after the layer gets readings from it
3132
rgbd1_clear:
3233
data_type: PointCloud2

example/standard_indoor_environment_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ rgbd_obstacle_layer:
2727
observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
2828
inf_is_valid: false # default false, for laser scans
2929
voxel_filter: false # default off, apply voxel filter to sensor, recommend on
30+
voxel_min_points: 0 # default 0, minimum points per voxel for voxel filter
3031
clear_after_reading: true # default false, clear the buffer after the layer gets readings from it
3132
rgbd1_clear:
3233
data_type: PointCloud2

example/vlp16_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ rgbd_obstacle_layer:
2727
observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
2828
inf_is_valid: false # default false, for laser scans
2929
voxel_filter: false # default off, apply voxel filter to sensor, recommend on
30+
voxel_min_points: 0 # default 0, minimum points per voxel for voxel filter
3031
clear_after_reading: true # default false, clear the buffer after the layer gets readings from it
3132
rgbd1_clear:
3233
enabled: true #default true, can be toggled on/off with associated service call

include/spatio_temporal_voxel_layer/measurement_buffer.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class MeasurementBuffer
9595
const bool& clearing, \
9696
const double& voxel_size, \
9797
const bool& voxel_filter, \
98+
const int& voxel_min_points, \
9899
const bool& enabled, \
99100
const bool& clear_buffer_after_reading, \
100101
const ModelType& model_type);
@@ -135,6 +136,7 @@ class MeasurementBuffer
135136
double _min_z, _max_z, _vertical_fov, _vertical_fov_padding, _horizontal_fov;
136137
double _decay_acceleration, _voxel_size;
137138
bool _marking, _clearing, _voxel_filter, _clear_buffer_after_reading, _enabled;
139+
int _voxel_min_points;
138140
ModelType _model_type;
139141
};
140142

src/measurement_buffer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ MeasurementBuffer::MeasurementBuffer(const std::string& topic_name, \
6262
const bool& clearing, \
6363
const double& voxel_size, \
6464
const bool& voxel_filter, \
65+
const int& voxel_min_points, \
6566
const bool& enabled, \
6667
const bool& clear_buffer_after_reading, \
6768
const ModelType& model_type) :
@@ -75,8 +76,8 @@ MeasurementBuffer::MeasurementBuffer(const std::string& topic_name, \
7576
_vertical_fov(vFOV), _vertical_fov_padding(vFOVPadding),
7677
_horizontal_fov(hFOV), _decay_acceleration(decay_acceleration),
7778
_marking(marking), _clearing(clearing), _voxel_size(voxel_size),
78-
_voxel_filter(voxel_filter), _enabled(enabled),
79-
_clear_buffer_after_reading(clear_buffer_after_reading),
79+
_voxel_filter(voxel_filter), _voxel_min_points(voxel_min_points),
80+
_enabled(enabled), _clear_buffer_after_reading(clear_buffer_after_reading),
8081
_model_type(model_type)
8182
{
8283
}
@@ -160,6 +161,7 @@ void MeasurementBuffer::BufferROSCloud(const sensor_msgs::PointCloud2& cloud)
160161
sor.setLeafSize ((float)_voxel_size,
161162
(float)_voxel_size,
162163
(float)_voxel_size);
164+
sor.setMinimumPointsNumberPerVoxel(static_cast<unsigned int>(_voxel_min_points));
163165
sor.filter(*cloud_filtered);
164166
}
165167
else

src/spatio_temporal_voxel_layer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ void SpatioTemporalVoxelLayer::onInitialize(void)
149149
double hFOV, decay_acceleration;
150150
std::string topic, sensor_frame, data_type;
151151
bool inf_is_valid, clearing, marking, voxel_filter, clear_after_reading, enabled;
152+
int voxel_min_points;
152153

153154
source_node.param("topic", topic, source);
154155
source_node.param("sensor_frame", sensor_frame, std::string(""));
@@ -174,6 +175,8 @@ void SpatioTemporalVoxelLayer::onInitialize(void)
174175
source_node.param("decay_acceleration", decay_acceleration, 0.);
175176
// performs an approximate voxel filter over the data to reduce
176177
source_node.param("voxel_filter", voxel_filter, false);
178+
// minimum points per voxel for voxel filter
179+
source_node.param("voxel_min_points", voxel_min_points, 0);
177180
// clears measurement buffer after reading values from it
178181
source_node.param("clear_after_reading", clear_after_reading, false);
179182
// Whether the frustum is enabled on startup. Can be toggled with service
@@ -209,7 +212,8 @@ void SpatioTemporalVoxelLayer::onInitialize(void)
209212
obstacle_range, *tf_, _global_frame, sensor_frame, \
210213
transform_tolerance, min_z, max_z, vFOV, vFOVPadding, hFOV, \
211214
decay_acceleration, marking, clearing, _voxel_size, \
212-
voxel_filter, enabled, clear_after_reading, model_type)));
215+
voxel_filter, voxel_min_points, enabled, clear_after_reading, \
216+
model_type)));
213217

214218
// Add buffer to marking observation buffers
215219
if (marking == true)

0 commit comments

Comments
 (0)