33#include < pcl_conversions/pcl_conversions.h>
44#include < pcl_ros/point_cloud.h>
55
6+ #include < am_utils/am_pcl_utils.h>
67#include < am_utils/dust_filter.h>
78#include < am_utils/point_types.h>
89#include < vb_util_lib/frame_names.h>
@@ -33,10 +34,10 @@ void DustFilter::getParams()
3334 nh_.param <float >(name_space_ + " /range_threshold_m" , range_threshold_m_, DEFAULT_RANGE_THRESHHOLD_M);
3435 nh_.param <int >(name_space_ + " /min_neighbors" , min_neighbors_, DEFAULT_MIN_NEIGHBORS);
3536 nh_.param <float >(name_space_ + " /max_range_m" , max_range_m_, DEFAULT_MAX_RANGE_M);
36- nh_.param <float >(name_space_ + " /inside_min_x_m" , inside_min_x_m_, -0.5 );
37- nh_.param <float >(name_space_ + " /inside_max_x_m" , inside_max_x_m_, 0.5 );
38- nh_.param <float >(name_space_ + " /inside_min_y_m" , inside_min_y_m_, -0.5 );
39- nh_.param <float >(name_space_ + " /inside_max_y_m" , inside_max_y_m_, 0.5 );
37+ nh_.param <float >(name_space_ + " /inside_min_x_m" , inside_min_x_m_, -0.7 );
38+ nh_.param <float >(name_space_ + " /inside_max_x_m" , inside_max_x_m_, 0.7 );
39+ nh_.param <float >(name_space_ + " /inside_min_y_m" , inside_min_y_m_, -0.7 );
40+ nh_.param <float >(name_space_ + " /inside_max_y_m" , inside_max_y_m_, 0.7 );
4041 nh_.param <float >(name_space_ + " /inside_min_z_m" , inside_min_z_m_, -0.5 );
4142 nh_.param <float >(name_space_ + " /inside_max_z_m" , inside_max_z_m_, 0.5 );
4243 nh_.param <float >(name_space_ + " /outside_min_x_m" , outside_min_x_m_, std::numeric_limits<float >::lowest ());
@@ -59,7 +60,7 @@ void DustFilter::getParams()
5960
6061void DustFilter::printInsideParams ()
6162{
62- ROS_INFO_STREAM (name_space_ + " /inside_max_x_m = " << inside_max_x_m_ );
63+ ROS_INFO_STREAM (name_space_ + " /inside_min_x_m = " << inside_min_x_m_ );
6364 ROS_INFO_STREAM (name_space_ + " /inside_max_x_m = " << inside_max_x_m_);
6465 ROS_INFO_STREAM (name_space_ + " /inside_min_y_m = " << inside_min_y_m_);
6566 ROS_INFO_STREAM (name_space_ + " /inside_max_y_m = " << inside_max_y_m_);
@@ -77,27 +78,27 @@ void DustFilter::printOutsideParams()
7778 ROS_INFO_STREAM (name_space_ + " /outside_max_z_m = " << outside_max_z_m_);
7879}
7980
80- int DustFilter::process (pcl::PointCloud<pcl::PointXYZIR> &pcl)
81+ int DustFilter::process (pcl::PointCloud<pcl::PointXYZIR> &pcl, bool skip_dust_filter )
8182{
82- bool nan_mask[pcl.width * pcl.width ];
83+ bool nan_mask[pcl.width * pcl.height ];
8384
8485 bool is_dense = pcl.is_dense ;
8586 for (uint32_t width = 0 ; width < pcl.width ; width++)
8687 {
8788 for (uint32_t height = 0 ; height < pcl.height ; height++)
8889 {
8990 int index = width * pcl.height + height;
91+ nan_mask[index] = false ;
9092 pcl::PointXYZIR &point = pcl.points [index];
9193
9294 // if already nan, continue
93- if (isSetToNaN (point))
95+ if (AMPCLUtils:: isSetToNaN (point))
9496 {
9597 nan_mask[index] = true ;
9698 continue ;
9799 }
98100
99101 // if beyond the max range, don't filter dust
100- bool skip_dust_filter = false ;
101102 if (point.range > max_range_m_)
102103 {
103104 skip_dust_filter = true ;
@@ -175,7 +176,7 @@ int DustFilter::process(pcl::PointCloud<pcl::PointXYZIR> &pcl)
175176 pcl::PointXYZIR &point = pcl.points [index];
176177 if (nan_mask[index])
177178 {
178- setNaN (point);
179+ AMPCLUtils:: setNaN (point);
179180 points_removed++;
180181 is_dense = false ;
181182 }
@@ -192,26 +193,6 @@ int DustFilter::process(pcl::PointCloud<pcl::PointXYZIR> &pcl)
192193 return points_removed;
193194}
194195
195- bool DustFilter::isSetToNaN (pcl::PointXYZIR &point)
196- {
197- if (std::isnan (point.x ) || std::isnan (point.y ) || std::isnan (point.z ) ||
198- std::isnan (point.intensity ) || std::isnan (point.intensity ))
199- {
200- setNaN (point);
201- return true ;
202- }
203- return false ;
204- }
205-
206- void DustFilter::setNaN (pcl::PointXYZIR &point)
207- {
208- point.x = std::nanf (" " );
209- point.y = std::nanf (" " );
210- point.z = std::nanf (" " );
211- point.intensity = std::nanf (" " );
212- point.range = std::nanf (" " );
213- }
214-
215196void DustFilter::setInsideFilter (float min_x_m_, float max_x_m_, float min_y_m_, float max_y_m_, float min_z_m_, float max_z_m_)
216197{
217198 inside_min_x_m_ = min_x_m_;
0 commit comments