Moveit & UR speed scaling: Controller is taking too long to execute trajectory
Hello everyone,
I am using a UR robot and Moveit. I am using speed scaling to adjust the speed of the robot. This is the UR driver that I am using and this is my controllers.yaml:
controller_list:
- name: ""
action_ns: scaled_pos_traj_controller/follow_joint_trajectory
type: FollowJointTrajectory
joints: [shoulder_pan_joint, shoulder_lift_joint, elbow_joint, wrist_1_joint, wrist_2_joint, wrist_3_joint]
Like mentioned in this question I added:
<param name="allowed_execution_duration_scaling" value="100.0"/>
but with a speed of 20% I still get the error:
Controller is taking too long to execute trajectory
Even though a allowed_execution_duration_scaling value of 5 should be enough for 20% of the speed.
With values over 50% I am not getting any error messages.
Do I have a wrong understanding of the function of the allowed_execution_duration_scaling?
What other ways are there to change the robot speed with moveit?
Thanks!
Daniel
This should not be necessary, but it depends a bit on what exactly you are trying to do.
As a first step: please update your question to mention which driver you are using.
I updated my question. Please let me know if any other information may be helpful. Thank you!
Based on your update: this is a "know issue". MoveIt's trajectory execution manager is not aware of any scaling on the driver/robot controller side, so it will assume 100% of the joint limits are available for execution. This will cause timeouts when executing trajectories with a robot controller configured for a lower maximum scale.
I'm not aware of any work to fix this right now. Possible approaches:
Because moveit is not aware of any scaling thought I could use the allowed_execution_duration_scaling. And by setting it to 5 my task would be allowed to last 5 times as long before a timeout. Which should be enough when executing it at 20% of the speed. I'll look into the other things. Thank you!
@gvdhoorn Would I be able to send the planned cartesian trajectory with MoveIt through a different trajectory execution manager and then make use of the speed scaling? If so do you have some resources that show how to do this? Could I follow this tutorial (http://wiki.ros.org/Robots/TIAGo/Tuto...) to send the trajectory and be able to scale the speed? My main goal is to execute a cartesian trajectory (planned with MoveIt ) and be able to change the speed during the execution. I am ok with not using the MoveIt execution manager. Thanks!