00001 #ifndef _HEIGHT_FROM_PLANE_MAP_H_ 00002 #define _HEIGHT_FROM_PLANE_MAP_H_ 00003 00004 // [Eigen] 00005 #include "Eigen/Core" 00006 00007 // [ROS] 00008 #include "ros/ros.h" 00009 #include "ros/callback_queue.h" 00010 #include "ros/this_node.h" 00011 00012 // [PCL_ROS] 00013 #include <pcl/ros/conversions.h> 00014 #include <pcl/point_cloud.h> 00015 #include <pcl/point_types.h> 00016 #include <pcl/ModelCoefficients.h> 00017 00018 //pcl::toROSMsg 00019 #include <pcl/io/pcd_io.h> 00020 00021 //iriutils 00022 #include "mutex.h" 00023 00024 // [OpenCV] 00025 // [publisher subscriber headers] 00026 #include <message_filters/subscriber.h> 00027 #include <message_filters/time_synchronizer.h> 00028 #include "sensor_msgs/PointCloud2.h" 00029 00030 // [services] 00031 #include <dynamic_reconfigure/server.h> 00032 #include <iri_pcl_filters/IriPclFiltersParametersConfig.h> 00033 00034 // static const char WINDOW[] = "Image window"; 00035 00036 typedef union { 00037 struct /*anonymous*/ 00038 { 00039 unsigned char Blue; 00040 unsigned char Green; 00041 unsigned char Red; 00042 unsigned char Alpha; 00043 }; 00044 float float_value; 00045 long long_value; 00046 } RGBValue; 00047 00048 class HeightFromPlaneMap { 00049 public: 00050 HeightFromPlaneMap(); 00051 00052 private: 00053 00054 CMutex mutex; 00055 00056 ros::NodeHandle nh_; 00057 00058 pcl::PointCloud<pcl::PointXYZRGB> pcl_xyzrgb_; 00059 00060 message_filters::TimeSynchronizer<pcl::ModelCoefficients, sensor_msgs::PointCloud2> *sync_; 00061 // [Subscribers] 00062 message_filters::Subscriber<pcl::ModelCoefficients> coefficients_sub_; 00063 message_filters::Subscriber<sensor_msgs::PointCloud2> pcl2_sub_; 00064 00065 // [Publishers] 00066 ros::Publisher pcl2_pub_; 00067 sensor_msgs::PointCloud2 pcl2_score_map_msg_; 00068 00069 dynamic_reconfigure::Server<iri_pcl_filters::IriPclFiltersParametersConfig> dyn_reconfig_srv; 00070 00071 void reconfigureCallback(iri_pcl_filters::IriPclFiltersParametersConfig &config, uint32_t level); 00072 00073 void height_map_callback(const pcl::ModelCoefficients::ConstPtr& coefficients_msg, const sensor_msgs::PointCloud2::ConstPtr& pcl2_msg); 00074 00075 float distance_from_plane(double x, double y, double z, std::vector<float> coefs); 00076 00077 }; 00078 #endif