Go to the documentation of this file.00001
00013 #ifndef RAIL_PICK_AND_PLACE_POINT_CLOUD_RECOGNIZER_H_
00014 #define RAIL_PICK_AND_PLACE_POINT_CLOUD_RECOGNIZER_H_
00015
00016
00017 #include "PCLGraspModel.h"
00018
00019
00020 #include <graspdb/graspdb.h>
00021 #include <sensor_msgs/PointCloud.h>
00022 #include <ros/ros.h>
00023 #include <rail_manipulation_msgs/SegmentedObject.h>
00024 #include <tf2/LinearMath/Transform.h>
00025
00026
00027 #include <pcl/point_cloud.h>
00028 #include <pcl/point_types.h>
00029
00030 namespace rail
00031 {
00032 namespace pick_and_place
00033 {
00034
00042 class PointCloudRecognizer
00043 {
00044 public:
00046 static const double ALPHA = 0.5;
00048 static const double SCORE_CONFIDENCE_THRESHOLD = 1.1;
00050 static const double OVERLAP_THRESHOLD = 0.6;
00051
00057 PointCloudRecognizer();
00058
00071 bool recognizeObject(rail_manipulation_msgs::SegmentedObject &object,
00072 const std::vector<PCLGraspModel> &candidates) const;
00073
00074 private:
00087 double scoreRegistration(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr candidate,
00088 pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr object, tf2::Transform &tf_icp) const;
00089
00100 void computeGraspList(const tf2::Transform &tf_icp, const geometry_msgs::Point ¢roid,
00101 const std::vector<graspdb::Grasp> &candidate_grasps, std::vector<graspdb::Grasp> &grasps) const;
00102 };
00103
00104 }
00105 }
00106
00107 #endif