Go to the documentation of this file.00001
00008 #include <stdio.h>
00009 #include <ros/ros.h>
00010 #include <visualization_msgs/Marker.h>
00011 #include <sensor_msgs/LaserScan.h>
00012 #include <sensor_msgs/PointCloud2.h>
00013 #include <tf/transform_listener.h>
00014 #include <pcl_ros/transforms.h>
00015 #include <pcl/ros/conversions.h>
00016 #include <pcl/point_cloud.h>
00017 #include <pcl/point_types.h>
00018 #include <pcl/segmentation/extract_polygonal_prism_data.h>
00019 #include <pcl/filters/extract_indices.h>
00020 #include <pcl/filters/project_inliers.h>
00021 #include <pcl/filters/voxel_grid.h>
00022 #include <points_from_volume/points_from_volume.h>
00023 #define PFLN printf("FILE %s LINE %d\n",__FILE__, __LINE__);
00024
00025
00026 using namespace std;
00027
00028
00029 ros::Publisher cloud_pub;
00030 ros::NodeHandle* p_n;
00031
00038 void conversion (const sensor_msgs::PointCloud2ConstPtr & pcmsg_in)
00039 {
00040 pcl::PointCloud<pcl::PointXYZ> pc_cut;
00041 pcl::PointCloud<pcl::PointXYZ> processed_pc;
00042 sensor_msgs::PointCloud2 pcmsg_out;
00043
00044 pcl::fromROSMsg(*pcmsg_in,pc_cut);
00045 pc_cut.header.frame_id=pcmsg_in->header.frame_id;
00046
00047 for (int i=0;i<(int)pc_cut.points.size();i++)
00048 {
00049 if (pc_cut.points[i].z>0.75 && pc_cut.points[i].z<1.5)
00050 {
00051 processed_pc.push_back(pc_cut.points[i]);
00052 }
00053 }
00054 processed_pc.header.frame_id=pc_cut.header.frame_id;
00055 pcl::toROSMsg(processed_pc,pcmsg_out);
00056
00057 pcmsg_out.header.stamp=pcmsg_in->header.stamp;
00058 cloud_pub.publish(pcmsg_out);
00059 }
00060
00061
00062
00069 int main(int argc, char **argv)
00070 {
00071 ros::init(argc, argv, "kinect_freq_mod");
00072 ros::NodeHandle n;
00073 ros::Rate loop_rate(10);
00074 p_n=&n;
00075
00076
00077 ros::Subscriber sub = n.subscribe ("/point_cloud_from_kinect", 1, conversion);
00078
00079
00080 cloud_pub = n.advertise<sensor_msgs::PointCloud2>("/point_cloud_input", 1);
00081
00082 while(ros::ok())
00083 {
00084 ros::spinOnce();
00085 loop_rate.sleep();
00086 }
00087 return 0;
00088 }