Can't get robot arm's current pose with a error (Failed to fetch current robot state)

asked 2019-05-28 04:56:13 -0500

harumo11 gravatar image

updated 2019-05-29 04:35:53 -0500

Hello, everyone.

Thank for looking this thread.

I want to get end-effector(link_t)'s pose using moveit::planning_interface::MoveGroupInterface::getCurrentPose().

But, I could not get end-effector's pose and orientation like below( I wonder that frame_id is world).

header: 
  seq: 0
  stamp: 74.419000000
  frame_id: world
pose: 
  position: 
    x: 0
    y: 0
    z: 0
  orientation: 
    x: 0
    y: 0
    z: 0
    w: 1

I got following error (Failed to fetch current robot state)

robot@robot-NG:~$ rosrun sia20_control sequential_ik_solver 
Is start spinner? true
[ INFO] [1559035400.947083805]: Loading robot model 'sia20'...
[ WARN] [1559035401.013390105]: Kinematics solver doesn't support #attempts anymore, but only a timeout.
Please remove the parameter '/robot_description_kinematics/sia20_arm/kinematics_solver_attempts' from your configuration.
[ INFO] [1559035402.311004825, 73.418000000]: Ready to take commands for planning group sia20_arm.
end effector name is 
[ INFO] [1559035403.314437642, 74.418000000]: Didn't received robot state (joint angles) with recent timestamp within 1 seconds.
Check clock synchronization if your are running ROS across multiple machines!
[ERROR] [1559035403.314531291, 74.419000000]: Failed to fetch current robot state
header: 
  seq: 0
  stamp: 74.419000000
  frame_id: world
pose: 
  position: 
    x: 0
    y: 0
    z: 0
  orientation: 
    x: 0
    y: 0
    z: 0
    w: 1

 [ INFO] [1559035404.314786192, 75.416000000]: Didn't received robot state (joint angles) with recent timestamp within 1 seconds.
Check clock synchronization if your are running ROS across multiple machines!
[ERROR] [1559035404.314857179, 75.417000000]: Failed to fetch current robot state
header: 
  seq: 0
  stamp: 75.417000000
  frame_id: world
pose: 
  position: 
    x: 0
    y: 0
    z: 0
  orientation: 
    x: 0
    y: 0
    z: 0
    w: 1

When I run following program.

#include <iostream>
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <trajectory_msgs/JointTrajectory.h>
#include <moveit/move_group_interface/move_group_interface.h>

int main(int argc, char* argv[])
{
    ros::init(argc, argv, "sequential_ik_solver");
    ros::NodeHandle node_handle;
    ros::AsyncSpinner spinner(3);
    spinner.start();
    std::cout << "Is start spinner? " << std::boolalpha << spinner.canStart() << std::endl;
    const std::string PLANNING_GROUP = "panda_arm";
    moveit::planning_interface::MoveGroupInterface move_group(PLANNING_GROUP);
    //move_group.setEndEffectorLink("link_t");
     std::cout << "end effector name is " << move_group.getEndEffector() << std::endl;

    while (ros::ok()) {
        std::cout << move_group.getCurrentPose() << std::endl;
   }

   return 0;
   }

I found the cause, take a look following image. My program which try to get end-effector pose is sequence_ik_solver. It subscribes /joint_states topic which is not published. And /sia20/joint_states topic which contains joints information is published from gazebo. I want /sequence_ik_solver to subscribe /sia20/joint_states topic. How should I do?

https://imgur.com/llaTcPk

I'm glad if you know how to solve this problem it or come up with the cause, let me know it.

Thanks in advance.

[Additional information]

  • source code
  • ROS distro : melodic
  • In single PC (NOT multiple computers)

If you need additional information, feel free to tell me it.

edit retag flag offensive close merge delete

Comments

Check clock synchronization if your are running ROS across multiple machines!

Have you investigated this message here? TF lookups between computers without syncing the clocks is a common problem.

PeteBlackerThe3rd gravatar imagePeteBlackerThe3rd ( 2019-05-28 05:19:52 -0500 )edit

I'm glad to reply!

Yes, I did. But, I use single machine. Do you know other candidate of the cause?

harumo11 gravatar imageharumo11 ( 2019-05-28 23:25:43 -0500 )edit