I cannot reproduce any deadlock as you are describing. Sending the current joint position as a target
$ ros2 action send_goal /passthrough_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory "{
trajectory: {
joint_names: [shoulder_pan_joint, shoulder_lift_joint, elbow_joint, wrist_1_joint, wrist_2_joint, wrist_3_joint],
points: [
{
positions: [-1.6007, -1.7271, -2.2030, -0.8080, 1.5951, -0.0310],
velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
accelerations: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
time_from_start: {sec: 2, nanosec: 0}
}
]
},
goal_time_tolerance: {sec: 1, nanosec: 0},
goal_tolerance: [
{name: shoulder_pan_joint, position: 0.01, velocity: 0.0, acceleration: 0.0},
{name: shoulder_lift_joint, position: 0.01, velocity: 0.0, acceleration: 0.0},
{name: elbow_joint, position: 0.01, velocity: 0.0, acceleration: 0.0},
{name: wrist_1_joint, position: 0.01, velocity: 0.0, acceleration: 0.0},
{name: wrist_2_joint, position: 0.01, velocity: 0.0, acceleration: 0.0},
{name: wrist_3_joint, position: 0.01, velocity: 0.0, acceleration: 0.0}
]
}"
yields to the following driver output for me:
[ros2_control_node-1] [INFO 2026-08-18 08:21:51.651] [passthrough_trajectory_controller]: Received new trajectory.
[ros2_control_node-1] [INFO 2026-08-18 08:21:51.652] [passthrough_trajectory_controller]: Accepted new trajectory with 1 points.
[ros2_control_node-1] [INFO 2026-08-18 08:21:51.652] [passthrough_trajectory_controller]: Using goal tolerances
[ros2_control_node-1] shoulder_pan_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1] shoulder_lift_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1] elbow_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1] wrist_1_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1] wrist_2_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1] wrist_3_joint -- position: 0.01, velocity: 0, acceleration: 0
[ros2_control_node-1]
[ros2_control_node-1] [INFO 2026-08-18 08:21:51.652] [passthrough_trajectory_controller]: Goal time tolerance: 1 sec
[ros2_control_node-1] [INFO 2026-08-18 08:21:51.662] [controller_manager.hardware_component.system.ur5e]: Got a new trajectory with 1 points.
[ros2_control_node-1] [INFO 2026-08-18 08:21:53.688] [controller_manager.hardware_component.system.ur5e]: Trajectory done callback called with result: 0
[ros2_control_node-1] [INFO 2026-08-18 08:21:53.689] [passthrough_trajectory_controller]: Trajectory executed successfully in 2.024882 (scaled) seconds! The real time needed for execution could be longer.
The action client reports the action as being executed successfully, as well.
Goal accepted with ID: 682b14a50d3449cab4d4654df804c68c
Result:
error_code: 0
error_string: Trajectory executed successfully in 2.024882 (scaled) seconds! The real time needed for execution could be longer.
Goal finished with status: SUCCEEDED
When using a very tight goal tolerance that is below the encoder’s noise level, the trajectory fails.
It can happen that the ROS control loop runs a bit faster than the robot’s one in which case you see the output you mentioned in the OP. But also in that case the trajectory finishes correctly:
[ros2_control_node-1] [INFO 2026-08-18 08:32:46.497] [passthrough_trajectory_controller]: Received new trajectory.
[ros2_control_node-1] [INFO 2026-08-18 08:32:46.498] [passthrough_trajectory_controller]: Accepted new trajectory with 1 points.
[ros2_control_node-1] [INFO 2026-08-18 08:32:46.498] [passthrough_trajectory_controller]: Goal time tolerance: 0 sec
[ros2_control_node-1] [INFO 2026-08-18 08:32:46.499] [controller_manager.hardware_component.system.ur5e]: Got a new trajectory with 1 points.
[ros2_control_node-1] [WARN 2026-08-18 08:32:48.503] [passthrough_trajectory_controller]: Trajectory should be finished by now. You may want to cancel this goal, if it is not.
[ros2_control_node-1] [INFO 2026-08-18 08:32:48.525] [controller_manager.hardware_component.system.ur5e]: Trajectory done callback called with result: 0
[ros2_control_node-1] [INFO 2026-08-18 08:32:48.527] [passthrough_trajectory_controller]: Trajectory executed successfully in 2.021978 (scaled) seconds! The real time needed for execution could be longer.