error code -21 while calling the ik request.

533 views
Skip to first unread message

Karthikeyan Yuvraj

unread,
Jun 29, 2013, 7:21:53 PM6/29/13
to moveit...@googlegroups.com, Christopher Korpela
Hello,
I was working on this tutorial http://moveit.ros.org/wiki/Kinematics/ROS_API. Bu the robot does not move for any position given. Here is my code:
#include <ros/ros.h>

// MoveIt!
#include <moveit/robot_model_loader/robot_model_loader.h>
#include <moveit/robot_model/robot_model.h>
#include <moveit/robot_state/robot_state.h>
#include <moveit/robot_state/joint_state_group.h>

// Robot state publishing
#include <moveit/robot_state/conversions.h>
#include <moveit_msgs/DisplayRobotState.h>

// Kinematics
#include <moveit_msgs/GetPositionIK.h>
  
int main(int argc, char **argv)
{
  ros::init (argc, argv, "right_arm_kinematics");
  ros::AsyncSpinner spinner(1);
  spinner.start();
  
  ros::NodeHandle node_handle;  

  // Start a service client
  ros::ServiceClient service_client = node_handle.serviceClient<moveit_msgs::GetPositionIK> ("compute_ik");
  ros::Publisher robot_state_publisher = node_handle.advertise<moveit_msgs::DisplayRobotState>( "tutorial_robot_state", 1 );


robot_model_loader::RobotModelLoader robot_model_loader("robot_description"); 
  robot_model::RobotModelPtr kinematic_model = robot_model_loader.getModel();
  robot_state::RobotStatePtr kinematic_state(new robot_state::RobotState(kinematic_model));
  robot_state::JointStateGroup* joint_state_group = kinematic_state->getJointStateGroup("manipulator");

  while(!service_client.exists())
  {
    ROS_INFO("Waiting for service");
    sleep(1.0);
  }

  moveit_msgs::GetPositionIK::Request service_request;
  moveit_msgs::GetPositionIK::Response service_response;
  service_request.ik_request.robot_state.joint_state.name = joint_state_group->getJointModelGroup()->getJointModelNames();
  service_request.ik_request.group_name = "manipulator";
  service_request.ik_request.pose_stamped.header.frame_id = "torso_roll_link";  
  service_request.ik_request.pose_stamped.pose.position.x = 0.0228744447231;
  service_request.ik_request.pose_stamped.pose.position.y =  -0.498571574688;
  service_request.ik_request.pose_stamped.pose.position.z = -0.898984670639;
  

service_request.ik_request.avoid_collisions = true;  
  /* Call the service */
  service_client.call(service_request, service_response);
  ROS_INFO_STREAM("Result: " << ((service_response.error_code.val == service_response.error_code.SUCCESS) ? "True " : "False ") << service_response.error_code.val);

  /* Filling in a seed state */
  
  /* Visualize the result*/
  moveit_msgs::DisplayRobotState msg;
  joint_state_group->setVariableValues(service_response.solution.joint_state);  
  robot_state::robotStateToRobotStateMsg(*kinematic_state, msg.state);
  robot_state_publisher.publish(msg);

  //Sleep to let the message go through
  ros::Duration(2.0).sleep();  
  
  ros::shutdown();  
  return 0;
}



I always get this error code 21 returned. Any idea why it is doing that?.

Karthik

Ioan Sucan

unread,
Jun 30, 2013, 2:55:50 AM6/30/13
to Karthikeyan Yuvraj, moveit-users, Christopher Korpela
Hello Kathik,

Error -21 means FRAME_TRANSFORM_FAILURE (from MoveItErrorCodes.msg)
Does the "torso_roll_link" frame exist in your model? Maybe try different frames of reference?

Ioan
Reply all
Reply to author
Forward
0 new messages