Go to the documentation of this file.00001
00002
00003
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
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
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