Can't get robot arm's current pose with a error (Failed to fetch current robot state)
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?
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.
Have you investigated this message here? TF lookups between computers without syncing the clocks is a common problem.
I'm glad to reply!
Yes, I did. But, I use single machine. Do you know other candidate of the cause?
Did you manage to solve this problem? I have the same issue
Hello. ThimoF, Yes. I did. Could you show me your the result of rqt_graph and launch file. If you just change topic name, you can use remap command in your launch file.
Hi! I'm running into the same error. It seems that move_group is subscribed to /joint_states, but I don't understand why It does not work. How did you managed to solve it?
Thank you harumo11, my joint states where published under the /robot/joint_states topic. Remapping fixed the issue. lms95 maybe this works for you as well. Use "rqt_graph" or "rostopic list" to find the correct topic and use remapping in your launch file or as a rosrun argument
It may sound silly, in fact it is, and a bit embarrassing but my simulation was paused, that was the reason why I wasn't receiving data. Thank you for the reply anyways!