Skip to content

Commit 990ec26

Browse files
committed
Make pregrasp pose optional in GenerateGraspPose
1 parent b4fb8bb commit 990ec26

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

core/src/stages/generate_grasp_pose.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ GenerateGraspPose::GenerateGraspPose(const std::string& name) : GeneratePose(nam
5454
p.declare<std::string>("object");
5555
p.declare<double>("angle_delta", 0.1, "angular steps (rad)");
5656

57-
p.declare<boost::any>("pregrasp", "pregrasp posture");
57+
p.declare<boost::any>("pregrasp", std::string(""), "pregrasp posture");
5858
p.declare<boost::any>("grasp", "grasp posture");
5959
}
6060

@@ -79,12 +79,15 @@ void GenerateGraspPose::init(const core::RobotModelConstPtr& robot_model) {
7979
if (!robot_model->hasEndEffector(eef))
8080
errors.push_back(*this, "unknown end effector: " + eef);
8181
else {
82-
// check availability of eef pose
83-
const moveit::core::JointModelGroup* jmg = robot_model->getEndEffector(eef);
84-
const std::string& name = props.get<std::string>("pregrasp");
85-
std::map<std::string, double> m;
86-
if (!jmg->getVariableDefaultPositions(name, m))
87-
errors.push_back(*this, "unknown end effector pose: " + name);
82+
// if pregrasp pose is defined, check if it's valid
83+
const std::string& pregrasp_name = props.get<std::string>("pregrasp");
84+
if (!pregrasp_name.empty()) {
85+
// check availability of eef pose
86+
std::map<std::string, double> m;
87+
const moveit::core::JointModelGroup* jmg = robot_model->getEndEffector(eef);
88+
if (!jmg->getVariableDefaultPositions(pregrasp_name, m))
89+
errors.push_back(*this, "unknown end effector pose: " + pregrasp_name);
90+
}
8891
}
8992

9093
if (errors)
@@ -122,8 +125,11 @@ void GenerateGraspPose::compute() {
122125
const std::string& eef = props.get<std::string>("eef");
123126
const moveit::core::JointModelGroup* jmg = scene->getRobotModel()->getEndEffector(eef);
124127

125-
robot_state::RobotState& robot_state = scene->getCurrentStateNonConst();
126-
robot_state.setToDefaultValues(jmg, props.get<std::string>("pregrasp"));
128+
// Apply pregrasp pose if defined
129+
if (!props.get<std::string>("pregrasp").empty()) {
130+
robot_state::RobotState& robot_state = scene->getCurrentStateNonConst();
131+
robot_state.setToDefaultValues(jmg, props.get<std::string>("pregrasp"));
132+
}
127133

128134
geometry_msgs::PoseStamped target_pose_msg;
129135
target_pose_msg.header.frame_id = props.get<std::string>("object");

0 commit comments

Comments
 (0)