Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef JSK_PCL_ROS_UTILS_PLANE_CONCATENATOR_H_
00038 #define JSK_PCL_ROS_UTILS_PLANE_CONCATENATOR_H_
00039
00040 #include <jsk_recognition_msgs/PolygonArray.h>
00041 #include <jsk_recognition_msgs/ModelCoefficientsArray.h>
00042 #include <jsk_recognition_msgs/ClusterPointIndices.h>
00043
00044 #include <jsk_pcl_ros_utils/PlaneConcatenatorConfig.h>
00045 #include <dynamic_reconfigure/server.h>
00046 #include <jsk_topic_tools/diagnostic_nodelet.h>
00047 #include <message_filters/subscriber.h>
00048 #include <message_filters/time_synchronizer.h>
00049 #include <message_filters/synchronizer.h>
00050
00051 #include "jsk_recognition_utils/geo_util.h"
00052
00053 namespace jsk_pcl_ros_utils
00054 {
00055 class PlaneConcatenator: public jsk_topic_tools::DiagnosticNodelet
00056 {
00057 public:
00058 typedef boost::shared_ptr<PlaneConcatenator> Ptr;
00059 typedef PlaneConcatenatorConfig Config;
00060 typedef pcl::PointXYZRGB PointT;
00061 typedef message_filters::sync_policies::ExactTime<
00062 sensor_msgs::PointCloud2,
00063 jsk_recognition_msgs::ClusterPointIndices,
00064 jsk_recognition_msgs::PolygonArray,
00065 jsk_recognition_msgs::ModelCoefficientsArray
00066 > SyncPolicy;
00067 PlaneConcatenator(): DiagnosticNodelet("PlaneConcatenator") {}
00068
00069 protected:
00071
00073 virtual void onInit();
00074 virtual void subscribe();
00075 virtual void unsubscribe();
00076 virtual void concatenate(
00077 const sensor_msgs::PointCloud2::ConstPtr& cloud_msg,
00078 const jsk_recognition_msgs::ClusterPointIndices::ConstPtr& indices_msg,
00079 const jsk_recognition_msgs::PolygonArray::ConstPtr& polygon_array_msg,
00080 const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr& coefficients_array_msg);
00081 virtual void configCallback(Config &config, uint32_t level);
00082 virtual bool isNearPointCloud(
00083 pcl::KdTreeFLANN<PointT>& kdtree,
00084 pcl::PointCloud<PointT>::Ptr cloud,
00085 jsk_recognition_utils::Plane::Ptr target_plane);
00086 virtual pcl::ModelCoefficients::Ptr refinement(
00087 pcl::PointCloud<PointT>::Ptr cloud,
00088 pcl::PointIndices::Ptr indices,
00089 pcl::ModelCoefficients::Ptr original_coefficients);
00091
00093 message_filters::Subscriber<sensor_msgs::PointCloud2> sub_cloud_;
00094 message_filters::Subscriber<jsk_recognition_msgs::ClusterPointIndices> sub_indices_;
00095 message_filters::Subscriber<jsk_recognition_msgs::PolygonArray> sub_polygon_;
00096 message_filters::Subscriber<jsk_recognition_msgs::ModelCoefficientsArray> sub_coefficients_;
00097 boost::shared_ptr<message_filters::Synchronizer<SyncPolicy> >sync_;
00098 boost::mutex mutex_;
00099 boost::shared_ptr <dynamic_reconfigure::Server<Config> > srv_;
00100 ros::Publisher pub_indices_;
00101 ros::Publisher pub_polygon_;
00102 ros::Publisher pub_coefficients_;
00104
00106 double connect_angular_threshold_;
00107 double connect_distance_threshold_;
00108 double connect_perpendicular_distance_threshold_;
00109 int ransac_refinement_max_iteration_;
00110 double ransac_refinement_outlier_threshold_;
00111 double ransac_refinement_eps_distance_;
00112 double ransac_refinement_eps_angle_;
00113 int min_size_;
00114 double min_area_;
00115 double max_area_;
00116 private:
00117
00118 };
00119 }
00120 #endif