distance_filter.cpp
Go to the documentation of this file.
00001 #include <pluginlib/class_list_macros.h>
00002 #include <ros/ros.h>
00003 #include <sensor_msgs/PointCloud2.h>
00004 #include <pcl_ros/publisher.h>
00005 #include <pcl_ros/pcl_nodelet.h>
00006 #include <vector>
00007 #include <nodelet/nodelet.h>
00008 #include <math.h>
00009 #include "pcl/io/pcd_io.h"
00010 namespace distance_filter
00011 {
00012 class DistanceFilter : public pcl_ros::PCLNodelet
00013 {
00014 public:
00015         void onInit ();
00016 protected:
00017         using pcl_ros::PCLNodelet::pnh_;
00018     std::string input_cloud_topic_;
00019     std::string output_cloud_topic_;
00020     ros::Subscriber cloud_sub_;
00021     ros::Publisher cloud_pub_;
00022     std::string laser_frame_;
00023     //float_t threshold_;
00024     float threshold_;
00025     int cp;
00026     void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& pointcloud2_msg);
00027 public:
00028         DistanceFilter();
00029 
00030         ~DistanceFilter();
00031 
00032 };
00033 DistanceFilter::DistanceFilter()
00034 {
00035 
00036 }
00037 DistanceFilter::~DistanceFilter()
00038 {
00039         ROS_INFO("Shutting down DistanceFilter");
00040         //cloud_pub_.shutdown();
00041 }
00042 void DistanceFilter::onInit()
00043 {
00044         threshold_=6.0;
00045         cp=0;
00046         pcl_ros::PCLNodelet::onInit ();
00047         pnh_->param("input_cloud_topic", input_cloud_topic_, std::string("/nbv_cloud"));
00048         pnh_->param("output_cloud_topic", output_cloud_topic_, std::string("/output_nbv_cloud"));
00049         pnh_->param("laser_frame", laser_frame_, std::string("/laser_tilt_link"));
00050         //pnh_->param("threshold", threshold_, 5.0);
00051         cloud_sub_=pnh_->subscribe(input_cloud_topic_,1, &DistanceFilter::cloud_cb, this);
00052         cloud_pub_=pnh_->advertise<sensor_msgs::PointCloud2>(output_cloud_topic_,1);
00053 }
00054 void DistanceFilter::cloud_cb(const sensor_msgs::PointCloud2ConstPtr& pointcloud2_msg)
00055 {
00056         ros::Time start_time = ros::Time::now();
00057         pcl::PointCloud<pcl::PointXYZ> input_pointcloud,output_point_cloud;
00058         pcl::fromROSMsg(*pointcloud2_msg, input_pointcloud);
00059         ROS_INFO("number of points in pointcloud is: %d ",input_pointcloud.points.size());
00060         output_point_cloud.points.resize(input_pointcloud.points.size());
00061         output_point_cloud.header=input_pointcloud.header;
00062         geometry_msgs::Point viewpoint;
00063         viewpoint.x=0.0;
00064         viewpoint.y=0.0;
00065         viewpoint.z=0.0;
00066         for (unsigned int i=0;i<input_pointcloud.points.size();i++)
00067         {
00068                 float d=sqrt(pow(viewpoint.x-input_pointcloud.points[i].x,2)+pow(viewpoint.y-input_pointcloud.points[i].y,2)+pow(viewpoint.z-input_pointcloud.points[i].z,2));
00069                 if (d<threshold_)
00070                 {
00071                         output_point_cloud.points[cp].x=input_pointcloud.points[i].x;
00072                         output_point_cloud.points[cp].y=input_pointcloud.points[i].y;
00073                         output_point_cloud.points[cp].z=input_pointcloud.points[i].z;
00074                         cp++;
00075 
00076                 }
00077         }
00078         output_point_cloud.points.resize(cp);
00079         //pcl::io::savePCDFileASCII ("/home/ghitzarus/Desktop/aggredated_point_cloud.pcd", output_point_cloud);
00080         cloud_pub_.publish(output_point_cloud);
00081         ROS_INFO("Number of filtered pointcloud is: %d ",output_point_cloud.points.size());
00082         /*for (unsigned int i=0;i<output_point_cloud.points.size();i++)
00083         {
00084                 ROS_INFO("the points from the pointcloud %f, %f, %f",output_point_cloud.points[i].x,output_point_cloud.points[i].y,output_point_cloud.points[i].z);
00085         }*/
00086 }
00087 
00088 }
00089 PLUGINLIB_DECLARE_CLASS(autonomous_mapping, DistanceFilter, distance_filter::DistanceFilter, nodelet::Nodelet);
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends


autonomous_mapping
Author(s): Gheorghe Rus
autogenerated on Sun Oct 6 2013 12:04:23