00001 00060 //################## 00061 //#### includes #### 00062 // standard includes 00063 //-- 00064 // ROS includes 00065 #include <ros/ros.h> 00066 #include <pluginlib/class_list_macros.h> 00067 #include <nodelet/nodelet.h> 00068 #include <pcl_ros/point_cloud.h> 00069 00070 // pcl includes 00071 #include <pcl/point_types.h> 00072 00073 // cob_3d_mapping_filters includes 00074 //#include <cob_3d_mapping_common/point_types.h> 00075 #include <cob_3d_mapping_filters/jump_edge_filter.h> 00076 #include <cob_3d_mapping_filters/impl/jump_edge_filter.hpp> 00077 00078 //###################### 00079 //#### nodelet class#### 00080 class JumpEdgeFilter : public nodelet::Nodelet 00081 { 00082 public: 00083 typedef pcl::PointXYZI PointT; 00084 typedef pcl::PointCloud<PointT> PointCloud; 00085 00086 // Constructor 00087 JumpEdgeFilter () 00088 { 00089 } 00090 00091 // Destructor 00092 ~ JumpEdgeFilter () 00093 { 00095 } 00096 00097 void 00098 onInit () 00099 { 00100 n_ = getPrivateNodeHandle (); 00101 00102 point_cloud_sub_ = n_.subscribe ("point_cloud_in", 1, &JumpEdgeFilter::pointCloudSubCallback, this); 00103 point_cloud_pub_ = n_.advertise<PointCloud> ("point_cloud_out", 1); 00104 00105 double angle; 00106 n_.param ("upper_angle_deg", angle, 170.0); 00107 filter_.setAngleThreshold (angle); 00108 } 00109 00110 void 00111 pointCloudSubCallback (pcl::PointCloud<pcl::PointXYZI>::ConstPtr pc) 00112 { 00113 PointCloud cloud_filtered; 00114 00115 filter_.setInputCloud (pc); 00116 filter_.filter (cloud_filtered); 00117 point_cloud_pub_.publish (cloud_filtered); 00118 } 00119 00120 protected: 00121 ros::NodeHandle n_; 00122 ros::Subscriber point_cloud_sub_; 00123 ros::Publisher point_cloud_pub_; 00124 00125 cob_3d_mapping_filters::JumpEdgeFilter<PointT> filter_; 00126 }; 00127 00128 PLUGINLIB_DECLARE_CLASS(cob_3d_mapping_filters, JumpEdgeFilter, JumpEdgeFilter, nodelet::Nodelet) 00129