Go to the documentation of this file.00001
00066
00067
00068
00069
00070
00071 #include <sstream>
00072 #include <fstream>
00073
00074
00075
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
00093 class FilterNode
00094 {
00095 typedef pcl::PointXYZRGB Point;
00096
00097 public:
00098
00099 FilterNode()
00100 {
00101 onInit();
00102 }
00103
00104
00105
00106 ~FilterNode()
00107 {
00108 }
00109
00117 void
00118 onInit()
00119 {
00120
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