@@ -261,16 +261,6 @@ void OccupancyGridMapOutlierFilterComponent::splitPointCloudFrontBack(
261
261
{
262
262
int x_offset = input_pc->fields [pcl::getFieldIndex (*input_pc, " x" )].offset ;
263
263
int point_step = input_pc->point_step ;
264
-
265
- front_pc.data .resize (input_pc->data .size ());
266
- behind_pc.data .resize (input_pc->data .size ());
267
- front_pc.point_step = input_pc->point_step ;
268
- behind_pc.point_step = input_pc->point_step ;
269
- front_pc.fields = input_pc->fields ;
270
- behind_pc.fields = input_pc->fields ;
271
- front_pc.height = input_pc->height ;
272
- behind_pc.height = input_pc->height ;
273
-
274
264
size_t front_count = 0 ;
275
265
size_t behind_count = 0 ;
276
266
@@ -290,34 +280,24 @@ void OccupancyGridMapOutlierFilterComponent::splitPointCloudFrontBack(
290
280
front_count++;
291
281
}
292
282
}
293
- front_pc.data .resize (front_count * point_step);
294
- front_pc.width = front_count;
295
- front_pc.row_step = front_count * front_pc.point_step ;
296
- front_pc.header = input_pc->header ;
297
- front_pc.is_bigendian = input_pc->is_bigendian ;
298
- front_pc.is_dense = input_pc->is_dense ;
299
-
300
- behind_pc.data .resize (behind_count * point_step);
301
- behind_pc.width = behind_count;
302
- behind_pc.row_step = behind_count * behind_pc.point_step ;
303
- behind_pc.header = input_pc->header ;
304
- behind_pc.is_bigendian = input_pc->is_bigendian ;
305
- behind_pc.is_dense = input_pc->is_dense ;
306
283
}
307
284
void OccupancyGridMapOutlierFilterComponent::onOccupancyGridMapAndPointCloud2 (
308
285
const OccupancyGrid::ConstSharedPtr & input_ogm, const PointCloud2::ConstSharedPtr & input_pc)
309
286
{
310
287
stop_watch_ptr_->toc (" processing_time" , true );
311
288
// Transform to occupancy grid map frame
312
- PointCloud2 ogm_frame_pc{};
313
- PointCloud2 input_front_pc{};
289
+
314
290
PointCloud2 input_behind_pc{};
315
- PointCloud2 ogm_frame_input_behind_pc{};
316
- PointCloud2 ogm_frame_pc;
317
- PointCloud2 input_front_pc;
318
- PointCloud2 input_behind_pc;
319
- PointCloud2 ogm_frame_input_behind_pc;
291
+ PointCloud2 input_front_pc{};
292
+ initializerPointCloud2 (*input_pc, input_front_pc);
293
+ initializerPointCloud2 (*input_pc, input_behind_pc);
294
+ // Split pointcloud into front and behind of the vehicle to reduce the calculation cost
320
295
splitPointCloudFrontBack (input_pc, input_front_pc, input_behind_pc);
296
+ finalizePointCloud2 (*input_pc, input_front_pc);
297
+ finalizePointCloud2 (*input_pc, input_behind_pc);
298
+
299
+ PointCloud2 ogm_frame_pc{};
300
+ PointCloud2 ogm_frame_input_behind_pc{};
321
301
if (
322
302
!transformPointcloud (input_front_pc, *tf2_, input_ogm->header .frame_id , ogm_frame_pc) ||
323
303
!transformPointcloud (
@@ -331,20 +311,16 @@ void OccupancyGridMapOutlierFilterComponent::onOccupancyGridMapAndPointCloud2(
331
311
initializerPointCloud2 (ogm_frame_pc, high_confidence_pc);
332
312
initializerPointCloud2 (ogm_frame_pc, low_confidence_pc);
333
313
initializerPointCloud2 (ogm_frame_pc, out_ogm_pc);
334
- // PclPointCloud ogm_frame_behind_pc;
335
- // pcl::fromROSMsg(ogm_frame_input_behind_pc, ogm_frame_behind_pc);
314
+ // split front pointcloud into high and low confidence and out of map pointcloud
336
315
filterByOccupancyGridMap (
337
316
*input_ogm, ogm_frame_pc, high_confidence_pc, low_confidence_pc, out_ogm_pc);
338
317
// Apply Radius search 2d filter for low confidence pointcloud
339
318
PointCloud2 filtered_low_confidence_pc{};
340
319
PointCloud2 outlier_pc{};
341
320
initializerPointCloud2 (low_confidence_pc, outlier_pc);
342
321
initializerPointCloud2 (low_confidence_pc, filtered_low_confidence_pc);
343
- PointCloud2 outlier_pc;
344
- outlier_pc.data .resize (low_confidence_pc.data .size ());
345
- outlier_pc.point_step = low_confidence_pc.point_step ;
346
- outlier_pc.fields = low_confidence_pc.fields ;
347
- outlier_pc.height = 1 ;
322
+ initializerPointCloud2 (low_confidence_pc, outlier_pc);
323
+
348
324
if (radius_search_2d_filter_ptr_) {
349
325
auto pc_frame_pose_stamped = getPoseStamped (
350
326
*tf2_, input_ogm->header .frame_id , input_pc->header .frame_id , input_ogm->header .stamp );
@@ -361,12 +337,7 @@ void OccupancyGridMapOutlierFilterComponent::onOccupancyGridMapAndPointCloud2(
361
337
concatPointCloud2 (ogm_frame_filtered_pc, filtered_low_confidence_pc);
362
338
concatPointCloud2 (ogm_frame_filtered_pc, out_ogm_pc);
363
339
concatPointCloud2 (ogm_frame_filtered_pc, ogm_frame_input_behind_pc);
364
-
365
340
finalizePointCloud2 (ogm_frame_pc, ogm_frame_filtered_pc);
366
- finalizePointCloud2 (ogm_frame_pc, filtered_low_confidence_pc);
367
- finalizePointCloud2 (ogm_frame_pc, outlier_pc);
368
- finalizePointCloud2 (ogm_frame_pc, high_confidence_pc);
369
- // Convert to ros msg
370
341
{
371
342
auto base_link_frame_filtered_pc_ptr = std::make_unique<PointCloud2>();
372
343
ogm_frame_filtered_pc.header = ogm_frame_pc.header ;
@@ -377,6 +348,9 @@ void OccupancyGridMapOutlierFilterComponent::onOccupancyGridMapAndPointCloud2(
377
348
pointcloud_pub_->publish (std::move (base_link_frame_filtered_pc_ptr));
378
349
}
379
350
if (debugger_ptr_) {
351
+ finalizePointCloud2 (ogm_frame_pc, filtered_low_confidence_pc);
352
+ finalizePointCloud2 (ogm_frame_pc, outlier_pc);
353
+ finalizePointCloud2 (ogm_frame_pc, high_confidence_pc);
380
354
debugger_ptr_->publishHighConfidence (high_confidence_pc, ogm_frame_pc.header );
381
355
debugger_ptr_->publishLowConfidence (filtered_low_confidence_pc, ogm_frame_pc.header );
382
356
debugger_ptr_->publishOutlier (outlier_pc, ogm_frame_pc.header );
@@ -396,12 +370,7 @@ void OccupancyGridMapOutlierFilterComponent::onOccupancyGridMapAndPointCloud2(
396
370
void OccupancyGridMapOutlierFilterComponent::initializerPointCloud2 (
397
371
const PointCloud2 & input, PointCloud2 & output)
398
372
{
399
- output.header = input.header ;
400
373
output.point_step = input.point_step ;
401
- output.fields = input.fields ;
402
- output.height = input.height ;
403
- output.is_bigendian = input.is_bigendian ;
404
- output.is_dense = input.is_dense ;
405
374
output.data .resize (input.data .size ());
406
375
}
407
376
0 commit comments