-
Notifications
You must be signed in to change notification settings - Fork 71
/
Copy pathgrasp_detection_server.h
106 lines (86 loc) · 3.37 KB
/
grasp_detection_server.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
* Software License Agreement (BSD License)
*
* Copyright (c) 2018, Andreas ten Pas
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GRASP_DETECTION_SERVER_H_
#define GRASP_DETECTION_SERVER_H_
// ROS
#include <eigen_conversions/eigen_msg.h>
#include <pcl_conversions/pcl_conversions.h>
#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include <visualization_msgs/MarkerArray.h>
// GPD
#include <gpd/util/cloud.h>
#include <gpd/grasp_detector.h>
// this project (services)
#include <gpd_ros/detect_grasps.h>
// this project (messages)
#include <gpd_ros/GraspConfig.h>
#include <gpd_ros/GraspConfigList.h>
// this project (headers)
#include <gpd_ros/grasp_messages.h>
#include <gpd_ros/grasp_plotter.h>
typedef pcl::PointCloud<pcl::PointXYZRGBA> PointCloudRGBA;
typedef pcl::PointCloud<pcl::PointNormal> PointCloudPointNormal;
class GraspDetectionServer
{
public:
/**
* \brief Constructor.
* \param node the ROS node
*/
GraspDetectionServer(ros::NodeHandle& node);
/**
* \brief Destructor.
*/
~GraspDetectionServer()
{
delete cloud_camera_;
delete grasp_detector_;
delete rviz_plotter_;
}
/**
* \brief Service callback for detecting grasps.
* \param req the service request
* \param res the service response
*/
bool detectGrasps(gpd_ros::detect_grasps::Request& req, gpd_ros::detect_grasps::Response& res);
private:
ros::Publisher grasps_pub_; ///< ROS publisher for grasp list messages
std_msgs::Header cloud_camera_header_; ///< stores header of the point cloud
std::string frame_; ///< point cloud frame
gpd::GraspDetector* grasp_detector_; ///< used to run the grasp pose detection
gpd::util::Cloud* cloud_camera_; ///< stores point cloud with (optional) camera information and surface normals
GraspPlotter* rviz_plotter_; ///< used to plot detected grasps in rviz
bool use_rviz_; ///< if rviz is used for visualization instead of PCL
std::vector<double> workspace_; ///< workspace limits
Eigen::Vector3d view_point_; ///< (input) view point of the camera onto the point cloud
};
#endif /* GRASP_DETECTION_SERVER_H_ */