What determines the successful end of a trajectory
Ok, Time to ask for help: (Using ROS in Windows/melodic)
I'm working on creating a ROS-i robot support package based upon reading their FAQ/Tutorials (http://wiki.ros.org/Industrial/Tutorials). I've got the support package and the basic moveit/Rviz package running. I'm working on the driver package, specifically getting it to talk to the hardware/robot and follow a trajectory. I've, for the most part, used the Fanuc robots (http://wiki.ros.org/fanuc_driver) as an example when I didn't understand a concept and that's helped a lot. The Status/State and Trajectory servers of the driver seem to be working quite well and the robot is executing the planned trajectory as as series of Joint Trajectory Point messages. Problem is I always get the "taking too Long" error:
[/move_group] [ros.moveit_ros_planning.trajectory_execution_manager]: Controller is taking too long to execute trajectory (the expected upper bound for the trajectory execution was 32.060151 seconds). Stopping trajectory.'
At first this problem was simply due (I assume) to the fact that I had a joint velocity specified in my URDF/joint_velocities.yaml that were way too aggressive for the robot. However, I've adjusted the joint velocities and now the movement completes well within the expected time (Note the 32 seconds limit). Problem is that I am still getting the error message. I've been trying to validate my low level driver implementation which is based upon the examples in the industrial_core package. I've searched extensively and can't come up with anything that succinctly describes the exact message passing progression expected for the ROS-i Joint_Trajectory_Streamer component (or any other one for that matter) that's feeding the messages to my driver so I am unsure if I've implemented it fully.
Beyond that, Searching on the error hasn't been fruitful either. I've learned how to disable in the launch file (which I don't want to do but it did work when utilized) and other sources including the Fanuc Trouble shooting pages only ever suggest issues with slow robots. (http://gavanderhoorn.github.io/fanuc-...) Unfortunately, the solutions only discuss skipping the timeout check or adjusting your velocities.
I'm probably using poor search terms and or just looking past the answer when digging through trajectory_execution_manager information. I have attempted to peruse the code but that's getting confusing and I think I'm just fried because I don't understand what the robot needs to provide when to satisfy it's needs at the end of a trajectory.
I'm wondering if anyone can tell me specifically what the trajectory_execution_manager is looking for to determine that the robot has successfully completed the published trajectory? And by extension, what should my Robot driver be supplying that ultimately is published back to the trajectory_execution_manager to satisfy that.