void PoseEstimation6D::kinectCloudCallback(const sensor_msgs::PointCloud2 &cloud){ std::cout << "Estimating Pose 6D :) :)"<< std::endl; pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_xyz_rgb_ptr(new pcl::PointCloud<pcl::PointXYZRGB>()); BRICS_3D::ColoredPointCloud3D *in_cloud = new BRICS_3D::ColoredPointCloud3D(); BRICS_3D::PointCloud3D *color_based_roi = new BRICS_3D::ColoredPointCloud3D(); std::vector<BRICS_3D::PointCloud3D*> extracted_clusters; //Transform sensor_msgs::PointCloud2 msg to pcl::PointCloud pcl::fromROSMsg (cloud, *cloud_xyz_rgb_ptr); // cast PCL to BRICS_3D type pclTypecaster.convertToBRICS3DDataType(cloud_xyz_rgb_ptr, in_cloud); ROS_INFO("Size of input cloud: %d ", in_cloud->getSize()); if(in_cloud->getSize() < euclideanClusterExtractor.getMinClusterSize()) return; /**==================================================================================================== [color based roi extraction]**/ //perform HSV color based extraction hsvBasedRoiExtractor.extractColorBasedROI(in_cloud, color_based_roi); ROS_INFO("[%s] Size of extracted cloud : %d ", regionLabel.c_str(),color_based_roi->getSize()); if(color_based_roi->getSize() < euclideanClusterExtractor.getMinClusterSize()) return; /**==================================================================================================== [cluster extraction]**/ //extract the clusters euclideanClusterExtractor.extractClusters(color_based_roi, &extracted_clusters); ROS_INFO("[%s] No of clusters found: %d", regionLabel.c_str(), extracted_clusters.size()); /**==================================================================================================== [6D pose estimation]**/ //Estimate 6D Pose int regions; if(extracted_clusters.size() < abs(maxNoOfObjects)) { regions = extracted_clusters.size(); } else { regions = maxNoOfObjects; } for (int i = 0; i < regions; i++){ if(extracted_clusters[i]->getSize() > 0){ //Estimate Pose estimatePose(extracted_clusters[i],i+1); } } delete in_cloud; delete color_based_roi; extracted_clusters.clear(); }
void ColorBasedRoiExtractor::kinectCloudCallback(const sensor_msgs::PointCloud2 &cloud){ // ROS_INFO("\ntransferred kinect_raw message successfully...... :)"); pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_xyz_rgb_ptr(new pcl::PointCloud<pcl::PointXYZRGB>()); pcl::PointCloud<pcl::PointXYZRGB>::Ptr hsv_extracted_roi_ptr(new pcl::PointCloud<pcl::PointXYZRGB>()); brics_3d::PointCloud3D *in_cloud = new brics_3d::PointCloud3D(); brics_3d::PointCloud3D *extracted_cloud = new brics_3d::PointCloud3D(); //Transform sensor_msgs::PointCloud2 msg to pcl::PointCloud pcl::fromROSMsg (cloud, *cloud_xyz_rgb_ptr); // cast PCL to brics_3d type pclTypeCaster.convertToBRICS3DDataType(cloud_xyz_rgb_ptr, in_cloud); ROS_INFO("Size of input cloud: %d ", in_cloud->getSize()); //perform HSV color based extraction hsvBasedRoiExtractor.filter(in_cloud, extracted_cloud); ROS_INFO("Size of extracted cloud : %d ", extracted_cloud->getSize()); //convert back to PCl format for publishing //pclTypeCaster.convertToPCLDataType(hsv_extracted_roi_ptr, &extracted_cloud); pclTypeCaster.convertToPCLDataType(hsv_extracted_roi_ptr, extracted_cloud); //setup frame_id of extracted cloud for publishing hsv_extracted_roi_ptr->header.frame_id = "/openni_rgb_optical_frame"; //publish extracted region extractedRegionPublisher->publish(*hsv_extracted_roi_ptr); delete in_cloud; delete extracted_cloud; }