1 #ifndef _RAPID_PERCEPTION_POSE_ESTIMATION_H_
2 #define _RAPID_PERCEPTION_POSE_ESTIMATION_H_
6 #include "boost/thread/mutex.hpp"
8 #include "Eigen/Geometry"
9 #include "geometry_msgs/Pose.h"
10 #include "pcl/point_cloud.h"
11 #include "pcl/point_types.h"
13 #include "visualization_msgs/Marker.h"
15 #include "rapid_msgs/Roi3D.h"
21 namespace perception {
61 void set_scene(pcl::PointCloud<pcl::PointXYZRGB>::Ptr scene);
76 void set_object(
const pcl::PointCloud<pcl::PointXYZRGB>::Ptr&
object);
77 void set_roi(
const rapid_msgs::Roi3D& roi);
124 void Find(std::vector<PoseEstimationMatch>* matches);
128 void ComputeCandidates(Eigen::VectorXd& importances,
129 pcl::PointCloud<pcl::PointXYZRGB>::Ptr heatmap,
130 pcl::PointCloud<pcl::PointXYZRGB>::Ptr candidate);
132 void ComputeTopCandidates(Eigen::VectorXd& importances,
133 pcl::PointCloud<pcl::PointXYZRGB>::Ptr heatmap,
134 pcl::PointCloud<pcl::PointXYZRGB>::Ptr candidate);
136 void RunIcpCandidates(pcl::PointCloud<pcl::PointXYZRGB>::Ptr candidates,
137 std::vector<PoseEstimationMatch>* aligned_objects);
138 void RunIcpCandidateInThread(
139 pcl::PointCloud<pcl::PointXYZRGB>::Ptr candidates,
size_t candidate_index,
140 int max_iterations, boost::mutex& output_mutex,
141 std::vector<PoseEstimationMatch>* aligned_objects);
143 void NonMaxSuppression(std::vector<PoseEstimationMatch>& aligned_objects,
144 std::vector<int>* deduped_indices);
146 void FilterMatches(
const std::vector<PoseEstimationMatch>& aligned_objects,
147 const std::vector<int>& deduped_indices,
148 std::vector<int>* output_indices);
149 void GenerateRotations(std::vector<Eigen::Quaternionf>* rotations);
154 pcl::PointCloud<pcl::PointXYZRGB>::Ptr scene_;
155 pcl::PointCloud<pcl::PointXYZRGB>::Ptr object_;
156 Eigen::Vector3f object_center_;
157 Eigen::Vector3f object_dims_;
158 rapid_msgs::Roi3D object_roi_;
165 double fitness_threshold_;
169 double sigma_threshold_;
178 ros::Publisher scene_pub_;
179 ros::Publisher object_pub_;
180 ros::Publisher candidates_pub_;
181 ros::Publisher alignment_pub_;
182 ros::Publisher output_pub_;
183 ros::Publisher marker_pub_;
188 #endif // _RAPID_PERCEPTION_POSE_ESTIMATION_H_
void set_roi(const rapid_msgs::Roi3D &roi)
void set_marker_publisher(const ros::Publisher &pub)
void set_object(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &object)
void set_output_publisher(const ros::Publisher &pub)
void set_min_results(int val)
void set_scene_publisher(const ros::Publisher &pub)
void set_sigma_threshold(double val)
PoseEstimationHeatMapper * heat_mapper()
void set_scene(pcl::PointCloud< pcl::PointXYZRGB >::Ptr scene)
void set_fitness_threshold(double val)
PoseEstimator(PoseEstimationHeatMapper *heat_mapper)
void set_num_candidates(int val)
void set_candidates_publisher(const ros::Publisher &pub)
void set_nms_radius(double val)
void set_alignment_publisher(const ros::Publisher &pub)
void Find(std::vector< PoseEstimationMatch > *matches)
void set_object_publisher(const ros::Publisher &pub)