Skip to content

Commit 39d93e1

Browse files
committed
Stage interface with GPD lib
Interface with the GPD lib using action client. Pro-type of the stage is working with the panda arm demo.
1 parent 057d7cd commit 39d93e1

File tree

2 files changed

+45
-37
lines changed

2 files changed

+45
-37
lines changed

core/include/moveit/task_constructor/stages/deep_grasp_generator.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,13 @@
4848
class DeepGraspPose : public GeneratePose
4949
{
5050
public:
51-
DeepGraspPose(ros::NodeHandle& nh, const std::string& name = "generate grasp pose");
51+
DeepGraspPose(const std::string& name = "generate grasp pose");
5252

5353
void init(const core::RobotModelConstPtr& robot_model) override;
5454
void compute() override;
5555

5656
void setEndEffector(const std::string& eef) { setProperty("eef", eef); }
5757
void setObject(const std::string& object) { setProperty("object", object); }
58-
void setAngleDelta(double delta) { setProperty("angle_delta", delta); }
5958

6059
void setPreGraspPose(const std::string& pregrasp) { properties().set("pregrasp", pregrasp); }
6160
void setPreGraspPose(const moveit_msgs::RobotState& pregrasp) { properties().set("pregrasp", pregrasp); }

core/src/stages/deep_grasp_generator.cpp

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
namespace task_constructor {
4949
namespace stages {
5050

51-
DeepGraspPose::DeepGraspPose(ros::NodeHandle& nh, const std::string& name)
51+
DeepGraspPose::DeepGraspPose(const std::string& name)
5252
: GeneratePose(name),
53-
client_(nh, "sample_grasps", true) {
53+
client_("sample_grasps", true) {
5454
auto& p = properties();
5555
p.declare<std::string>("eef", "name of end-effector");
5656
p.declare<std::string>("object");
@@ -119,35 +119,36 @@
119119
return;
120120
}
121121

122-
geometry_msgs::PoseStamped target_pose_msg;
122+
// sampled grasps
123+
std::vector<geometry_msgs::PoseStamped> grasp_candidates;
124+
// the cost of each grasp
125+
std::vector<double> scores;
126+
127+
// TODO(bostoncleek): add timeout to connection ?
128+
ROS_INFO("Waiting for grasp detection action server to start...");
129+
client_.waitForServer();
130+
131+
// test server connection
132+
if(!client_.isServerConnected())
133+
{
134+
ROS_ERROR("Grasp detection action server not connected!");
135+
}
123136

124137
moveit_task_constructor_msgs::GenerateDeepGraspPoseGoal goal;
125138
goal.action_name = "generate_grasps";
126139
client_.sendGoal(goal);
127140

128-
ROS_WARN("!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
129-
std::cout << client_.isServerConnected() << std::endl;
130-
131-
client_.waitForResult(ros::Duration(5.0));
141+
// get result within timeout
142+
// TODO(bostoncleek): select timeout
143+
client_.waitForResult();
132144
if (client_.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
133145
{
134-
printf("Done!");
135-
136-
moveit_task_constructor_msgs::GenerateDeepGraspPoseResultConstPtr grasp_result_ptr;
137-
grasp_result_ptr = client_.getResult();
138-
139-
target_pose_msg = grasp_result_ptr->grasp_candidate;
140-
146+
grasp_candidates = client_.getResult()->grasp_candidates;
147+
scores = client_.getResult()->scores;
141148
}
142-
printf("Current State: %s\n", client_.getState().toString().c_str());
143149

144-
ROS_WARN("!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
145-
std::cout << target_pose_msg << std::endl;
146-
147-
// target_pose_msg.header.frame_id = "panda_link0";
148-
// target_pose_msg.pose.position.x = 0.5;
149-
// target_pose_msg.pose.position.y = -0.25;
150-
// target_pose_msg.pose.position.z = 0.20;
150+
ROS_INFO("Grasp Generator State: %s", client_.getState().toString().c_str());
151+
ROS_WARN("Number of grasp candidates: %lu", grasp_candidates.size());
151152

152153

153154
planning_scene::PlanningScenePtr scene = upstream_solutions_.pop()->end()->scene()->diff();
@@ -160,19 +161,27 @@
160161
robot_state::RobotState& robot_state = scene->getCurrentStateNonConst();
161162
robot_state.setToDefaultValues(jmg, props.get<std::string>("pregrasp"));
162163

163-
164-
InterfaceState state(scene);
165-
state.properties().set("target_pose", target_pose_msg);
166-
props.exposeTo(state.properties(), { "pregrasp", "grasp" });
167-
168-
SubTrajectory trajectory;
169-
trajectory.setCost(0.0);
170-
trajectory.setComment(std::to_string(0.0));
171-
172-
// add frame at target pose
173-
rviz_marker_tools::appendFrame(trajectory.markers(), target_pose_msg, 0.1, "grasp frame");
174-
175-
spawn(std::move(state), std::move(trajectory));
164+
for(unsigned int i = 0; i < grasp_candidates.size(); i++)
165+
{
166+
// Do not use grasps with score < 0
167+
// Grasp is selected based on cost not score
168+
// Invert score to represent grasp with lowest cost
169+
if (scores.at(i) > 0.0)
170+
{
171+
InterfaceState state(scene);
172+
state.properties().set("target_pose", grasp_candidates.at(i));
173+
props.exposeTo(state.properties(), { "pregrasp", "grasp" });
174+
175+
SubTrajectory trajectory;
176+
trajectory.setCost(static_cast<double>(1.0 / scores.at(i)));
177+
trajectory.setComment(std::to_string(i));
178+
179+
// add frame at target pose
180+
rviz_marker_tools::appendFrame(trajectory.markers(), grasp_candidates.at(i), 0.1, "grasp frame");
181+
182+
spawn(std::move(state), std::move(trajectory));
183+
}
184+
}
176185
}
177186
} // namespace stages
178187
} // namespace task_constructor

0 commit comments

Comments
 (0)