Go to the documentation of this file.00001
00060
00061
00062
00063
00064
00065 #include <ros/ros.h>
00066 #include <pcl_ros/point_cloud.h>
00067 #include <pluginlib/class_list_macros.h>
00068 #include <nodelet/nodelet.h>
00069
00070
00071 #define PCL_NO_PRECOMPILE
00072 #include <pcl/filters/passthrough.h>
00073 #include <pcl/filters/impl/passthrough.hpp>
00074 #include <pcl/impl/pcl_base.hpp>
00075
00076
00077 #include <cob_3d_mapping_common/point_types.h>
00078
00079
00080
00081 class AmplitudeFilter : public nodelet::Nodelet
00082 {
00083 public:
00084 typedef PointXYZA PointT;
00085 typedef pcl::PointCloud<PointT> PointCloud;
00086
00087
00088 AmplitudeFilter ()
00089 {
00090
00091 }
00092
00093
00094 ~ AmplitudeFilter ()
00095 {
00097 }
00098
00099 void
00100 onInit ()
00101 {
00102 n_ = getPrivateNodeHandle ();
00103
00104 point_cloud_sub_ = n_.subscribe ("point_cloud_in", 1, &AmplitudeFilter::pointCloudSubCallback, this);
00105 point_cloud_pub_ = n_.advertise<PointCloud> ("point_cloud_out", 1);
00106
00107 int lim_min, lim_max;
00108 n_.param ("amplitude_min_threshold", lim_min, 2000);
00109 n_.param ("amplitude_max_threshold", lim_max, 60000);
00110 filter_.setFilterLimits (lim_min, lim_max);
00111 filter_.setFilterFieldName ("amplitude");
00112 }
00113
00114 void
00115 pointCloudSubCallback (PointCloud::ConstPtr pc)
00116 {
00117 PointCloud cloud_filtered;
00118 filter_.setInputCloud (pc);
00119 filter_.filter (cloud_filtered);
00120 point_cloud_pub_.publish (cloud_filtered);
00121 }
00122
00123 protected:
00124 ros::NodeHandle n_;
00125 ros::Subscriber point_cloud_sub_;
00126 ros::Publisher point_cloud_pub_;
00127
00128 pcl::PassThrough<PointT> filter_;
00129 };
00130
00131 PLUGINLIB_DECLARE_CLASS(cob_3d_mapping_filters, AmplitudeFilter, AmplitudeFilter, nodelet::Nodelet)
00132