@@ -251,16 +251,23 @@ void ComputeIK::compute() {
251251 const moveit::core::JointModelGroup* jmg = nullptr ;
252252 std::string msg;
253253
254+ auto report_failure = [&s, this ](const std::string& msg) {
255+ planning_scene::PlanningScenePtr scene = s.start ()->scene ()->diff ();
256+ SubTrajectory solution;
257+ solution.markAsFailure (msg);
258+ spawn (InterfaceState (scene), std::move (solution));
259+ };
260+
254261 if (!validateEEF (props, robot_model, eef_jmg, &msg)) {
255- ROS_WARN_STREAM_NAMED ( " ComputeIK " , msg);
262+ report_failure ( msg);
256263 return ;
257264 }
258265 if (!validateGroup (props, robot_model, eef_jmg, jmg, &msg)) {
259- ROS_WARN_STREAM_NAMED ( " ComputeIK " , msg);
266+ report_failure ( msg);
260267 return ;
261268 }
262269 if (!eef_jmg && !jmg) {
263- ROS_WARN_STREAM_NAMED ( " ComputeIK " , " Neither eef nor group are well defined " );
270+ report_failure (msg );
264271 return ;
265272 }
266273 properties ().property (" timeout" ).setDefaultValue (jmg->getDefaultIKTimeout ());
@@ -274,8 +281,7 @@ void ComputeIK::compute() {
274281 tf2::fromMsg (target_pose_msg.pose , target_pose);
275282 if (target_pose_msg.header .frame_id != scene->getPlanningFrame ()) {
276283 if (!scene->knowsFrameTransform (target_pose_msg.header .frame_id )) {
277- ROS_WARN_STREAM_NAMED (" ComputeIK" ,
278- " Unknown reference frame for target pose: " << target_pose_msg.header .frame_id );
284+ report_failure (fmt::format (" Unknown reference frame for target pose: '{}'" , target_pose_msg.header .frame_id ));
279285 return ;
280286 }
281287 // transform target_pose w.r.t. planning frame
@@ -290,7 +296,7 @@ void ComputeIK::compute() {
290296 // determine IK link from eef/group
291297 if (!(link = eef_jmg ? robot_model->getLinkModel (eef_jmg->getEndEffectorParentGroup ().second ) :
292298 jmg->getOnlyOneEndEffectorTip ())) {
293- ROS_WARN_STREAM_NAMED ( " ComputeIK " , " Failed to derive IK target link" );
299+ report_failure ( " Failed to derive IK target link" );
294300 return ;
295301 }
296302 ik_pose_msg.header .frame_id = link->getName ();
@@ -301,8 +307,7 @@ void ComputeIK::compute() {
301307 tf2::fromMsg (ik_pose_msg.pose , ik_pose);
302308
303309 if (!scene->getCurrentState ().knowsFrameTransform (ik_pose_msg.header .frame_id )) {
304- ROS_WARN_STREAM_NAMED (" ComputeIK" ,
305- fmt::format (" ik frame unknown in robot: '{}'" , ik_pose_msg.header .frame_id ));
310+ report_failure (fmt::format (" ik frame unknown in robot: '{}'" , ik_pose_msg.header .frame_id ));
306311 return ;
307312 }
308313 ik_pose = scene->getCurrentState ().getFrameTransform (ik_pose_msg.header .frame_id ) * ik_pose;
0 commit comments