ros2_controllers icon indicating copy to clipboard operation
ros2_controllers copied to clipboard

JointTrajectoryController ignores tolerances sent via action client

Open livanov93 opened this issue 3 years ago • 2 comments

Would be nice to have JointTrajectoryController ignores goal_time_tolerance set via FollowJointTrajectory.Goal.goal_time_tolerance together with path_tolerance and goal_tolerance .

Potential ROS1 inspiration Implement something like a ROS1 version updateSegmentTolerances which is called every time new goal is received through updateTrajectoryCommand or whenever new trajectory is received. The parameter propagation is continued on the call of initJointTrajectory which in the end uses updateSegmentTolerances here

This is needed to be able to overwrite constraints that are set via parameter server on the jtc start.

livanov93 avatar Oct 07 '21 11:10 livanov93

It seems that the constraints.goal_time parameter is also ignored (at least for state position + control position).

I am getting Goal finished with status: SUCCEEDED even if the joint hasn't reached the position.

ros2 action send_goal /ur_joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory "{
>   trajectory: {
>     joint_names: [shoulder_pan_joint],
>     points: [
>       { positions: [3.02], time_from_start: { sec: 0, nanosec: 100 } },
>     ]
>   },
>   goal_tolerance: [
>     { name: shoulder_pan_joint, position: 0.00000001 },
>   ]
> }"
Waiting for an action server to become available...
Sending goal:
     trajectory:
  header:
    stamp:
      sec: 0
      nanosec: 0
    frame_id: ''
  joint_names:
  - shoulder_pan_joint
  points:
  - positions:
    - 3.02
    velocities: []
    accelerations: []
    effort: []
    time_from_start:
      sec: 0
      nanosec: 100
path_tolerance: []
goal_tolerance:
- name: shoulder_pan_joint
  position: 1.0e-08
  velocity: 0.0
  acceleration: 0.0
goal_time_tolerance:
  sec: 0
  nanosec: 0

Goal accepted with ID: 816cd999bcca4225b6f7c027cb64998e

Result:
    error_code: 0
error_string: ''

Goal finished with status: SUCCEEDED

lukicdarkoo avatar Dec 25 '21 13:12 lukicdarkoo

This issue should motivate to implement an option to overwrite tolerances that are sent via action goal. This is not implemented yet. For now, if you want to enforce constraints on the state (during trajectory) and on the final (goal) configuration you should set parameters like shown here in UR example.

constraints.goal_time just makes sure the open-loop control has correct timing on the end of trajectory (e.g. trajectory is executed within the specified time). If it is set to 0, it is ignored. For details see here

livanov93 avatar Jan 08 '22 09:01 livanov93