diff --git a/src/publisher_laser_map.cpp b/src/publisher_laser_map.cpp index 1046004391f1747c340849070bcee26ca9435321..50c1452996e2ee6e5cc2427d365706cb641faf66 100644 --- a/src/publisher_laser_map.cpp +++ b/src/publisher_laser_map.cpp @@ -187,18 +187,22 @@ void PublisherLaserMap::storeScan(FrameBaseConstPtr frame, CaptureLaser2dConstPt Eigen::ArrayXf orientations = Eigen::ArrayXf::LinSpaced(ranges.size(), scan_data.params_.angle_min_ + laser_extrinsics_o, scan_data.params_.angle_max_ + laser_extrinsics_o); + // filter NaN or Inf + Eigen::ArrayXf ranges_filtered = ranges.isFinite().select(ranges, 0.0); + if (discard_max_range_) + ranges_filtered = (ranges_filtered < scan_data.params_.range_max_-1e-3).select(ranges_filtered, 0.0); + // compute cartesian discarding ranges scan_data.local_points_.resize(2,ranges.size()); - if (discard_max_range_) - { - scan_data.local_points_.row(0) = orientations.cos() * (ranges < scan_data.params_.range_max_ -0.1).select(ranges, 0) + laser_extrinsics_p(0); - scan_data.local_points_.row(1) = orientations.sin() * (ranges < scan_data.params_.range_max_ -0.1).select(ranges, 0) + laser_extrinsics_p(1); - } - else - { - scan_data.local_points_.row(0) = orientations.cos() * ranges + laser_extrinsics_p(0); - scan_data.local_points_.row(1) = orientations.sin() * ranges + laser_extrinsics_p(1); - } + scan_data.local_points_.row(0) = orientations.cos() * ranges_filtered + laser_extrinsics_p(0); + scan_data.local_points_.row(1) = orientations.sin() * ranges_filtered + laser_extrinsics_p(1); + + // // discard max range (optionally) + // if (discard_max_range_) + // { + // scan_data.local_points_.row(0) = (ranges < scan_data.params_.range_max_-1e-3).select(scan_data.local_points_.row(0), 0.0); + // scan_data.local_points_.row(1) = (ranges < scan_data.params_.range_max_-1e-3).select(scan_data.local_points_.row(1), 0.0); + // } // local pointcloud scan_data.local_pc_ = pcl::PointCloud<pcl::PointXYZRGB>(ranges.size(),