@@ -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