How should I handle Joint trajectory action rejected?
Sometimes when trying to move my Fanuc robot through ROS-I I get the following error:
[ INFO] [1427900161.223169237]: Ready to take MoveGroup commands for group manipulator.
[ INFO] [1427900161.225343125]: Received request to compute Cartesian path
[ INFO] [1427900161.225658071]: Attempting to follow 1 waypoints for link 'ensenso_tcp' using a step of 0.050000 m and jump threshold 0.000000 (in global reference frame)
[ INFO] [1427900161.227305408]: Computed Cartesian path with 3 points (followed 100.000000% of requested trajectory)
[ INFO] [1427900161.229680116]: Received new trajectory execution service request...
[ERROR] [1427900161.230490467]: Joint trajectory action rejected: waiting for (initial) feedback from controller
[ WARN] [1427900161.230876230]: Controller failed with error code INVALID_GOAL
[ WARN] [1427900161.230961667]: Controller handle reports status FAILED
[ INFO] [1427900161.231078520]: Execution completed: FAILED
I understand from this question that the joint_trajectory_action
node didn't receive state information from the robot controller (or maybe the information is too old).
How do I handle this error? I want to send the trajectory again until it is executed.
I tried the following with no success:
move_group_interface::MoveGroup group("manipulator");
group.setPoseReferenceFrame("/base");
moveit_msgs::ExecuteKnownTrajectory srv;
srv.request.wait_for_execution = true;
ros::ServiceClient executeKnownTrajectoryServiceClient = node.serviceClient<moveit_msgs::ExecuteKnownTrajectory>("/execute_kinematic_path");
std::vector<geometry_msgs::Pose> way_points_msg (1);
Eigen::Affine3d initial_pose (Eigen::Affine3d::Identity());
initial_pose.linear () << 0, 1, 0,
1, 0, 0,
0, 0, -1;
initial_pose.translation() << 1.0, 0.3, -0.15;
tf::poseEigenToMsg (initial_pose, way_points_msg[0]);
if (group.computeCartesianPath(way_points_msg, 0.05, 0, srv.request.trajectory) < 0.95)
{
ROS_ERROR_STREAM("Cannot reach initial pose");
return -1;
}
if (!executeKnownTrajectoryServiceClient.call(srv))
{
ROS_ERROR_STREAM("Cannot execute trajectory!");
return -1;
}
.call()
does not return false
when the previous error happens.
You should only get that error if no state info from the controller has been received (ie: if no joint states have been received). If you are sure
TrajectoryFeedback
is being published, then please log an issue againstindustrial_robot_client
, as that would appear to be a bug.