The most important thing I had to change was allowing Baxter to have more time to complete trajectories since its controls are not the best. I added two new optional parameters to MoveIt recently that allow you to do just this. First, you should set your max velocity low in joint_limits.yaml. Then, in trajectory_execution.launch, you can add these lines:<!-- When determining the expected duration of a trajectory, this multiplicative factor is applied to get the allowed duration of execution --><param name="allowed_execution_duration_scaling" value="1.5"/> <!-- default 1.2 --><!-- Allow more than the expected execution time before triggering a trajectory cancel (applied after scaling) --><param name="allowed_goal_duration_margin" value="1.5"/> <!-- default 0.5 -->
The most important thing I had to change was allowing Baxter to have more time to complete trajectories since its controls are not the best. I added two new optional parameters to MoveIt recently that allow you to do just this. First, you should set your max velocity low in joint_limits.yaml. Then, in trajectory_execution.launch, you can add these lines:<!-- When determining the expected duration of a trajectory, this multiplicative factor is applied to get the allowed duration of execution --><param name="allowed_execution_duration_scaling" value="1.5"/> <!-- default 1.2 --><!-- Allow more than the expected execution time before triggering a trajectory cancel (applied after scaling) --><param name="allowed_goal_duration_margin" value="1.5"/> <!-- default 0.5 -->Why did you have to add goal tolerances at the MoveIt! level?.
The FollowJointTrajectoryAction API [1,2] already allows to specify both path and goal tolerances (and in a more expressive way), and implementations should be expected to enforce them. Does MoveIt! need such information internally for something?. IMO, it would be best if we could separate concerns here and make MoveIt! agnostic to trajectory execution details such as tolerances. It can also be confusing to have two separate places to specify similar behaviors.
On Mon, Nov 4, 2013 at 7:57 PM, Adolfo Rodríguez Tsouroukdissian <adolfo.r...@pal-robotics.com> wrote:
The most important thing I had to change was allowing Baxter to have more time to complete trajectories since its controls are not the best. I added two new optional parameters to MoveIt recently that allow you to do just this. First, you should set your max velocity low in joint_limits.yaml. Then, in trajectory_execution.launch, you can add these lines:<!-- When determining the expected duration of a trajectory, this multiplicative factor is applied to get the allowed duration of execution --><param name="allowed_execution_duration_scaling" value="1.5"/> <!-- default 1.2 --><!-- Allow more than the expected execution time before triggering a trajectory cancel (applied after scaling) --><param name="allowed_goal_duration_margin" value="1.5"/> <!-- default 0.5 -->Why did you have to add goal tolerances at the MoveIt! level?.
From my memory, MoveIt! does not monitor the trajectory as it is being executed, but only listens to the actionlib result to see if it was successful or not. However, MoveIt! does timeout if the actionlib result does not return successful within the time that MoveIt! excepts the trajectory to be executed. This has caused me a lot of pain getting the synchronization correct because the entire pick-and-place pipeline, I believe, runs on a non-re configurable timeline of pregrasp at time t1, grasp at time t2, etc... I've exposed recently some params that allow you to tweak how long MoveIt! will wait before timing out (see first email in this chain) but still its difficult. And yes, I'm using your implementation Adolfo of the FollowJointTrajectory controller.
> Question re-stated: Are the goal constraints specified in MoveIt! passed along to the FollowJointTrajectory goal request so they can be enforced in the controller?,Like I said, I believe only the total trajectory time is enforced, not position constraints, etc.