filter.cpp
Go to the documentation of this file.
00001 
00066 //##################
00067 //#### includes ####
00068 
00069 // standard includes
00070 //--
00071 #include <sstream>
00072 #include <fstream>
00073 
00074 
00075 // ROS includes
00076 #include <ros/ros.h>
00077 #include <pcl/point_types.h>
00078 #include <pcl_ros/transforms.h>
00079 #include <pcl_ros/point_cloud.h>
00080 #include <tf/transform_listener.h>
00081 #include <tf_conversions/tf_kdl.h>
00082 #include <pcl/io/pcd_io.h>
00083 #include "cob_3d_registration/RegistrationPCD.h"
00084 #include "cob_3d_registration/preprocessing/kinect_error.h"
00085 
00086 #include <cob_3d_registration/registration_icp.h>
00087 
00088 
00089 using namespace tf;
00090 
00091 //####################
00092 //#### node class ####
00093 class FilterNode
00094 {
00095   typedef pcl::PointXYZRGB Point;
00096 
00097 public:
00098   // Constructor
00099   FilterNode()
00100     {
00101     onInit();
00102     }
00103 
00104 
00105   // Destructor
00106   ~FilterNode()
00107   {
00108   }
00109 
00117   void
00118   onInit()
00119   {
00120     //n_.param("aggregate_point_map/icp_max_iterations" ,icp_max_iterations ,50);
00121 
00122     point_cloud_pub_ = n_.advertise<pcl::PointCloud<Point> >("result_pc",1);
00123     point_cloud_sub_ = n_.subscribe("point_cloud2", 1, &FilterNode::pointCloudSubCallback, this);
00124 
00125     filter_ser_ = n_.advertiseService("filter_process", &FilterNode::filterService, this);
00126   }
00127 
00138   void
00139   pointCloudSubCallback(const pcl::PointCloud<Point>::Ptr& pc_in)
00140   {
00141     ROS_INFO("filter");
00142 
00143     pcl::PointCloud<Point> pc;
00144     preprocessing::KinectErrorGenerator<Point> filter;
00145 
00146     filter.setInputCloud(pc_in);
00147     filter.filter(pc);
00148 
00149     pc.header.frame_id="/head_cam3d_frame";
00150     point_cloud_pub_.publish(pc);
00151   }
00152 
00153   bool filterService(cob_3d_registration::RegistrationPCD::Request  &req,
00154                      cob_3d_registration::RegistrationPCD::Response &res )
00155   {
00156     ROS_INFO("filter...");
00157 
00158     pcl::PointCloud<Point> pc;
00159     pcl::io::loadPCDFile(req.pcd_fn, pc);
00160 
00161     preprocessing::KinectErrorGenerator<Point> filter;
00162     filter.setInputCloud(pc.makeShared());
00163     filter.filter(pc);
00164 
00165     pcl::io::savePCDFileASCII(req.img_fn, pc);
00166 
00167     return true;
00168   }
00169 
00170 
00171   ros::NodeHandle n_;
00172   ros::Time stamp_;
00173 
00174 
00175 protected:
00176 
00177   ros::Subscriber point_cloud_sub_;
00178   ros::Publisher point_cloud_pub_;
00179   ros::ServiceServer filter_ser_;
00180 
00181 };
00182 
00183 
00184 int main(int argc, char **argv) {
00185   setVerbosityLevel(pcl::console::L_DEBUG);
00186 
00187   ros::init(argc, argv, "filter");
00188 
00189   FilterNode tn;
00190 
00191   ROS_INFO("Spinning node");
00192   ros::spin();
00193   return 0;
00194 }
00195 
00196 


cob_3d_registration
Author(s): Joshua Hampp
autogenerated on Wed Aug 26 2015 11:02:36