std::vector<double> joint_values;
//initialize joint values
robot_state->setJointGroupPositions("joint_group_name", joint_values);
const Eigen::Affine3d& link_pose = robot_state->getGlobalLinkTransform("link_name");
Eigen::Vector3d cartesian_position = link_pose.translation();
Eigen::Matrix3d link_orientation = link_pose.orientation();
ros::ServiceClient fk_client = n.serviceClient<moveit_msgs::GetPositionFK>("compute_fk");
moveit_msgs::GetPositionFK::Request fkrequest;
moveit_msgs::GetPositionFK::Response fk_response;
fkrequest.header.frame_id = "link0";
fkrequest.fk_link_names.resize(1);
fkrequest.fk_link_names[0] = "link7";
fkrequest.robot_state.joint_state.position = goal.trajectory.points[i].positions;
fkrequest.robot_state.joint_state.name = goal.trajectory.joint_names;
if(fk_client.call(fkrequest, fk_response))
{
if(fk_response.error_code.val == fk_response.error_code.SUCCESS)
{
for(unsigned int i=0; i < fk_response.pose_stamped.size(); i ++)
{
ROS_INFO_STREAM("Link : " << fk_response.fk_link_names[i].c_str());
ROS_INFO_STREAM("Position: " <<
fk_response.pose_stamped[i].pose.position.x << "," <<
fk_response.pose_stamped[i].pose.position.y << "," <<
fk_response.pose_stamped[i].pose.position.z);
ROS_INFO("Orientation: %f %f %f %f",
fk_response.pose_stamped[i].pose.orientation.x,
fk_response.pose_stamped[i].pose.orientation.y,
fk_response.pose_stamped[i].pose.orientation.z,
fk_response.pose_stamped[i].pose.orientation.w);
}
}
else
{
ROS_ERROR("Forward kinematics failed");
}
}
else
{
ROS_ERROR("Forward kinematics service call failed");
}