@@ -287,31 +287,21 @@ void ComputeIK::compute() {
287287 ik_pose_msg = boost::any_cast<geometry_msgs::PoseStamped>(value);
288288 Eigen::Isometry3d ik_pose;
289289 tf2::fromMsg (ik_pose_msg.pose , ik_pose);
290- if (robot_model->hasLinkModel (ik_pose_msg.header .frame_id )) {
291- link = robot_model->getLinkModel (ik_pose_msg.header .frame_id );
292- } else {
293- const robot_state::AttachedBody* attached =
294- scene->getCurrentState ().getAttachedBody (ik_pose_msg.header .frame_id );
295- if (!attached) {
296- ROS_WARN_STREAM_NAMED (" ComputeIK" , " Unknown frame: " << ik_pose_msg.header .frame_id );
297- return ;
298- }
299- const EigenSTL::vector_Isometry3d& tf =
300- #if MOVEIT_HAS_OBJECT_POSE
301- attached->getShapePosesInLinkFrame ();
290+
291+ if (!scene->getCurrentState ().knowsFrameTransform (ik_pose_msg.header .frame_id )) {
292+ ROS_WARN_STREAM_NAMED (" ComputeIK" , " ik frame unknown in robot: '" << ik_pose_msg.header .frame_id << " '" );
293+ return ;
294+ }
295+ ik_pose = scene->getCurrentState ().getFrameTransform (ik_pose_msg.header .frame_id ) * ik_pose;
296+
297+ #if MOVEIT_HAS_STATE_RIGID_PARENT_LINK
298+ link = scene->getCurrentState ().getRigidlyConnectedParentLinkModel (ik_pose_msg.header .frame_id );
302299#else
303- attached-> getFixedTransforms ( );
300+ link = getRigidlyConnectedParentLinkModel (scene-> getCurrentState (), ik_pose_msg. header . frame_id );
304301#endif
305- if (tf.empty ()) {
306- ROS_WARN_STREAM_NAMED (" ComputeIK" , " Attached body doesn't have shapes." );
307- return ;
308- }
309- // prepend link
310- link = attached->getAttachedLink ();
311- ik_pose = tf[0 ] * ik_pose;
312- }
302+
313303 // transform target pose such that ik frame will reach there if link does
314- target_pose = target_pose * ik_pose.inverse ();
304+ target_pose = target_pose * ik_pose.inverse () * scene-> getCurrentState (). getFrameTransform (link-> getName ()) ;
315305 }
316306
317307 // validate placed link for collisions
@@ -323,7 +313,7 @@ void ComputeIK::compute() {
323313 // markers used for failures
324314 std::deque<visualization_msgs::Marker> failure_markers;
325315 // frames at target pose and ik frame
326- rviz_marker_tools::appendFrame (failure_markers, target_pose_msg, 0.1 , " ik frame" );
316+ rviz_marker_tools::appendFrame (failure_markers, target_pose_msg, 0.1 , " target frame" );
327317 rviz_marker_tools::appendFrame (failure_markers, ik_pose_msg, 0.1 , " ik frame" );
328318 // visualize placed end-effector
329319 auto appender = [&failure_markers](visualization_msgs::Marker& marker, const std::string& /* name*/ ) {
0 commit comments