get_fk.cpp
Go to the documentation of this file.
00001 //
00002 // Copied from
00003 // http://www.ros.org/wiki/pr2_kinematics/Tutorials/Tutorial%203
00004 //
00005 
00006 #include <ros/ros.h>
00007 #include <kinematics_msgs/GetKinematicSolverInfo.h>
00008 #include <kinematics_msgs/GetPositionFK.h>
00009 
00010 int main(int argc, char **argv){
00011     ros::init (argc, argv, "get_fk");
00012     ros::NodeHandle rh;
00013 
00014     ros::service::waitForService("pr2_right_arm_kinematics/get_fk_solver_info");
00015     ros::service::waitForService("pr2_right_arm_kinematics/get_fk");
00016 
00017     ros::ServiceClient query_client = 
00018         rh.serviceClient<kinematics_msgs::GetKinematicSolverInfo>
00019         ("pr2_right_arm_kinematics/get_fk_solver_info");
00020     ros::ServiceClient fk_client = rh.serviceClient
00021         <kinematics_msgs::GetPositionFK>("pr2_right_arm_kinematics/get_fk");
00022 
00023     // define the service messages
00024     kinematics_msgs::GetKinematicSolverInfo::Request request;
00025     kinematics_msgs::GetKinematicSolverInfo::Response response;
00026     if(query_client.call(request,response))
00027     {
00028         for(unsigned int i=0; 
00029                 i< response.kinematic_solver_info.joint_names.size(); i++)
00030         {
00031             ROS_DEBUG("Joint: %d %s", i,
00032                     response.kinematic_solver_info.joint_names[i].c_str());
00033         }
00034     }
00035     else
00036     {
00037         ROS_ERROR("Could not call query service");
00038         ros::shutdown();
00039         exit(1);
00040     }
00041     // define the service messages
00042     kinematics_msgs::GetPositionFK::Request  fk_request;
00043     kinematics_msgs::GetPositionFK::Response fk_response;
00044     fk_request.header.frame_id = "torso_lift_link";
00045     fk_request.fk_link_names.resize(2);
00046     fk_request.fk_link_names[0] = "r_wrist_roll_link";
00047     fk_request.fk_link_names[1] = "r_elbow_flex_link";
00048     fk_request.robot_state.joint_state.position.resize
00049         (response.kinematic_solver_info.joint_names.size());
00050     fk_request.robot_state.joint_state.name = 
00051         response.kinematic_solver_info.joint_names;
00052     for(unsigned int i=0; 
00053             i< response.kinematic_solver_info.joint_names.size(); i++)
00054     {
00055         fk_request.robot_state.joint_state.position[i] = 0.5;
00056     }
00057     if(fk_client.call(fk_request, fk_response))
00058     {
00059         if(fk_response.error_code.val == fk_response.error_code.SUCCESS)
00060         {
00061             for(unsigned int i=0; i < fk_response.pose_stamped.size(); i ++)
00062             {
00063                 ROS_INFO_STREAM("Link    : " << fk_response.fk_link_names[i].c_str());
00064                 ROS_INFO_STREAM("Position: " << 
00065                         fk_response.pose_stamped[i].pose.position.x << "," <<  
00066                         fk_response.pose_stamped[i].pose.position.y << "," << 
00067                         fk_response.pose_stamped[i].pose.position.z);
00068                 ROS_INFO("Orientation: %f %f %f %f",
00069                         fk_response.pose_stamped[i].pose.orientation.x,
00070                         fk_response.pose_stamped[i].pose.orientation.y,
00071                         fk_response.pose_stamped[i].pose.orientation.z,
00072                         fk_response.pose_stamped[i].pose.orientation.w);
00073             } 
00074         }
00075         else
00076         {
00077             ROS_ERROR("Forward kinematics failed");
00078         }
00079     }
00080     else
00081     {
00082         ROS_ERROR("Forward kinematics service call failed");
00083     }
00084     ros::shutdown();
00085 }
00086 
00087 
00088 


hrl_pr2_kinematics_tutorials
Author(s): Advait Jain (Healthcare Robotics Lab)
autogenerated on Wed Nov 27 2013 12:09:35